From f7d938ee229d579b6dc5b171c95217813f6fa42a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 19 Aug 2024 17:49:27 -0700 Subject: [PATCH 001/268] checkpoint --- .../circuit-v2/src/machine/compress.rs | 461 ++++++++++++++++++ .../recursion/circuit-v2/src/machine/core.rs | 165 ++++--- .../circuit-v2/src/machine/witness.rs | 34 +- crates/recursion/circuit-v2/src/utils.rs | 15 +- crates/recursion/circuit-v2/src/witness.rs | 12 + 5 files changed, 596 insertions(+), 91 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 8b13789179..5df6d64c4d 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -1 +1,462 @@ +use std::{ + array, + borrow::{Borrow, BorrowMut}, + marker::PhantomData, +}; +use itertools::{izip, Itertools}; + +use p3_air::Air; +use p3_baby_bear::BabyBear; + +use p3_commit::Mmcs; +use p3_field::AbstractField; +use p3_matrix::dense::RowMajorMatrix; + +use sp1_recursion_compiler::ir::{Builder, Felt}; + +use sp1_recursion_core_v2::{ + air::{ChallengerPublicValues, RecursionPublicValues, RECURSIVE_PROOF_NUM_PV_ELTS}, + D, +}; + +use sp1_stark::{ + air::{MachineAir, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}, + ShardProof, StarkGenericConfig, StarkMachine, StarkVerifyingKey, Word, DIGEST_SIZE, +}; + +use crate::{ + challenger::CanObserveVariable, + constraints::RecursiveVerifierConstraintFolder, + stark::{ShardProofVariable, StarkVerifier}, + utils::{commit_recursion_public_values, uninit_challenger_pv}, + BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, +}; + +/// A program to verify a batch of recursive proofs and aggregate their public values. +#[derive(Debug, Clone, Copy)] +pub struct SP1CompressVerifier { + _phantom: PhantomData<(C, SC, A)>, +} + +/// Witness layout for the compress stage verifier. +pub struct SP1CompressWitnessVariable< + C: CircuitConfig, + SC: BabyBearFriConfigVariable, +> { + /// The shard proofs to verify. + pub vks_and_proofs: Vec<(VerifyingKeyVariable, ShardProofVariable)>, + pub is_complete: Felt, +} + +/// An input layout for the reduce verifier. +pub struct SP1CompressWitnessValues { + pub vks_and_proofs: Vec<(StarkVerifyingKey, ShardProof)>, + pub is_complete: bool, +} + +impl SP1CompressVerifier +where + SC: BabyBearFriConfigVariable, + C: CircuitConfig>, + >::ProverData>: Clone, + A: MachineAir + for<'a> Air>, +{ + /// Verify a batch of recursive proofs and aggregate their public values. + /// + /// The compression verifier can aggregate proofs of different kinds: + /// - Core proofs: proofs which are recursive proof of a batch of SP1 shard proofs. The + /// implementation in this function assumes a fixed recursive verifier speicified by + /// `recursive_vk`. + /// - Deferred proofs: proofs which are recursive proof of a batch of deferred proofs. The + /// implementation in this function assumes a fixed deferred verification program specified + /// by `deferred_vk`. + /// - Compress proofs: these are proofs which refer to a prove of this program. The key for + /// it is part of public values will be propagated accross all levels of recursion and will + /// be checked against itself as in [sp1_prover::Prover] or as in [super::SP1RootVerifier]. + pub fn verify( + builder: &mut Builder, + machine: &StarkMachine, + input: SP1CompressWitnessVariable, + // TODO: add vk correctness check. + // vk_root: SC::Digest, + // Inclusion proof for the compressed vk. + // vk_inclusion_proof: proof, + ) { + // Read input. + let SP1CompressWitnessVariable { vks_and_proofs, is_complete } = input; + + // Initialize the values for the aggregated public output. + + let mut reduce_public_values_stream: Vec> = + (0..RECURSIVE_PROOF_NUM_PV_ELTS).map(|_| builder.uninit()).collect(); + let compress_public_values: &mut RecursionPublicValues<_> = + reduce_public_values_stream.as_mut_slice().borrow_mut(); + + // TODO: add vk correctness check. + + // Make sure there is at least one proof. + assert!(!vks_and_proofs.is_empty()); + + // Initialize the consistency check variables. + let sp1_vk_digest: [Felt<_>; DIGEST_SIZE] = array::from_fn(|_| builder.uninit()); + let pc: Felt<_> = builder.uninit(); + let shard: Felt<_> = builder.uninit(); + let execution_shard: Felt<_> = builder.uninit(); + let mut initial_reconstruct_challenger_values: ChallengerPublicValues> = + uninit_challenger_pv(builder); + let mut reconstruct_challenger_values: ChallengerPublicValues> = + uninit_challenger_pv(builder); + let mut leaf_challenger_values: ChallengerPublicValues> = + uninit_challenger_pv(builder); + let committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = + array::from_fn(|_| Word(array::from_fn(|_| builder.uninit()))); + let deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + array::from_fn(|_| builder.uninit()); + let reconstruct_deferred_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + core::array::from_fn(|_| builder.uninit()); + let cumulative_sum: [Felt<_>; D] = core::array::from_fn(|_| builder.eval(C::F::zero())); + let init_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); + let finalize_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); + + // Verify proofs, check consistency, and aggregate public values. + for (i, (vk, shard_proof)) in vks_and_proofs.into_iter().enumerate() { + // Verify the shard proof. + + // Prepare a challenger. + let mut challenger = machine.config().challenger_variable(builder); + + // Observe the vk and start pc. + challenger.observe(builder, vk.commitment); + challenger.observe(builder, vk.pc_start); + + // Observe the main commitment and public values. + challenger.observe(builder, shard_proof.commitment.main_commit); + challenger.observe_slice( + builder, + shard_proof.public_values[0..machine.num_pv_elts()].iter().copied(), + ); + StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); + + // Get the current public values. + let current_public_values: &RecursionPublicValues> = + shard_proof.public_values.as_slice().borrow(); + + if i == 0 { + // Initialize global and accumulated values. + + // Initialize the start of deferred digests. + for (digest, current_digest, global_digest) in izip!( + reconstruct_deferred_digest.iter(), + current_public_values.start_reconstruct_deferred_digest.iter(), + compress_public_values.start_reconstruct_deferred_digest.iter() + ) { + builder.assign(*digest, *current_digest); + builder.assign(*global_digest, *current_digest); + } + + // Initialize the sp1_vk digest + for (digest, first_digest) in + sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) + { + builder.assign(*digest, first_digest); + } + + // Initiallize start pc. + builder.assign(compress_public_values.start_pc, current_public_values.start_pc); + builder.assign(pc, current_public_values.start_pc); + + // Initialize start shard. + builder.assign(shard, current_public_values.start_shard); + builder + .assign(compress_public_values.start_shard, current_public_values.start_shard); + + // Initialize start execution shard. + builder.assign(execution_shard, current_public_values.start_execution_shard); + builder.assign( + compress_public_values.start_execution_shard, + current_public_values.start_execution_shard, + ); + + // Initialize the MemoryInitialize address bits. + for (bit, (first_bit, current_bit)) in init_addr_bits.iter().zip( + compress_public_values + .previous_init_addr_bits + .iter() + .zip(current_public_values.previous_init_addr_bits.iter()), + ) { + builder.assign(*bit, *current_bit); + builder.assign(*first_bit, *current_bit); + } + + // Initialize the MemoryFinalize address bits. + for (bit, (first_bit, current_bit)) in finalize_addr_bits.iter().zip( + compress_public_values + .previous_finalize_addr_bits + .iter() + .zip(current_public_values.previous_finalize_addr_bits.iter()), + ) { + builder.assign(*bit, *current_bit); + builder.assign(*first_bit, *current_bit); + } + + // Initialize the leaf challenger public values. + leaf_challenger_values = current_public_values.leaf_challenger; + // Initialize the reconstruct challenger public values. + reconstruct_challenger_values = current_public_values.start_reconstruct_challenger; + // Initialize the initial reconstruct challenger public values. + initial_reconstruct_challenger_values = + current_public_values.start_reconstruct_challenger; + + // Assign the commited values and deferred proof digests. + for (word, current_word) in committed_value_digest + .iter() + .zip_eq(current_public_values.committed_value_digest.iter()) + { + for (byte, current_byte) in word.0.iter().zip_eq(current_word.0.iter()) { + builder.assign(*byte, *current_byte); + } + } + + for (digest, current_digest) in deferred_proofs_digest + .iter() + .zip_eq(current_public_values.deferred_proofs_digest.iter()) + { + builder.assign(*digest, *current_digest); + } + } + + // Assert that the current values match the accumulated values. + + // // Assert that the start deferred digest is equal to the current deferred digest. + // for (digest, current_digest) in reconstruct_deferred_digest.iter().zip_eq( + // current_public_values + // .start_reconstruct_deferred_digest + // .iter(), + // ) { + // builder.assert_felt_eq(*digest, *current_digest); + // } + + // // Consistency checks for all accumulated values. + + // // Assert that the sp1_vk digest is always the same. + // for (digest, current) in sp1_vk_digest + // .iter() + // .zip(current_public_values.sp1_vk_digest) + // { + // builder.assert_felt_eq(*digest, current); + // } + + // // Assert that the start pc is equal to the current pc. + // builder.assert_felt_eq(pc, current_public_values.start_pc); + + // // Verify that the shard is equal to the current shard. + // builder.assert_felt_eq(shard, current_public_values.start_shard); + + // // Verfiy that the exeuction shard is equal to the current execution shard. + // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + + // // Assert that the leaf challenger is always the same. + + // // Assert that the MemoryInitialize address bits are the same. + // for (bit, current_bit) in init_addr_bits + // .iter() + // .zip(current_public_values.previous_init_addr_bits.iter()) + // { + // builder.assert_felt_eq(*bit, *current_bit); + // } + + // // Assert that the MemoryFinalize address bits are the same. + // for (bit, current_bit) in finalize_addr_bits + // .iter() + // .zip(current_public_values.previous_finalize_addr_bits.iter()) + // { + // builder.assert_felt_eq(*bit, *current_bit); + // } + + // Assert that the leaf challenger is always the same. + + // assert_challenger_eq_pv( + // builder, + // &leaf_challenger, + // current_public_values.leaf_challenger, + // ); + // // Assert that the current challenger matches the start reconstruct challenger. + // assert_challenger_eq_pv( + // builder, + // &reconstruct_challenger, + // current_public_values.start_reconstruct_challenger, + // ); + + // Digest constraints. + { + // // If `commited_value_digest` is not zero, then `public_values.commited_value_digest + // // should be the current value. + // let is_zero: Var<_> = builder.eval(C::N::one()); + // #[allow(clippy::needless_range_loop)] + // for i in 0..committed_value_digest.len() { + // for j in 0..WORD_SIZE { + // let d = felt2var(builder, committed_value_digest[i][j]); + // builder.if_ne(d, C::N::zero()).then(|builder| { + // builder.assign(is_zero, C::N::zero()); + // }); + // } + // } + // builder.if_eq(is_zero, C::N::zero()).then(|builder| { + // #[allow(clippy::needless_range_loop)] + // for i in 0..committed_value_digest.len() { + // for j in 0..WORD_SIZE { + // builder.assert_felt_eq( + // committed_value_digest[i][j], + // current_public_values.committed_value_digest[i][j], + // ); + // } + // } + // }); + + // Update the committed value digest. + for (word, current_word) in committed_value_digest + .iter() + .zip_eq(current_public_values.committed_value_digest.iter()) + { + for (byte, current_byte) in word.0.iter().zip_eq(current_word.0.iter()) { + builder.assign(*byte, *current_byte); + } + } + // Less nice version of above but simialr to original code: + // for i in 0..committed_value_digest.len() { + // for j in 0..WORD_SIZE { + // builder.assign( + // committed_value_digest[i][j], + // current_public_values.committed_value_digest[i][j], + // ); + // } + // } + + // // If `deferred_proofs_digest` is not zero, then `public_values.deferred_proofs_digest + // // should be the current value. + // let is_zero: Var<_> = builder.eval(C::N::one()); + // #[allow(clippy::needless_range_loop)] + // for i in 0..deferred_proofs_digest.len() { + // let d = felt2var(builder, deferred_proofs_digest[i]); + // builder.if_ne(d, C::N::zero()).then(|builder| { + // builder.assign(is_zero, C::N::zero()); + // }); + // } + // builder.if_eq(is_zero, C::N::zero()).then(|builder| { + // #[allow(clippy::needless_range_loop)] + // for i in 0..deferred_proofs_digest.len() { + // builder.assert_felt_eq( + // deferred_proofs_digest[i], + // current_public_values.deferred_proofs_digest[i], + // ); + // } + // }); + + // Update the deferred proofs digest. + for (digest, current_digest) in deferred_proofs_digest + .iter() + .zip_eq(current_public_values.deferred_proofs_digest.iter()) + { + builder.assign(*digest, *current_digest); + } + + // Less nice version of above but simialr to original code: + // #[allow(clippy::needless_range_loop)] + // for i in 0..deferred_proofs_digest.len() { + // builder.assign( + // deferred_proofs_digest[i], + // current_public_values.deferred_proofs_digest[i], + // ); + // } + } + + // Update the deferred proof digest. + for (digest, current_digest) in reconstruct_deferred_digest + .iter() + .zip_eq(current_public_values.end_reconstruct_deferred_digest.iter()) + { + builder.assign(*digest, *current_digest); + } + + // Update the accumulated values. + // Update pc to be the next pc. + builder.assign(pc, current_public_values.next_pc); + + // Update the shard to be the next shard. + builder.assign(shard, current_public_values.next_shard); + + // Update the execution shard to be the next execution shard. + builder.assign(execution_shard, current_public_values.next_execution_shard); + + // Update the MemoryInitialize address bits. + for (bit, next_bit) in + init_addr_bits.iter().zip(current_public_values.last_init_addr_bits.iter()) + { + builder.assign(*bit, *next_bit); + } + + // Update the MemoryFinalize address bits. + for (bit, next_bit) in + finalize_addr_bits.iter().zip(current_public_values.last_finalize_addr_bits.iter()) + { + builder.assign(*bit, *next_bit); + } + + // Update the reconstruct challenger. + reconstruct_challenger_values = current_public_values.end_reconstruct_challenger; + + // Update the cumulative sum. + for (sum_element, current_sum_element) in + cumulative_sum.iter().zip_eq(current_public_values.cumulative_sum.iter()) + { + builder.assign(*sum_element, *sum_element + *current_sum_element); + } + } + + // Update the global values from the last accumulated values. + // Set sp1_vk digest to the one from the proof values. + compress_public_values.sp1_vk_digest = sp1_vk_digest; + // Set next_pc to be the last pc (which is the same as accumulated pc) + compress_public_values.next_pc = pc; + // Set next shard to be the last shard + compress_public_values.next_shard = shard; + // Set next execution shard to be the last execution shard + compress_public_values.next_execution_shard = execution_shard; + // Set the MemoryInitialize address bits to be the last MemoryInitialize address bits. + compress_public_values.last_init_addr_bits = init_addr_bits; + // Set the MemoryFinalize address bits to be the last MemoryFinalize address bits. + compress_public_values.last_finalize_addr_bits = finalize_addr_bits; + // Set the leaf challenger to it's value. + compress_public_values.leaf_challenger = leaf_challenger_values; + // Set the start reconstruct challenger to be the initial reconstruct challenger. + compress_public_values.start_reconstruct_challenger = initial_reconstruct_challenger_values; + // Set the end reconstruct challenger to be the last reconstruct challenger. + compress_public_values.end_reconstruct_challenger = reconstruct_challenger_values; + // Set the start reconstruct deferred digest to be the last reconstruct deferred digest. + compress_public_values.end_reconstruct_deferred_digest = reconstruct_deferred_digest; + // Assign the deferred proof digests. + compress_public_values.deferred_proofs_digest = deferred_proofs_digest; + // Assign the committed value digests. + compress_public_values.committed_value_digest = committed_value_digest; + // Assign the cumulative sum. + compress_public_values.cumulative_sum = cumulative_sum; + // Assign the `is_complete` flag. + compress_public_values.is_complete = is_complete; + + // // If the proof is complete, make completeness assertions and set the flag. Otherwise, check + // // the flag is zero and set the public value to zero. + // builder.if_eq(is_complete, C::N::one()).then_or_else( + // |builder| { + // builder.assign(compress_public_values.is_complete, C::F::one()); + // assert_complete(builder, compress_public_values, &reconstruct_challenger) + // }, + // |builder| { + // builder.assert_var_eq(is_complete, C::N::zero()); + // builder.assign(compress_public_values.is_complete, C::F::zero()); + // }, + // ); + + commit_recursion_public_values(builder, compress_public_values); + } +} diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 32d62cc2ca..ff74eb95b5 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -17,10 +17,7 @@ use sp1_stark::{ StarkMachine, Word, }; -use crate::{ - utils::commit_recursion_public_values, BabyBearFriConfig, BabyBearFriConfigVariable, - CircuitConfig, -}; +use sp1_stark::{ShardProof, StarkGenericConfig, StarkVerifyingKey}; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, @@ -35,7 +32,8 @@ use sp1_recursion_core_v2::{ use crate::{ challenger::{CanObserveVariable, DuplexChallengerVariable}, stark::{ShardProofVariable, StarkVerifier}, - VerifyingKeyVariable, + utils::commit_recursion_public_values, + BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, }; pub struct SP1RecursionWitnessVariable< @@ -49,6 +47,14 @@ pub struct SP1RecursionWitnessVariable< pub is_complete: Felt, } +pub struct SP1RecursionWitnessValues { + pub vk: StarkVerifyingKey, + pub shard_proofs: Vec>, + pub leaf_challenger: SC::Challenger, + pub initial_reconstruct_challenger: SC::Challenger, + pub is_complete: bool, +} + /// A program for recursively verifying a batch of SP1 proofs. #[derive(Debug, Clone, Copy)] pub struct SP1RecursiveVerifier { @@ -106,37 +112,38 @@ where } = input; // Initialize shard variables. - let initial_shard: Felt<_> = builder.uninit(); - let current_shard: Felt<_> = builder.uninit(); + let mut initial_shard: Felt<_> = builder.uninit(); + let mut current_shard: Felt<_> = builder.uninit(); // Initialize execution shard variables. - let initial_execution_shard: Felt<_> = builder.uninit(); - let current_execution_shard: Felt<_> = builder.uninit(); + let mut initial_execution_shard: Felt<_> = builder.uninit(); + let mut current_execution_shard: Felt<_> = builder.uninit(); // Initialize program counter variables. - let start_pc: Felt<_> = builder.uninit(); - let current_pc: Felt<_> = builder.uninit(); + let mut start_pc: Felt<_> = builder.uninit(); + let mut current_pc: Felt<_> = builder.uninit(); // Initialize memory initialization and finalization variables. - let initial_previous_init_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); - let initial_previous_finalize_addr_bits: [Felt<_>; 32] = + let mut initial_previous_init_addr_bits: [Felt<_>; 32] = + array::from_fn(|_| builder.uninit()); + let mut initial_previous_finalize_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); - let current_init_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); - let current_finalize_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); + let mut current_init_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); + let mut current_finalize_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); // Initialize the exit code variable. - let exit_code: Felt<_> = builder.uninit(); + let mut exit_code: Felt<_> = builder.uninit(); // Initialize the public values digest. - let committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = + let mut committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = array::from_fn(|_| Word(array::from_fn(|_| builder.uninit()))); // Initialize the deferred proofs digest. - let deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + let mut deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = array::from_fn(|_| builder.uninit()); // Initialize the challenger variables. - let leaf_challenger_public_values = leaf_challenger.public_values(builder); + let mut leaf_challenger_public_values = leaf_challenger.public_values(builder); let mut reconstruct_challenger: DuplexChallengerVariable<_> = initial_reconstruct_challenger.copy(builder); @@ -161,54 +168,54 @@ where // If this is the first proof in the batch, initialize the variables. if i == 0 { // Shard. - builder.assign(initial_shard, public_values.shard); - builder.assign(current_shard, public_values.shard); + initial_shard = public_values.shard; + current_shard = public_values.shard; // Execution shard. - builder.assign(initial_execution_shard, public_values.execution_shard); - builder.assign(current_execution_shard, public_values.execution_shard); + initial_execution_shard = public_values.execution_shard; + current_execution_shard = public_values.execution_shard; // Program counter. - builder.assign(start_pc, public_values.start_pc); - builder.assign(current_pc, public_values.start_pc); + start_pc = public_values.start_pc; + current_pc = public_values.start_pc; // Memory initialization & finalization. for ((bit, pub_bit), first_bit) in current_init_addr_bits - .iter() + .iter_mut() .zip(public_values.previous_init_addr_bits.iter()) - .zip(initial_previous_init_addr_bits.iter()) + .zip(initial_previous_init_addr_bits.iter_mut()) { - builder.assign(*bit, *pub_bit); - builder.assign(*first_bit, *pub_bit); + *bit = *pub_bit; + *first_bit = *pub_bit; } for ((bit, pub_bit), first_bit) in current_finalize_addr_bits - .iter() + .iter_mut() .zip(public_values.previous_finalize_addr_bits.iter()) - .zip(initial_previous_finalize_addr_bits.iter()) + .zip(initial_previous_finalize_addr_bits.iter_mut()) { - builder.assign(*bit, *pub_bit); - builder.assign(*first_bit, *pub_bit); + *bit = *pub_bit; + *first_bit = *pub_bit; } // Exit code. - builder.assign(exit_code, public_values.exit_code); + exit_code = public_values.exit_code; // Commited public values digests. for (word, first_word) in committed_value_digest - .iter() + .iter_mut() .zip_eq(public_values.committed_value_digest.iter()) { - for (byte, first_byte) in word.0.iter().zip_eq(first_word.0.iter()) { - builder.assign(*byte, *first_byte); + for (byte, first_byte) in word.0.iter_mut().zip_eq(first_word.0.iter()) { + *byte = *first_byte; } } // Deferred proofs digests. for (digest, first_digest) in deferred_proofs_digest - .iter() + .iter_mut() .zip_eq(public_values.deferred_proofs_digest.iter()) { - builder.assign(*digest, *first_digest); + *digest = *first_digest; } } @@ -227,13 +234,7 @@ where // Do not verify the cumulative sum here, since the permutation challenge is shared // between all shards. let mut challenger = leaf_challenger.copy(builder); - StarkVerifier::::verify_shard( - builder, - &vk, - machine, - &mut challenger, - &shard_proof, - ); + StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); // // First shard has a "CPU" constraint. // { @@ -276,21 +277,19 @@ where // Execution shard constraints. // let execution_shard = felt2var(builder, public_values.execution_shard); { - // If the shard has a "CPU" chip, then the execution shard should be incremented by - // 1. + // If the shard has a "CPU" chip, then the execution shard should be incremented by 1. if contains_cpu { // Assert that the shard of the proof is equal to the current shard. - // builder.assert_felt_eq(current_execution_shard, - // public_values.execution_shard); + // builder.assert_felt_eq(current_execution_shard, public_values.execution_shard); - builder.assign(current_execution_shard, current_execution_shard + C::F::one()); + current_execution_shard = builder.eval(current_execution_shard + C::F::one()); } } // Program counter constraints. { - // // If it's the first shard (which is the first execution shard), then the - // start_pc // should be vk.pc_start. + // // If it's the first shard (which is the first execution shard), then the start_pc + // // should be vk.pc_start. // builder.if_eq(shard, C::N::one()).then(|builder| { // builder.assert_felt_eq(public_values.start_pc, vk.pc_start); // }); @@ -298,10 +297,10 @@ where // // Assert that the start_pc of the proof is equal to the current pc. // builder.assert_felt_eq(current_pc, public_values.start_pc); - // // If it's not a shard with "CPU", then assert that the start_pc equals the - // next_pc. builder.if_ne(contains_cpu, C::N::one()).then(|builder| - // { builder.assert_felt_eq(public_values.start_pc, - // public_values.next_pc); }); + // // If it's not a shard with "CPU", then assert that the start_pc equals the next_pc. + // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { + // builder.assert_felt_eq(public_values.start_pc, public_values.next_pc); + // }); // // If it's a shard with "CPU", then assert that the start_pc is not zero. // builder.if_eq(contains_cpu, C::N::one()).then(|builder| { @@ -309,7 +308,7 @@ where // }); // Update current_pc to be the end_pc of the current proof. - builder.assign(current_pc, public_values.next_pc); + current_pc = public_values.next_pc; } // Exit code constraints. @@ -320,12 +319,12 @@ where // Memory initialization & finalization constraints. { - // // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first - // execution shard. builder.if_eq(execution_shard, - // C::N::one()).then(|builder| { // Assert that the - // MemoryInitialize address bits are zero. for bit in - // current_init_addr_bits.iter() { builder.assert_felt_eq(* - // bit, C::F::zero()); } + // // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first execution shard. + // builder.if_eq(execution_shard, C::N::one()).then(|builder| { + // // Assert that the MemoryInitialize address bits are zero. + // for bit in current_init_addr_bits.iter() { + // builder.assert_felt_eq(*bit, C::F::zero()); + // } // // Assert that the MemoryFinalize address bits are zero. // for bit in current_finalize_addr_bits.iter() { @@ -362,8 +361,8 @@ where // } // }); - // // Assert that if MemoryFinalize is not present, then the address bits are the - // same. builder + // // Assert that if MemoryFinalize is not present, then the address bits are the same. + // builder // .if_ne(contains_memory_finalize, C::N::one()) // .then(|builder| { // for (prev_bit, last_bit) in public_values @@ -377,25 +376,25 @@ where // Update the MemoryInitialize address bits. for (bit, pub_bit) in - current_init_addr_bits.iter().zip(public_values.last_init_addr_bits.iter()) + current_init_addr_bits.iter_mut().zip(public_values.last_init_addr_bits.iter()) { - builder.assign(*bit, *pub_bit); + *bit = *pub_bit; } // Update the MemoryFinalize address bits. for (bit, pub_bit) in current_finalize_addr_bits - .iter() + .iter_mut() .zip(public_values.last_finalize_addr_bits.iter()) { - builder.assign(*bit, *pub_bit); + *bit = *pub_bit; } } // Digest constraints. { - // // If `commited_value_digest` is not zero, then - // `public_values.commited_value_digest // should be the current - // value. let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `commited_value_digest` is not zero, then `public_values.commited_value_digest + // // should be the current value. + // let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -417,8 +416,8 @@ where // } // }); - // // If it's not a shard with "CPU", then the committed value digest should not - // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { + // // If it's not a shard with "CPU", then the committed value digest should not change. + // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -441,9 +440,9 @@ where } } - // // If `deferred_proofs_digest` is not zero, then - // `public_values.deferred_proofs_digest // should be the current - // value. let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `deferred_proofs_digest` is not zero, then `public_values.deferred_proofs_digest + // // should be the current value. + // let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // let d = felt2var(builder, deferred_proofs_digest[i]); @@ -461,8 +460,8 @@ where // } // }); - // // If it's not a shard with "CPU", then the deferred proofs digest should not - // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { + // // If it's not a shard with "CPU", then the deferred proofs digest should not change. + // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // builder.assert_felt_eq( @@ -545,9 +544,9 @@ where // // If the proof represents a complete proof, make completeness assertions. // // - // // *Remark*: In this program, this only happends if there is one shard and the - // program has // no deferred proofs to verify. However, the completeness - // check is independent of these // facts. + // // *Remark*: In this program, this only happends if there is one shard and the program has + // // no deferred proofs to verify. However, the completeness check is independent of these + // // facts. // builder.if_eq(is_complete, C::N::one()).then(|builder| { // assert_complete(builder, recursion_public_values, &reconstruct_challenger) // }); diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index 90d891e775..1a0d31b925 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -1,14 +1,12 @@ use std::borrow::Borrow; -use p3_baby_bear::BabyBear; use p3_challenger::DuplexChallenger; use p3_symmetric::Hash; use p3_field::AbstractField; use sp1_recursion_compiler::ir::{Builder, Config}; use sp1_stark::{ - air::MachineAir, baby_bear_poseidon2::BabyBearPoseidon2, InnerChallenge, InnerPerm, InnerVal, - StarkVerifyingKey, + baby_bear_poseidon2::BabyBearPoseidon2, InnerChallenge, InnerPerm, InnerVal, StarkVerifyingKey, }; use sp1_recursion_compiler::ir::Felt; @@ -17,7 +15,10 @@ use crate::{ challenger::DuplexChallengerVariable, witness::Witnessable, CircuitConfig, VerifyingKeyVariable, }; -use super::{SP1RecursionMemoryLayout, SP1RecursionWitnessVariable}; +use super::{ + SP1CompressWitnessValues, SP1CompressWitnessVariable, SP1RecursionWitnessValues, + SP1RecursionWitnessVariable, +}; impl Witnessable for DuplexChallenger where @@ -79,10 +80,9 @@ where } } -impl<'a, C, A> Witnessable for SP1RecursionMemoryLayout<'a, BabyBearPoseidon2, A> +impl Witnessable for SP1RecursionWitnessValues where C: CircuitConfig>, - A: MachineAir, { type WitnessVariable = SP1RecursionWitnessVariable; @@ -112,3 +112,25 @@ where .concat() } } + +impl Witnessable for SP1CompressWitnessValues +where + C: CircuitConfig>, +{ + type WitnessVariable = SP1CompressWitnessVariable; + + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + let vks_and_proofs = self.vks_and_proofs.read(builder); + let is_complete = InnerVal::from_bool(self.is_complete).read(builder); + + SP1CompressWitnessVariable { vks_and_proofs, is_complete } + } + + fn write(&self) -> Vec> { + [ + Witnessable::::write(&self.vks_and_proofs), + Witnessable::::write(&InnerVal::from_bool(self.is_complete)), + ] + .concat() + } +} diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index 0e00502f00..971c907bed 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -1,11 +1,11 @@ -use std::borrow::BorrowMut; +use std::{array, borrow::BorrowMut}; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, ir::{Builder, Config, Felt}, }; use sp1_recursion_core_v2::air::{ - RecursionPublicValues, NUM_PV_ELMS_TO_HASH, RECURSIVE_PROOF_NUM_PV_ELTS, + ChallengerPublicValues, RecursionPublicValues, NUM_PV_ELMS_TO_HASH, RECURSIVE_PROOF_NUM_PV_ELTS, }; /// Register and commits the recursion public values. @@ -29,6 +29,17 @@ pub fn commit_recursion_public_values( } } +pub fn uninit_challenger_pv( + builder: &mut Builder, +) -> ChallengerPublicValues> { + let sponge_state = array::from_fn(|_| builder.uninit()); + let num_inputs = builder.uninit(); + let input_buffer = array::from_fn(|_| builder.uninit()); + let num_outputs = builder.uninit(); + let output_buffer = array::from_fn(|_| builder.uninit()); + ChallengerPublicValues { sponge_state, num_inputs, input_buffer, num_outputs, output_buffer } +} + #[cfg(any(test, feature = "export-tests"))] pub(crate) mod tests { use std::sync::Arc; diff --git a/crates/recursion/circuit-v2/src/witness.rs b/crates/recursion/circuit-v2/src/witness.rs index bfd1796899..ada041d851 100644 --- a/crates/recursion/circuit-v2/src/witness.rs +++ b/crates/recursion/circuit-v2/src/witness.rs @@ -44,6 +44,18 @@ impl<'a, C: Config, T: Witnessable> Witnessable for &'a T { } } +impl, U: Witnessable> Witnessable for (T, U) { + type WitnessVariable = (T::WitnessVariable, U::WitnessVariable); + + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + (self.0.read(builder), self.1.read(builder)) + } + + fn write(&self) -> Vec> { + self.0.write().into_iter().chain(self.1.write()).collect() + } +} + // TODO Bn254Fr impl> Witnessable for InnerVal { From c7d0f54d8004b9df71bfed798e39070ff2833063 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 19 Aug 2024 18:12:08 -0700 Subject: [PATCH 002/268] core and compress --- .../circuit-v2/src/machine/compress.rs | 83 ++++++++++--------- .../recursion/circuit-v2/src/machine/core.rs | 19 ++--- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 5df6d64c4d..fee4f82cf5 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -99,25 +99,25 @@ where assert!(!vks_and_proofs.is_empty()); // Initialize the consistency check variables. - let sp1_vk_digest: [Felt<_>; DIGEST_SIZE] = array::from_fn(|_| builder.uninit()); - let pc: Felt<_> = builder.uninit(); - let shard: Felt<_> = builder.uninit(); - let execution_shard: Felt<_> = builder.uninit(); + let mut sp1_vk_digest: [Felt<_>; DIGEST_SIZE] = array::from_fn(|_| builder.uninit()); + let mut pc: Felt<_> = builder.uninit(); + let mut shard: Felt<_> = builder.uninit(); + let mut execution_shard: Felt<_> = builder.uninit(); let mut initial_reconstruct_challenger_values: ChallengerPublicValues> = uninit_challenger_pv(builder); let mut reconstruct_challenger_values: ChallengerPublicValues> = uninit_challenger_pv(builder); let mut leaf_challenger_values: ChallengerPublicValues> = uninit_challenger_pv(builder); - let committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = + let mut committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = array::from_fn(|_| Word(array::from_fn(|_| builder.uninit()))); - let deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + let mut deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = array::from_fn(|_| builder.uninit()); - let reconstruct_deferred_digest: [Felt<_>; POSEIDON_NUM_WORDS] = + let mut reconstruct_deferred_digest: [Felt<_>; POSEIDON_NUM_WORDS] = core::array::from_fn(|_| builder.uninit()); - let cumulative_sum: [Felt<_>; D] = core::array::from_fn(|_| builder.eval(C::F::zero())); - let init_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); - let finalize_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); + let mut cumulative_sum: [Felt<_>; D] = core::array::from_fn(|_| builder.eval(C::F::zero())); + let mut init_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); + let mut finalize_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); // Verify proofs, check consistency, and aggregate public values. for (i, (vk, shard_proof)) in vks_and_proofs.into_iter().enumerate() { @@ -147,19 +147,19 @@ where // Initialize the start of deferred digests. for (digest, current_digest, global_digest) in izip!( - reconstruct_deferred_digest.iter(), + reconstruct_deferred_digest.iter_mut(), current_public_values.start_reconstruct_deferred_digest.iter(), - compress_public_values.start_reconstruct_deferred_digest.iter() + compress_public_values.start_reconstruct_deferred_digest.iter_mut() ) { - builder.assign(*digest, *current_digest); - builder.assign(*global_digest, *current_digest); + *digest = *current_digest; + *global_digest = *current_digest; } // Initialize the sp1_vk digest for (digest, first_digest) in - sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) + sp1_vk_digest.iter_mut().zip(current_public_values.sp1_vk_digest) { - builder.assign(*digest, first_digest); + *digest = first_digest; } // Initiallize start pc. @@ -179,25 +179,25 @@ where ); // Initialize the MemoryInitialize address bits. - for (bit, (first_bit, current_bit)) in init_addr_bits.iter().zip( + for (bit, (first_bit, current_bit)) in init_addr_bits.iter_mut().zip( compress_public_values .previous_init_addr_bits - .iter() + .iter_mut() .zip(current_public_values.previous_init_addr_bits.iter()), ) { - builder.assign(*bit, *current_bit); - builder.assign(*first_bit, *current_bit); + *bit = *current_bit; + *first_bit = *current_bit; } // Initialize the MemoryFinalize address bits. - for (bit, (first_bit, current_bit)) in finalize_addr_bits.iter().zip( + for (bit, (first_bit, current_bit)) in finalize_addr_bits.iter_mut().zip( compress_public_values .previous_finalize_addr_bits - .iter() + .iter_mut() .zip(current_public_values.previous_finalize_addr_bits.iter()), ) { - builder.assign(*bit, *current_bit); - builder.assign(*first_bit, *current_bit); + *bit = *current_bit; + *first_bit = *current_bit; } // Initialize the leaf challenger public values. @@ -316,11 +316,11 @@ where // Update the committed value digest. for (word, current_word) in committed_value_digest - .iter() + .iter_mut() .zip_eq(current_public_values.committed_value_digest.iter()) { - for (byte, current_byte) in word.0.iter().zip_eq(current_word.0.iter()) { - builder.assign(*byte, *current_byte); + for (byte, current_byte) in word.0.iter_mut().zip_eq(current_word.0.iter()) { + *byte = *current_byte; } } // Less nice version of above but simialr to original code: @@ -355,10 +355,10 @@ where // Update the deferred proofs digest. for (digest, current_digest) in deferred_proofs_digest - .iter() + .iter_mut() .zip_eq(current_public_values.deferred_proofs_digest.iter()) { - builder.assign(*digest, *current_digest); + *digest = *current_digest; } // Less nice version of above but simialr to original code: @@ -373,34 +373,35 @@ where // Update the deferred proof digest. for (digest, current_digest) in reconstruct_deferred_digest - .iter() + .iter_mut() .zip_eq(current_public_values.end_reconstruct_deferred_digest.iter()) { - builder.assign(*digest, *current_digest); + *digest = *current_digest; } // Update the accumulated values. // Update pc to be the next pc. - builder.assign(pc, current_public_values.next_pc); + pc = current_public_values.next_pc; // Update the shard to be the next shard. - builder.assign(shard, current_public_values.next_shard); + shard = current_public_values.next_shard; // Update the execution shard to be the next execution shard. - builder.assign(execution_shard, current_public_values.next_execution_shard); + execution_shard = current_public_values.next_execution_shard; // Update the MemoryInitialize address bits. for (bit, next_bit) in - init_addr_bits.iter().zip(current_public_values.last_init_addr_bits.iter()) + init_addr_bits.iter_mut().zip(current_public_values.last_init_addr_bits.iter()) { - builder.assign(*bit, *next_bit); + *bit = *next_bit; } // Update the MemoryFinalize address bits. - for (bit, next_bit) in - finalize_addr_bits.iter().zip(current_public_values.last_finalize_addr_bits.iter()) + for (bit, next_bit) in finalize_addr_bits + .iter_mut() + .zip(current_public_values.last_finalize_addr_bits.iter()) { - builder.assign(*bit, *next_bit); + *bit = *next_bit; } // Update the reconstruct challenger. @@ -408,9 +409,9 @@ where // Update the cumulative sum. for (sum_element, current_sum_element) in - cumulative_sum.iter().zip_eq(current_public_values.cumulative_sum.iter()) + cumulative_sum.iter_mut().zip_eq(current_public_values.cumulative_sum.iter()) { - builder.assign(*sum_element, *sum_element + *current_sum_element); + *sum_element = builder.eval(*sum_element + *current_sum_element); } } diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index ff74eb95b5..6a90d21227 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -143,12 +143,12 @@ where array::from_fn(|_| builder.uninit()); // Initialize the challenger variables. - let mut leaf_challenger_public_values = leaf_challenger.public_values(builder); + let leaf_challenger_public_values = leaf_challenger.public_values(builder); let mut reconstruct_challenger: DuplexChallengerVariable<_> = initial_reconstruct_challenger.copy(builder); // Initialize the cumulative sum. - let cumulative_sum: Ext<_, _> = builder.eval(C::EF::zero().cons()); + let mut cumulative_sum: Ext<_, _> = builder.eval(C::EF::zero().cons()); // Assert that the number of proofs is not zero. assert!(!shard_proofs.is_empty()); @@ -271,7 +271,7 @@ where builder.assert_felt_eq(current_shard, public_values.shard); // Increment the current shard by one. - builder.assign(current_shard, current_shard + C::F::one()); + current_shard = builder.eval(current_shard + C::F::one()); } // Execution shard constraints. @@ -433,10 +433,7 @@ where #[allow(clippy::needless_range_loop)] for i in 0..committed_value_digest.len() { for j in 0..WORD_SIZE { - builder.assign( - committed_value_digest[i][j], - public_values.committed_value_digest[i][j], - ); + committed_value_digest[i][j] = public_values.committed_value_digest[i][j]; } } @@ -472,11 +469,7 @@ where // }); // Update the deferred proofs digest. - #[allow(clippy::needless_range_loop)] - for i in 0..deferred_proofs_digest.len() { - builder - .assign(deferred_proofs_digest[i], public_values.deferred_proofs_digest[i]); - } + deferred_proofs_digest.copy_from_slice(&public_values.deferred_proofs_digest); } // // Verify that the number of shards is not too large. @@ -490,7 +483,7 @@ where // Cumulative sum is updated by sums of all chips. for values in shard_proof.opened_values.chips.iter() { - builder.assign(cumulative_sum, cumulative_sum + values.cumulative_sum); + cumulative_sum = builder.eval(cumulative_sum + values.cumulative_sum); } } From 78cdf4460a8f2d416c94649fc27181a25c55764a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 19 Aug 2024 18:45:54 -0700 Subject: [PATCH 003/268] checkpoint --- Cargo.lock | 1 - Cargo.toml | 1 + crates/recursion/circuit-v2/Cargo.toml | 1 - crates/recursion/circuit-v2/src/stark.rs | 2 +- 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7739908646..40a123c3fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5214,7 +5214,6 @@ dependencies = [ "sp1-core-executor", "sp1-core-machine", "sp1-primitives", - "sp1-prover", "sp1-recursion-circuit", "sp1-recursion-compiler", "sp1-recursion-core-v2", diff --git a/Cargo.toml b/Cargo.toml index 7f74c5b6a8..923a46294f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,6 +59,7 @@ sp1-prover = { path = "crates/prover", version = "1.1.1" } sp1-recursion-compiler = { path = "crates/recursion/compiler", version = "1.1.1" } sp1-recursion-core = { path = "crates/recursion/core", version = "1.1.1", default-features = false } sp1-recursion-core-v2 = { path = "crates/recursion/core-v2", version = "1.1.1", default-features = false } +sp1-recursion-circuit-v2 = { path = "crates/recursion/circuit-v2", version = "1.1.1", default-features = false } sp1-recursion-derive = { path = "crates/recursion/derive", version = "1.1.1", default-features = false } sp1-recursion-gnark-ffi = { path = "crates/recursion/gnark-ffi", version = "1.1.1", default-features = false } sp1-recursion-program = { path = "crates/recursion/program", version = "1.1.1", default-features = false } diff --git a/crates/recursion/circuit-v2/Cargo.toml b/crates/recursion/circuit-v2/Cargo.toml index 49082342b2..8bb5495e39 100644 --- a/crates/recursion/circuit-v2/Cargo.toml +++ b/crates/recursion/circuit-v2/Cargo.toml @@ -37,7 +37,6 @@ sp1-recursion-compiler = { workspace = true } sp1-primitives = { workspace = true } sp1-recursion-gnark-ffi = { workspace = true } sp1-recursion-circuit = { workspace = true } -sp1-prover = { workspace = true } itertools = "0.13.0" serde = { version = "1.0.204", features = ["derive"] } diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index cef753f8b7..68e92cdb5b 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -254,10 +254,10 @@ pub mod tests { use sp1_core_executor::{programs::tests::FIBONACCI_ELF, Program}; use sp1_core_machine::{ + io::SP1Stdin, riscv::RiscvAir, utils::{prove, setup_logger}, }; - use sp1_prover::SP1Stdin; use sp1_recursion_compiler::{config::InnerConfig, ir::Builder}; use sp1_recursion_core_v2::machine::RecursionAir; From 62f69ec796468d924b17673c32c915d0a73d6bbb Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 09:24:31 -0700 Subject: [PATCH 004/268] checkpoint --- Cargo.lock | 5 +- crates/prover/Cargo.toml | 8 +- crates/prover/scripts/build_groth16_bn254.rs | 32 +- crates/prover/scripts/build_plonk_bn254.rs | 32 +- crates/prover/scripts/e2e.rs | 234 ++--- crates/prover/src/build.rs | 296 +++--- crates/prover/src/init.rs | 167 ---- crates/prover/src/lib.rs | 849 ++++++++---------- crates/prover/src/types.rs | 32 +- crates/prover/src/verify.rs | 209 +++-- .../circuit-v2/src/machine/compress.rs | 64 +- .../recursion/circuit-v2/src/machine/core.rs | 27 +- .../circuit-v2/src/machine/deferred.rs | 7 + .../recursion/circuit-v2/src/machine/mod.rs | 2 + crates/recursion/circuit-v2/src/stark.rs | 22 +- crates/recursion/circuit-v2/src/utils.rs | 40 +- crates/recursion/core-v2/src/runtime/mod.rs | 2 +- 17 files changed, 905 insertions(+), 1123 deletions(-) create mode 100644 crates/recursion/circuit-v2/src/machine/deferred.rs diff --git a/Cargo.lock b/Cargo.lock index 5df69399bc..1c313e575d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5230,11 +5230,10 @@ dependencies = [ "sp1-core-executor", "sp1-core-machine", "sp1-primitives", - "sp1-recursion-circuit", + "sp1-recursion-circuit-v2", "sp1-recursion-compiler", - "sp1-recursion-core", + "sp1-recursion-core-v2", "sp1-recursion-gnark-ffi", - "sp1-recursion-program", "sp1-stark", "subtle-encoding", "tempfile", diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index 5ec658f832..a38eb211d8 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -11,10 +11,12 @@ categories = { workspace = true } [dependencies] p3-matrix = { workspace = true } -sp1-recursion-program = { workspace = true } -sp1-recursion-circuit = { workspace = true } +# sp1-recursion-program = { workspace = true } +# sp1-recursion-circuit = { workspace = true } sp1-recursion-compiler = { workspace = true } -sp1-recursion-core = { workspace = true } +# sp1-recursion-core = { workspace = true } +sp1-recursion-core-v2 = { workspace = true } +sp1-recursion-circuit-v2 = { workspace = true } sp1-recursion-gnark-ffi = { workspace = true } sp1-core-machine = { workspace = true } sp1-stark = { workspace = true } diff --git a/crates/prover/scripts/build_groth16_bn254.rs b/crates/prover/scripts/build_groth16_bn254.rs index e7b5e1e61f..aaa7e1eb15 100644 --- a/crates/prover/scripts/build_groth16_bn254.rs +++ b/crates/prover/scripts/build_groth16_bn254.rs @@ -1,18 +1,20 @@ -use std::path::PathBuf; +// use std::path::PathBuf; -use clap::Parser; -use sp1_core_machine::utils::setup_logger; -use sp1_prover::build::build_groth16_bn254_artifacts_with_dummy; +// use clap::Parser; +// use sp1_core_machine::utils::setup_logger; +// use sp1_prover::build::build_groth16_bn254_artifacts_with_dummy; -#[derive(Parser, Debug)] -#[clap(author, version, about, long_about = None)] -struct Args { - #[clap(short, long)] - build_dir: PathBuf, -} +// #[derive(Parser, Debug)] +// #[clap(author, version, about, long_about = None)] +// struct Args { +// #[clap(short, long)] +// build_dir: PathBuf, +// } -pub fn main() { - setup_logger(); - let args = Args::parse(); - build_groth16_bn254_artifacts_with_dummy(args.build_dir); -} +// pub fn main() { +// setup_logger(); +// let args = Args::parse(); +// build_groth16_bn254_artifacts_with_dummy(args.build_dir); +// } + +pub fn main() {} diff --git a/crates/prover/scripts/build_plonk_bn254.rs b/crates/prover/scripts/build_plonk_bn254.rs index 17d1f9ba19..4d2143cd26 100644 --- a/crates/prover/scripts/build_plonk_bn254.rs +++ b/crates/prover/scripts/build_plonk_bn254.rs @@ -1,18 +1,20 @@ -use std::path::PathBuf; +// use std::path::PathBuf; -use clap::Parser; -use sp1_core_machine::utils::setup_logger; -use sp1_prover::build::build_plonk_bn254_artifacts_with_dummy; +// use clap::Parser; +// use sp1_core_machine::utils::setup_logger; +// use sp1_prover::build::build_plonk_bn254_artifacts_with_dummy; -#[derive(Parser, Debug)] -#[clap(author, version, about, long_about = None)] -struct Args { - #[clap(short, long)] - build_dir: PathBuf, -} +// #[derive(Parser, Debug)] +// #[clap(author, version, about, long_about = None)] +// struct Args { +// #[clap(short, long)] +// build_dir: PathBuf, +// } -pub fn main() { - setup_logger(); - let args = Args::parse(); - build_plonk_bn254_artifacts_with_dummy(args.build_dir); -} +// pub fn main() { +// setup_logger(); +// let args = Args::parse(); +// build_plonk_bn254_artifacts_with_dummy(args.build_dir); +// } + +pub fn main() {} diff --git a/crates/prover/scripts/e2e.rs b/crates/prover/scripts/e2e.rs index 3476ce89e7..bf969077f0 100644 --- a/crates/prover/scripts/e2e.rs +++ b/crates/prover/scripts/e2e.rs @@ -1,117 +1,119 @@ -use std::{borrow::Borrow, path::PathBuf}; - -use clap::Parser; -use p3_baby_bear::BabyBear; -use p3_field::PrimeField; -use sp1_core_executor::SP1Context; -use sp1_core_machine::io::SP1Stdin; -use sp1_prover::{ - utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, - SP1Prover, -}; -use sp1_recursion_circuit::{stark::build_wrap_circuit, witness::Witnessable}; -use sp1_recursion_compiler::ir::Witness; -use sp1_recursion_core::air::RecursionPublicValues; -use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; -use sp1_stark::SP1ProverOpts; -use subtle_encoding::hex; - -#[derive(Parser, Debug)] -#[clap(author, version, about, long_about = None)] -struct Args { - #[clap(short, long)] - build_dir: String, - #[arg(short, long)] - system: String, -} - -pub fn main() { - sp1_core_machine::utils::setup_logger(); - std::env::set_var("RECONSTRUCT_COMMITMENTS", "false"); - - let args = Args::parse(); - let build_dir: PathBuf = args.build_dir.into(); - - let elf = include_bytes!("../elf/riscv32im-succinct-zkvm-elf"); - - tracing::info!("initializing prover"); - let prover: SP1Prover = SP1Prover::new(); - let opts = SP1ProverOpts::default(); - let context = SP1Context::default(); - - tracing::info!("setup elf"); - let (pk, vk) = prover.setup(elf); - - tracing::info!("prove core"); - let stdin = SP1Stdin::new(); - let core_proof = prover.prove_core(&pk, &stdin, opts, context).unwrap(); - - tracing::info!("Compress"); - let reduced_proof = prover.compress(&vk, core_proof, vec![], opts).unwrap(); - - tracing::info!("Shrink"); - let compressed_proof = prover.shrink(reduced_proof, opts).unwrap(); - - tracing::info!("wrap"); - let wrapped_proof = prover.wrap_bn254(compressed_proof, opts).unwrap(); - - tracing::info!("building verifier constraints"); - let constraints = tracing::info_span!("wrap circuit") - .in_scope(|| build_wrap_circuit(prover.wrap_vk(), wrapped_proof.proof.clone())); - - tracing::info!("building template witness"); - let pv: &RecursionPublicValues<_> = wrapped_proof.proof.public_values.as_slice().borrow(); - let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); - let committed_values_digest_bytes: [BabyBear; 32] = - words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); - let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); - - let mut witness = Witness::default(); - wrapped_proof.proof.write(&mut witness); - witness.write_commited_values_digest(committed_values_digest); - witness.write_vkey_hash(vkey_hash); - - tracing::info!("sanity check plonk test"); - PlonkBn254Prover::test(constraints.clone(), witness.clone()); - - tracing::info!("sanity check plonk build"); - PlonkBn254Prover::build(constraints.clone(), witness.clone(), build_dir.clone()); - - tracing::info!("sanity check plonk prove"); - let plonk_bn254_prover = PlonkBn254Prover::new(); - - tracing::info!("plonk prove"); - let proof = plonk_bn254_prover.prove(witness.clone(), build_dir.clone()); - - tracing::info!("verify plonk proof"); - plonk_bn254_prover.verify( - &proof, - &vkey_hash.as_canonical_biguint(), - &committed_values_digest.as_canonical_biguint(), - &build_dir, - ); - - println!("plonk proof: {:?}", String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); - - tracing::info!("sanity check groth16 test"); - Groth16Bn254Prover::test(constraints.clone(), witness.clone()); - - tracing::info!("sanity check groth16 build"); - Groth16Bn254Prover::build(constraints.clone(), witness.clone(), build_dir.clone()); - - tracing::info!("sanity check groth16 prove"); - let groth16_bn254_prover = Groth16Bn254Prover::new(); - - tracing::info!("groth16 prove"); - let proof = groth16_bn254_prover.prove(witness.clone(), build_dir.clone()); - - tracing::info!("verify groth16 proof"); - groth16_bn254_prover.verify( - &proof, - &vkey_hash.as_canonical_biguint(), - &committed_values_digest.as_canonical_biguint(), - &build_dir, - ); +// use std::{borrow::Borrow, path::PathBuf}; + +// use clap::Parser; +// use p3_baby_bear::BabyBear; +// use p3_field::PrimeField; +// use sp1_core_executor::SP1Context; +// use sp1_core_machine::io::SP1Stdin; +// use sp1_prover::{ +// utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, +// SP1Prover, +// }; +// use sp1_recursion_circuit::{stark::build_wrap_circuit, witness::Witnessable}; +// use sp1_recursion_compiler::ir::Witness; +// use sp1_recursion_core::air::RecursionPublicValues; +// use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; +// use sp1_stark::SP1ProverOpts; +// use subtle_encoding::hex; + +// #[derive(Parser, Debug)] +// #[clap(author, version, about, long_about = None)] +// struct Args { +// #[clap(short, long)] +// build_dir: String, +// #[arg(short, long)] +// system: String, +// } + +// pub fn main() { +// sp1_core_machine::utils::setup_logger(); +// std::env::set_var("RECONSTRUCT_COMMITMENTS", "false"); + +// let args = Args::parse(); +// let build_dir: PathBuf = args.build_dir.into(); + +// let elf = include_bytes!("../elf/riscv32im-succinct-zkvm-elf"); + +// tracing::info!("initializing prover"); +// let prover: SP1Prover = SP1Prover::new(); +// let opts = SP1ProverOpts::default(); +// let context = SP1Context::default(); + +// tracing::info!("setup elf"); +// let (pk, vk) = prover.setup(elf); + +// tracing::info!("prove core"); +// let stdin = SP1Stdin::new(); +// let core_proof = prover.prove_core(&pk, &stdin, opts, context).unwrap(); + +// tracing::info!("Compress"); +// let reduced_proof = prover.compress(&vk, core_proof, vec![], opts).unwrap(); + +// tracing::info!("Shrink"); +// let compressed_proof = prover.shrink(reduced_proof, opts).unwrap(); + +// tracing::info!("wrap"); +// let wrapped_proof = prover.wrap_bn254(compressed_proof, opts).unwrap(); + +// tracing::info!("building verifier constraints"); +// let constraints = tracing::info_span!("wrap circuit") +// .in_scope(|| build_wrap_circuit(prover.wrap_vk(), wrapped_proof.proof.clone())); + +// tracing::info!("building template witness"); +// let pv: &RecursionPublicValues<_> = wrapped_proof.proof.public_values.as_slice().borrow(); +// let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); +// let committed_values_digest_bytes: [BabyBear; 32] = +// words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); +// let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); + +// let mut witness = Witness::default(); +// wrapped_proof.proof.write(&mut witness); +// witness.write_commited_values_digest(committed_values_digest); +// witness.write_vkey_hash(vkey_hash); + +// tracing::info!("sanity check plonk test"); +// PlonkBn254Prover::test(constraints.clone(), witness.clone()); + +// tracing::info!("sanity check plonk build"); +// PlonkBn254Prover::build(constraints.clone(), witness.clone(), build_dir.clone()); + +// tracing::info!("sanity check plonk prove"); +// let plonk_bn254_prover = PlonkBn254Prover::new(); + +// tracing::info!("plonk prove"); +// let proof = plonk_bn254_prover.prove(witness.clone(), build_dir.clone()); + +// tracing::info!("verify plonk proof"); +// plonk_bn254_prover.verify( +// &proof, +// &vkey_hash.as_canonical_biguint(), +// &committed_values_digest.as_canonical_biguint(), +// &build_dir, +// ); + +// println!("plonk proof: {:?}", String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); + +// tracing::info!("sanity check groth16 test"); +// Groth16Bn254Prover::test(constraints.clone(), witness.clone()); + +// tracing::info!("sanity check groth16 build"); +// Groth16Bn254Prover::build(constraints.clone(), witness.clone(), build_dir.clone()); + +// tracing::info!("sanity check groth16 prove"); +// let groth16_bn254_prover = Groth16Bn254Prover::new(); + +// tracing::info!("groth16 prove"); +// let proof = groth16_bn254_prover.prove(witness.clone(), build_dir.clone()); + +// tracing::info!("verify groth16 proof"); +// groth16_bn254_prover.verify( +// &proof, +// &vkey_hash.as_canonical_biguint(), +// &committed_values_digest.as_canonical_biguint(), +// &build_dir, +// ); - println!("groth16 proof: {:?}", String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); -} +// println!("groth16 proof: {:?}", String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); +// } + +pub fn main() {} diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 39512346b7..b3581da4b9 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -1,147 +1,149 @@ -use std::{borrow::Borrow, path::PathBuf}; - -use p3_baby_bear::BabyBear; -use sp1_core_executor::SP1Context; -use sp1_core_machine::io::SP1Stdin; -pub use sp1_recursion_circuit::{stark::build_wrap_circuit, witness::Witnessable}; -pub use sp1_recursion_compiler::ir::Witness; -use sp1_recursion_compiler::{config::OuterConfig, constraints::Constraint}; -use sp1_recursion_core::air::RecursionPublicValues; -pub use sp1_recursion_core::stark::utils::sp1_dev_mode; -use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; -use sp1_stark::{SP1ProverOpts, ShardProof, StarkVerifyingKey}; - -use crate::{ - utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, - OuterSC, SP1Prover, -}; - -/// Tries to build the PLONK artifacts inside the development directory. -pub fn try_build_plonk_bn254_artifacts_dev( - template_vk: &StarkVerifyingKey, - template_proof: &ShardProof, -) -> PathBuf { - let build_dir = plonk_bn254_artifacts_dev_dir(); - println!("[sp1] building plonk bn254 artifacts in development mode"); - build_plonk_bn254_artifacts(template_vk, template_proof, &build_dir); - build_dir -} - -/// Tries to build the groth16 bn254 artifacts in the current environment. -pub fn try_build_groth16_bn254_artifacts_dev( - template_vk: &StarkVerifyingKey, - template_proof: &ShardProof, -) -> PathBuf { - let build_dir = groth16_bn254_artifacts_dev_dir(); - println!("[sp1] building groth16 bn254 artifacts in development mode"); - build_groth16_bn254_artifacts(template_vk, template_proof, &build_dir); - build_dir -} - -/// Gets the directory where the PLONK artifacts are installed in development mode. -pub fn plonk_bn254_artifacts_dev_dir() -> PathBuf { - dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") -} - -/// Gets the directory where the groth16 artifacts are installed in development mode. -pub fn groth16_bn254_artifacts_dev_dir() -> PathBuf { - dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") -} - -/// Build the plonk bn254 artifacts to the given directory for the given verification key and -/// template proof. -pub fn build_plonk_bn254_artifacts( - template_vk: &StarkVerifyingKey, - template_proof: &ShardProof, - build_dir: impl Into, -) { - let build_dir = build_dir.into(); - std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); - let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); - PlonkBn254Prover::build(constraints, witness, build_dir); -} - -/// Build the groth16 bn254 artifacts to the given directory for the given verification key and -/// template proof. -pub fn build_groth16_bn254_artifacts( - template_vk: &StarkVerifyingKey, - template_proof: &ShardProof, - build_dir: impl Into, -) { - let build_dir = build_dir.into(); - std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); - let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); - Groth16Bn254Prover::build(constraints, witness, build_dir); -} - -/// Builds the plonk bn254 artifacts to the given directory. -/// -/// This may take a while as it needs to first generate a dummy proof and then it needs to compile -/// the circuit. -pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { - let (wrap_vk, wrapped_proof) = dummy_proof(); - crate::build::build_plonk_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); -} - -/// Builds the groth16 bn254 artifacts to the given directory. -/// -/// This may take a while as it needs to first generate a dummy proof and then it needs to compile -/// the circuit. -pub fn build_groth16_bn254_artifacts_with_dummy(build_dir: impl Into) { - let (wrap_vk, wrapped_proof) = dummy_proof(); - crate::build::build_groth16_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); -} - -/// Build the verifier constraints and template witness for the circuit. -pub fn build_constraints_and_witness( - template_vk: &StarkVerifyingKey, - template_proof: &ShardProof, -) -> (Vec, Witness) { - tracing::info!("building verifier constraints"); - let constraints = tracing::info_span!("wrap circuit") - .in_scope(|| build_wrap_circuit(template_vk, template_proof.clone())); - - let pv: &RecursionPublicValues = template_proof.public_values.as_slice().borrow(); - let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); - let committed_values_digest_bytes: [BabyBear; 32] = - words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); - let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); - - tracing::info!("building template witness"); - let mut witness = Witness::default(); - template_proof.write(&mut witness); - witness.write_commited_values_digest(committed_values_digest); - witness.write_vkey_hash(vkey_hash); - - (constraints, witness) -} - -/// Generate a dummy proof that we can use to build the circuit. We need this to know the shape of -/// the proof. -pub fn dummy_proof() -> (StarkVerifyingKey, ShardProof) { - let elf = include_bytes!("../elf/riscv32im-succinct-zkvm-elf"); - - tracing::info!("initializing prover"); - let prover: SP1Prover = SP1Prover::new(); - let opts = SP1ProverOpts::default(); - let context = SP1Context::default(); - - tracing::info!("setup elf"); - let (pk, vk) = prover.setup(elf); - - tracing::info!("prove core"); - let mut stdin = SP1Stdin::new(); - stdin.write(&500u32); - let core_proof = prover.prove_core(&pk, &stdin, opts, context).unwrap(); - - tracing::info!("compress"); - let compressed_proof = prover.compress(&vk, core_proof, vec![], opts).unwrap(); - - tracing::info!("shrink"); - let shrink_proof = prover.shrink(compressed_proof, opts).unwrap(); - - tracing::info!("wrap"); - let wrapped_proof = prover.wrap_bn254(shrink_proof, opts).unwrap(); - - (prover.wrap_keys.into_inner().unwrap().1, wrapped_proof.proof) -} +// use std::{borrow::Borrow, path::PathBuf}; + +// use p3_baby_bear::BabyBear; +// use sp1_core_executor::SP1Context; +// use sp1_core_machine::io::SP1Stdin; +// pub use sp1_recursion_circuit::{stark::build_wrap_circuit, witness::Witnessable}; +// pub use sp1_recursion_compiler::ir::Witness; +// use sp1_recursion_compiler::{config::OuterConfig, constraints::Constraint}; +// use sp1_recursion_core::air::RecursionPublicValues; +// pub use sp1_recursion_core::stark::utils::sp1_dev_mode; +// use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; +// use sp1_stark::{SP1ProverOpts, ShardProof, StarkVerifyingKey}; + +// use crate::{ +// utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, +// OuterSC, SP1Prover, +// }; + +// /// Tries to build the PLONK artifacts inside the development directory. +// pub fn try_build_plonk_bn254_artifacts_dev( +// template_vk: &StarkVerifyingKey, +// template_proof: &ShardProof, +// ) -> PathBuf { +// let build_dir = plonk_bn254_artifacts_dev_dir(); +// println!("[sp1] building plonk bn254 artifacts in development mode"); +// build_plonk_bn254_artifacts(template_vk, template_proof, &build_dir); +// build_dir +// } + +// /// Tries to build the groth16 bn254 artifacts in the current environment. +// pub fn try_build_groth16_bn254_artifacts_dev( +// template_vk: &StarkVerifyingKey, +// template_proof: &ShardProof, +// ) -> PathBuf { +// let build_dir = groth16_bn254_artifacts_dev_dir(); +// println!("[sp1] building groth16 bn254 artifacts in development mode"); +// build_groth16_bn254_artifacts(template_vk, template_proof, &build_dir); +// build_dir +// } + +// /// Gets the directory where the PLONK artifacts are installed in development mode. +// pub fn plonk_bn254_artifacts_dev_dir() -> PathBuf { +// dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") +// } + +// /// Gets the directory where the groth16 artifacts are installed in development mode. +// pub fn groth16_bn254_artifacts_dev_dir() -> PathBuf { +// dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") +// } + +// /// Build the plonk bn254 artifacts to the given directory for the given verification key and +// /// template proof. +// pub fn build_plonk_bn254_artifacts( +// template_vk: &StarkVerifyingKey, +// template_proof: &ShardProof, +// build_dir: impl Into, +// ) { +// let build_dir = build_dir.into(); +// std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); +// let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); +// PlonkBn254Prover::build(constraints, witness, build_dir); +// } + +// /// Build the groth16 bn254 artifacts to the given directory for the given verification key and +// /// template proof. +// pub fn build_groth16_bn254_artifacts( +// template_vk: &StarkVerifyingKey, +// template_proof: &ShardProof, +// build_dir: impl Into, +// ) { +// let build_dir = build_dir.into(); +// std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); +// let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); +// Groth16Bn254Prover::build(constraints, witness, build_dir); +// } + +// /// Builds the plonk bn254 artifacts to the given directory. +// /// +// /// This may take a while as it needs to first generate a dummy proof and then it needs to compile +// /// the circuit. +// pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { +// let (wrap_vk, wrapped_proof) = dummy_proof(); +// crate::build::build_plonk_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); +// } + +// /// Builds the groth16 bn254 artifacts to the given directory. +// /// +// /// This may take a while as it needs to first generate a dummy proof and then it needs to compile +// /// the circuit. +// pub fn build_groth16_bn254_artifacts_with_dummy(build_dir: impl Into) { +// let (wrap_vk, wrapped_proof) = dummy_proof(); +// crate::build::build_groth16_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); +// } + +// /// Build the verifier constraints and template witness for the circuit. +// pub fn build_constraints_and_witness( +// template_vk: &StarkVerifyingKey, +// template_proof: &ShardProof, +// ) -> (Vec, Witness) { +// tracing::info!("building verifier constraints"); +// let constraints = tracing::info_span!("wrap circuit") +// .in_scope(|| build_wrap_circuit(template_vk, template_proof.clone())); + +// let pv: &RecursionPublicValues = template_proof.public_values.as_slice().borrow(); +// let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); +// let committed_values_digest_bytes: [BabyBear; 32] = +// words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); +// let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); + +// tracing::info!("building template witness"); +// let mut witness = Witness::default(); +// template_proof.write(&mut witness); +// witness.write_commited_values_digest(committed_values_digest); +// witness.write_vkey_hash(vkey_hash); + +// (constraints, witness) +// } + +// /// Generate a dummy proof that we can use to build the circuit. We need this to know the shape of +// /// the proof. +// pub fn dummy_proof() -> (StarkVerifyingKey, ShardProof) { +// let elf = include_bytes!("../elf/riscv32im-succinct-zkvm-elf"); + +// tracing::info!("initializing prover"); +// let prover: SP1Prover = SP1Prover::new(); +// let opts = SP1ProverOpts::default(); +// let context = SP1Context::default(); + +// tracing::info!("setup elf"); +// let (pk, vk) = prover.setup(elf); + +// tracing::info!("prove core"); +// let mut stdin = SP1Stdin::new(); +// stdin.write(&500u32); +// let core_proof = prover.prove_core(&pk, &stdin, opts, context).unwrap(); + +// tracing::info!("compress"); +// let compressed_proof = prover.compress(&vk, core_proof, vec![], opts).unwrap(); + +// tracing::info!("shrink"); +// let shrink_proof = prover.shrink(compressed_proof, opts).unwrap(); + +// tracing::info!("wrap"); +// let wrapped_proof = prover.wrap_bn254(shrink_proof, opts).unwrap(); + +// (prover.wrap_keys.into_inner().unwrap().1, wrapped_proof.proof) +// } + +fn main() {} diff --git a/crates/prover/src/init.rs b/crates/prover/src/init.rs index 52ca606a22..8b13789179 100644 --- a/crates/prover/src/init.rs +++ b/crates/prover/src/init.rs @@ -1,168 +1 @@ -use crate::components::SP1ProverComponents; -use p3_baby_bear::BabyBear; -pub use sp1_core_machine::io::{SP1PublicValues, SP1Stdin}; -use sp1_primitives::types::RecursionProgramType; -use sp1_recursion_compiler::config::InnerConfig; -use sp1_recursion_core::runtime::RecursionProgram; -pub use sp1_recursion_gnark_ffi::{ - groth16_bn254::Groth16Bn254Prover, plonk_bn254::PlonkBn254Prover, -}; -pub use sp1_recursion_program::machine::{ - ReduceProgramType, SP1CompressMemoryLayout, SP1DeferredMemoryLayout, SP1RecursionMemoryLayout, - SP1RootMemoryLayout, -}; -use sp1_recursion_program::machine::{ - SP1CompressVerifier, SP1DeferredVerifier, SP1RecursiveVerifier, SP1RootVerifier, -}; -use sp1_stark::{MachineProver, StarkProvingKey, StarkVerifyingKey}; -use tracing::debug_span; -use crate::{InnerSC, OuterSC, SP1Prover}; - -impl SP1Prover { - /// The program that can recursively verify a set of proofs into a single proof. - pub fn recursion_program(&self) -> &RecursionProgram { - self.recursion_program.get_or_init(|| { - debug_span!("init recursion program").in_scope(|| { - SP1RecursiveVerifier::::build(self.core_prover.machine()) - }) - }) - } - - /// The program that recursively verifies deferred proofs and accumulates the digests. - pub fn deferred_program(&self) -> &RecursionProgram { - self.deferred_program.get_or_init(|| { - debug_span!("init deferred program").in_scope(|| { - SP1DeferredVerifier::::build(self.compress_prover.machine()) - }) - }) - } - - /// The program that reduces a set of recursive proofs into a single proof. - pub fn compress_program(&self) -> &RecursionProgram { - self.compress_program.get_or_init(|| { - debug_span!("init compress program").in_scope(|| { - SP1CompressVerifier::::build( - self.compress_prover.machine(), - self.recursion_vk(), - self.deferred_vk(), - ) - }) - }) - } - - /// The shrink program that compresses a proof into a succinct proof. - pub fn shrink_program(&self) -> &RecursionProgram { - self.shrink_program.get_or_init(|| { - debug_span!("init shrink program").in_scope(|| { - SP1RootVerifier::::build( - self.compress_prover.machine(), - self.compress_vk(), - RecursionProgramType::Shrink, - ) - }) - }) - } - - /// The wrap program that wraps a proof into a SNARK-friendly field. - pub fn wrap_program(&self) -> &RecursionProgram { - self.wrap_program.get_or_init(|| { - debug_span!("init wrap program").in_scope(|| { - SP1RootVerifier::::build( - self.shrink_prover.machine(), - self.shrink_vk(), - RecursionProgramType::Wrap, - ) - }) - }) - } - - /// The proving and verifying keys for the recursion step. - pub fn recursion_keys(&self) -> &(StarkProvingKey, StarkVerifyingKey) { - self.recursion_keys.get_or_init(|| { - debug_span!("init recursion keys") - .in_scope(|| self.compress_prover.setup(self.recursion_program())) - }) - } - - /// The proving key for the recursion step. - pub fn recursion_pk(&self) -> &StarkProvingKey { - &self.recursion_keys().0 - } - - /// The verifying key for the recursion step. - pub fn recursion_vk(&self) -> &StarkVerifyingKey { - &self.recursion_keys().1 - } - - /// The proving and verifying keys for the deferred step. - pub fn deferred_keys(&self) -> &(StarkProvingKey, StarkVerifyingKey) { - self.deferred_keys.get_or_init(|| { - debug_span!("init deferred keys") - .in_scope(|| self.compress_prover.setup(self.deferred_program())) - }) - } - - /// The proving key for the deferred step. - pub fn deferred_pk(&self) -> &StarkProvingKey { - &self.deferred_keys().0 - } - - /// The verifying key for the deferred step. - pub fn deferred_vk(&self) -> &StarkVerifyingKey { - &self.deferred_keys().1 - } - - /// The proving and verifying keys for the compress step. - pub fn compress_keys(&self) -> &(StarkProvingKey, StarkVerifyingKey) { - self.compress_keys.get_or_init(|| { - debug_span!("init compress keys") - .in_scope(|| self.compress_prover.setup(self.compress_program())) - }) - } - - /// The proving key for the compress step. - pub fn compress_pk(&self) -> &StarkProvingKey { - &self.compress_keys().0 - } - - /// The verifying key for the compress step. - pub fn compress_vk(&self) -> &StarkVerifyingKey { - &self.compress_keys().1 - } - - /// The proving and verifying keys for the shrink step. - pub fn shrink_keys(&self) -> &(StarkProvingKey, StarkVerifyingKey) { - self.shrink_keys.get_or_init(|| { - debug_span!("init shrink keys") - .in_scope(|| self.shrink_prover.setup(self.shrink_program())) - }) - } - - /// The proving key for the shrink step. - pub fn shrink_pk(&self) -> &StarkProvingKey { - &self.shrink_keys().0 - } - - /// The verifying key for the shrink step. - pub fn shrink_vk(&self) -> &StarkVerifyingKey { - &self.shrink_keys().1 - } - - /// The proving and verifying keys for the wrap step. - pub fn wrap_keys(&self) -> &(StarkProvingKey, StarkVerifyingKey) { - self.wrap_keys.get_or_init(|| { - debug_span!("init wrap keys").in_scope(|| self.wrap_prover.setup(self.wrap_program())) - }) - } - - /// The proving key for the wrap step. - pub fn wrap_pk(&self) -> &StarkProvingKey { - &self.wrap_keys().0 - } - - /// The verifying key for the wrap step. - pub fn wrap_vk(&self) -> &StarkVerifyingKey { - &self.wrap_keys().1 - } -} diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index dd0d047da6..dca1f97fa3 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -25,43 +25,54 @@ use std::{ thread, }; -use crate::init::SP1PublicValues; -use components::{DefaultProverComponents, SP1ProverComponents}; +use tracing::instrument; + use p3_baby_bear::BabyBear; use p3_challenger::CanObserve; use p3_field::{AbstractField, PrimeField}; use p3_matrix::dense::RowMajorMatrix; use sp1_core_executor::{ExecutionError, ExecutionReport, Executor, Program, SP1Context}; -pub use sp1_core_machine::io::SP1Stdin; + use sp1_core_machine::{ + io::{SP1PublicValues, SP1Stdin}, riscv::RiscvAir, utils::{concurrency::TurnBasedSync, SP1CoreProverError}, }; use sp1_primitives::hash_deferred_proof; -use sp1_recursion_circuit::witness::Witnessable; -use sp1_recursion_compiler::{config::InnerConfig, ir::Witness}; -use sp1_recursion_core::{ - air::RecursionPublicValues, - runtime::{ExecutionRecord, RecursionProgram, Runtime as RecursionRuntime}, - stark::{config::BabyBearPoseidon2Outer, RecursionAir}, + +use sp1_recursion_compiler::{ + circuit::AsmCompiler, + config::InnerConfig, + ir::{Builder, Witness}, }; + pub use sp1_recursion_gnark_ffi::proof::{Groth16Bn254Proof, PlonkBn254Proof}; use sp1_recursion_gnark_ffi::{groth16_bn254::Groth16Bn254Prover, plonk_bn254::PlonkBn254Prover}; -use sp1_recursion_program::hints::Hintable; -pub use sp1_recursion_program::machine::{ - ReduceProgramType, SP1CompressMemoryLayout, SP1DeferredMemoryLayout, SP1RecursionMemoryLayout, - SP1RootMemoryLayout, -}; + use sp1_stark::{ air::PublicValues, baby_bear_poseidon2::BabyBearPoseidon2, Challenge, Challenger, MachineProver, MachineVerificationError, SP1CoreOpts, SP1ProverOpts, ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, Val, Word, DIGEST_SIZE, }; -use tracing::instrument; +use sp1_recursion_core_v2::{ + machine::RecursionAir, runtime::ExecutionRecord, stark::config::BabyBearPoseidon2Outer, + RecursionProgram, Runtime as RecursionRuntime, +}; + +use sp1_recursion_circuit_v2::{ + machine::{ + SP1CompressVerifier, SP1CompressWitnessValues, SP1DeferredWitnessValues, + SP1RecursionWitnessValues, SP1RecursiveVerifier, + }, + witness::Witnessable, +}; + pub use types::*; use utils::words_to_bytes; +use components::{DefaultProverComponents, SP1ProverComponents}; + pub use sp1_core_machine::SP1_CIRCUIT_VERSION; /// The configuration for the core prover. @@ -77,42 +88,12 @@ const COMPRESS_DEGREE: usize = 3; const SHRINK_DEGREE: usize = 9; const WRAP_DEGREE: usize = 17; -pub type CompressAir = RecursionAir; -pub type ShrinkAir = RecursionAir; -pub type WrapAir = RecursionAir; +pub type CompressAir = RecursionAir; +pub type ShrinkAir = RecursionAir; +pub type WrapAir = RecursionAir; /// A end-to-end prover implementation for the SP1 RISC-V zkVM. pub struct SP1Prover { - /// The program that can recursively verify a set of proofs into a single proof. - pub recursion_program: OnceLock>, - - /// The proving key and verifying key for the recursion step. - pub recursion_keys: OnceLock<(StarkProvingKey, StarkVerifyingKey)>, - - /// The program that recursively verifies deferred proofs and accumulates the digests. - pub deferred_program: OnceLock>, - - /// The proving key and verifying key for the reduce step. - pub deferred_keys: OnceLock<(StarkProvingKey, StarkVerifyingKey)>, - - /// The program that reduces a set of recursive proofs into a single proof. - pub compress_program: OnceLock>, - - /// The proving key and verifying key for the reduce step. - pub compress_keys: OnceLock<(StarkProvingKey, StarkVerifyingKey)>, - - /// The shrink program that compresses a proof into a succinct proof. - pub shrink_program: OnceLock>, - - /// The proving key and verifying key for the compress step. - pub shrink_keys: OnceLock<(StarkProvingKey, StarkVerifyingKey)>, - - /// The wrap program that wraps a proof into a SNARK-friendly field. - pub wrap_program: OnceLock>, - - /// The proving key and verifying key for the wrap step. - pub wrap_keys: OnceLock<(StarkProvingKey, StarkVerifyingKey)>, - /// The machine used for proving the core step. pub core_prover: C::CoreProver, @@ -131,16 +112,7 @@ impl SP1Prover { #[instrument(name = "initialize prover", level = "debug", skip_all)] pub fn new() -> Self { let prover = Self::uninitialized(); - // Initialize everything except wrap key which is a bit slow. - prover.recursion_program(); - prover.deferred_program(); - prover.compress_program(); - prover.shrink_program(); - prover.wrap_program(); - prover.recursion_keys(); - prover.deferred_keys(); - prover.compress_keys(); - prover.shrink_keys(); + prover } @@ -150,47 +122,22 @@ impl SP1Prover { let core_machine = RiscvAir::machine(CoreSC::default()); let core_prover = C::CoreProver::new(core_machine); - let compress_machine = CompressAir::machine(InnerSC::default()); + let compress_machine = CompressAir::machine_wide(InnerSC::default()); let compress_prover = C::CompressProver::new(compress_machine); - let shrink_machine = ShrinkAir::wrap_machine_dyn(InnerSC::compressed()); + // TODO: Put the correct shrink and wrap machines here. + let shrink_machine = ShrinkAir::machine(InnerSC::compressed()); let shrink_prover = C::ShrinkProver::new(shrink_machine); - let wrap_machine = WrapAir::wrap_machine(OuterSC::default()); + let wrap_machine = WrapAir::machine(OuterSC::default()); let wrap_prover = C::WrapProver::new(wrap_machine); - Self { - recursion_program: OnceLock::new(), - recursion_keys: OnceLock::new(), - deferred_program: OnceLock::new(), - deferred_keys: OnceLock::new(), - compress_program: OnceLock::new(), - compress_keys: OnceLock::new(), - shrink_program: OnceLock::new(), - shrink_keys: OnceLock::new(), - wrap_program: OnceLock::new(), - wrap_keys: OnceLock::new(), - core_prover, - compress_prover, - shrink_prover, - wrap_prover, - } + Self { core_prover, compress_prover, shrink_prover, wrap_prover } } /// Fully initializes the programs, proving keys, and verifying keys that are normally /// lazily initialized. - pub fn initialize(&mut self) { - self.recursion_program(); - self.deferred_program(); - self.compress_program(); - self.shrink_program(); - self.wrap_program(); - self.recursion_keys(); - self.deferred_keys(); - self.compress_keys(); - self.shrink_keys(); - self.wrap_keys(); - } + pub fn initialize(&mut self) {} /// Creates a proving key and a verifying key for a given RISC-V ELF. #[instrument(name = "setup", level = "debug", skip_all)] @@ -253,14 +200,48 @@ impl SP1Prover { }) } - pub fn get_recursion_core_inputs<'a>( - &'a self, - vk: &'a StarkVerifyingKey, - leaf_challenger: &'a Challenger, + pub fn recursion_program( + &self, + input: &SP1RecursionWitnessValues, + ) -> Arc> { + // Compile the program. + + // Get the operations. + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); + let operations = builder.operations; + + // Compile the program. + let mut compiler = AsmCompiler::::default(); + Arc::new(compiler.compile(operations)) + } + + pub fn compress_program( + &self, + input: &SP1CompressWitnessValues, + ) -> Arc> { + // Compile the program. + + // Get the operations. + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); + let operations = builder.operations; + + // Compile the program. + let mut compiler = AsmCompiler::::default(); + Arc::new(compiler.compile(operations)) + } + + pub fn get_recursion_core_inputs( + &self, + vk: &StarkVerifyingKey, + leaf_challenger: &Challenger, shard_proofs: &[ShardProof], batch_size: usize, is_complete: bool, - ) -> Vec>> { + ) -> Vec> { let mut core_inputs = Vec::new(); let mut reconstruct_challenger = self.core_prover.config().challenger(); vk.observe_into(&mut reconstruct_challenger); @@ -269,11 +250,10 @@ impl SP1Prover { for batch in shard_proofs.chunks(batch_size) { let proofs = batch.to_vec(); - core_inputs.push(SP1RecursionMemoryLayout { - vk, - machine: self.core_prover.machine(), + core_inputs.push(SP1RecursionWitnessValues { + vk: vk.clone(), shard_proofs: proofs.clone(), - leaf_challenger, + leaf_challenger: leaf_challenger.clone(), initial_reconstruct_challenger: reconstruct_challenger.clone(), is_complete, }); @@ -299,35 +279,36 @@ impl SP1Prover { last_proof_pv: &PublicValues, BabyBear>, deferred_proofs: &[ShardProof], batch_size: usize, - ) -> Vec>> { - // Prepare the inputs for the deferred proofs recursive verification. - let mut deferred_digest = [Val::::zero(); DIGEST_SIZE]; - let mut deferred_inputs = Vec::new(); - - for batch in deferred_proofs.chunks(batch_size) { - let proofs = batch.to_vec(); - - deferred_inputs.push(SP1DeferredMemoryLayout { - compress_vk: self.compress_vk(), - machine: self.compress_prover.machine(), - proofs, - start_reconstruct_deferred_digest: deferred_digest.to_vec(), - is_complete: false, - sp1_vk: vk, - sp1_machine: self.core_prover.machine(), - end_pc: Val::::zero(), - end_shard: last_proof_pv.shard + BabyBear::one(), - end_execution_shard: last_proof_pv.execution_shard, - init_addr_bits: last_proof_pv.last_init_addr_bits, - finalize_addr_bits: last_proof_pv.last_finalize_addr_bits, - leaf_challenger: leaf_challenger.clone(), - committed_value_digest: last_proof_pv.committed_value_digest.to_vec(), - deferred_proofs_digest: last_proof_pv.deferred_proofs_digest.to_vec(), - }); - - deferred_digest = Self::hash_deferred_proofs(deferred_digest, batch); - } - deferred_inputs + ) -> Vec> { + todo!() + // // Prepare the inputs for the deferred proofs recursive verification. + // let mut deferred_digest = [Val::::zero(); DIGEST_SIZE]; + // let mut deferred_inputs = Vec::new(); + + // for batch in deferred_proofs.chunks(batch_size) { + // let proofs = batch.to_vec(); + + // deferred_inputs.push(SP1DeferredMemoryLayout { + // compress_vk: self.compress_vk(), + // machine: self.compress_prover.machine(), + // proofs, + // start_reconstruct_deferred_digest: deferred_digest.to_vec(), + // is_complete: false, + // sp1_vk: vk, + // sp1_machine: self.core_prover.machine(), + // end_pc: Val::::zero(), + // end_shard: last_proof_pv.shard + BabyBear::one(), + // end_execution_shard: last_proof_pv.execution_shard, + // init_addr_bits: last_proof_pv.last_init_addr_bits, + // finalize_addr_bits: last_proof_pv.last_finalize_addr_bits, + // leaf_challenger: leaf_challenger.clone(), + // committed_value_digest: last_proof_pv.committed_value_digest.to_vec(), + // deferred_proofs_digest: last_proof_pv.deferred_proofs_digest.to_vec(), + // }); + + // deferred_digest = Self::hash_deferred_proofs(deferred_digest, batch); + // } + // deferred_inputs } /// Generate the inputs for the first layer of recursive proofs. @@ -339,7 +320,7 @@ impl SP1Prover { shard_proofs: &[ShardProof], deferred_proofs: &[ShardProof], batch_size: usize, - ) -> Vec> { + ) -> Vec { let is_complete = shard_proofs.len() == 1 && deferred_proofs.is_empty(); let core_inputs = self.get_recursion_core_inputs( &vk.vk, @@ -348,18 +329,18 @@ impl SP1Prover { batch_size, is_complete, ); - let last_proof_pv = shard_proofs.last().unwrap().public_values.as_slice().borrow(); - let deferred_inputs = self.get_recursion_deferred_inputs( - &vk.vk, - leaf_challenger, - last_proof_pv, - deferred_proofs, - batch_size, - ); + // let last_proof_pv = shard_proofs.last().unwrap().public_values.as_slice().borrow(); + // let deferred_inputs = self.get_recursion_deferred_inputs( + // &vk.vk, + // leaf_challenger, + // last_proof_pv, + // deferred_proofs, + // batch_size, + // ); let mut inputs = Vec::new(); - inputs.extend(core_inputs.into_iter().map(SP1CompressMemoryLayouts::Core)); - inputs.extend(deferred_inputs.into_iter().map(SP1CompressMemoryLayouts::Deferred)); + inputs.extend(core_inputs.into_iter().map(SP1CircuitWitness::Core)); + // inputs.extend(deferred_inputs.into_iter().map(SP1CircuitWitness::Deferred)); inputs } @@ -403,12 +384,12 @@ impl SP1Prover { // Generate the proofs. let span = tracing::Span::current().clone(); - let proof = thread::scope(|s| { + let (vk, proof) = thread::scope(|s| { let _span = span.enter(); // Spawn a worker that sends the first layer inputs to a bounded channel. let input_sync = Arc::new(TurnBasedSync::new()); - let (input_tx, input_rx) = sync_channel::<(usize, usize, SP1CompressMemoryLayouts)>( + let (input_tx, input_rx) = sync_channel::<(usize, usize, SP1CircuitWitness)>( opts.recursion_opts.checkpoints_channel_capacity, ); let input_tx = Arc::new(Mutex::new(input_tx)); @@ -430,9 +411,9 @@ impl SP1Prover { sync_channel::<( usize, usize, + Arc>, ExecutionRecord, Vec<(String, RowMajorMatrix)>, - ReduceProgramType, )>(opts.recursion_opts.records_and_traces_channel_capacity); let record_and_trace_tx = Arc::new(Mutex::new(record_and_trace_tx)); let record_and_trace_rx = Arc::new(Mutex::new(record_and_trace_rx)); @@ -448,36 +429,26 @@ impl SP1Prover { let received = { input_rx.lock().unwrap().recv() }; if let Ok((index, height, input)) = received { // Get the program and witness stream. - let (program, witness_stream, program_type) = tracing::debug_span!( + let (program, witness_stream) = tracing::debug_span!( "write witness stream" ) .in_scope(|| match input { - SP1CompressMemoryLayouts::Core(input) => { - let mut witness_stream = Vec::new(); - witness_stream.extend(input.write()); - ( - self.recursion_program(), - witness_stream, - ReduceProgramType::Core, - ) - } - SP1CompressMemoryLayouts::Deferred(input) => { + SP1CircuitWitness::Core(input) => { let mut witness_stream = Vec::new(); - witness_stream.extend(input.write()); - ( - self.deferred_program(), - witness_stream, - ReduceProgramType::Deferred, - ) + witness_stream + .extend(Witnessable::::write(&input)); + (self.recursion_program(&input), witness_stream) } - SP1CompressMemoryLayouts::Compress(input) => { + // SP1CircuitWitness::Deferred(input) => { + // let mut witness_stream = Vec::new(); + // witness_stream.extend(input.write()); + // (self.deferred_program(), witness_stream) + // } + SP1CircuitWitness::Compress(input) => { let mut witness_stream = Vec::new(); - witness_stream.extend(input.write()); - ( - self.compress_program(), - witness_stream, - ReduceProgramType::Reduce, - ) + witness_stream + .extend(Witnessable::::write(&input)); + (self.compress_program(&input), witness_stream) } }); @@ -485,7 +456,7 @@ impl SP1Prover { let record = tracing::debug_span!("execute runtime").in_scope(|| { let mut runtime = RecursionRuntime::, Challenge, _>::new( - program, + program.clone(), self.compress_prover.config().perm.clone(), ); runtime.witness_stream = witness_stream.into(); @@ -518,7 +489,7 @@ impl SP1Prover { record_and_trace_tx .lock() .unwrap() - .send((index, height, record, traces, program_type)) + .send((index, height, program, record, traces)) .unwrap(); // Advance the turn. @@ -533,7 +504,7 @@ impl SP1Prover { // Spawn workers who generate the compress proofs. let proofs_sync = Arc::new(TurnBasedSync::new()); let (proofs_tx, proofs_rx) = - sync_channel::<(usize, usize, ShardProof, ReduceProgramType)>( + sync_channel::<(usize, usize, StarkVerifyingKey, ShardProof)>( opts.recursion_opts.shard_batch_size, ); let proofs_tx = Arc::new(Mutex::new(proofs_tx)); @@ -548,16 +519,10 @@ impl SP1Prover { let _span = span.enter(); loop { let received = { record_and_trace_rx.lock().unwrap().recv() }; - if let Ok((index, height, record, traces, program_type)) = received { + if let Ok((index, height, program, record, traces)) = received { tracing::debug_span!("batch").in_scope(|| { - // Get the proving key. - let pk = if program_type == ReduceProgramType::Core { - self.recursion_pk() - } else if program_type == ReduceProgramType::Deferred { - self.deferred_pk() - } else { - self.compress_pk() - }; + // Get the keys. + let (pk, vk) = self.compress_prover.setup(&program); // Observe the proving key. let mut challenger = self.compress_prover.config().challenger(); @@ -579,18 +544,14 @@ impl SP1Prover { // Generate the proof. let proof = tracing::debug_span!("open").in_scope(|| { - self.compress_prover.open(pk, data, &mut challenger).unwrap() + self.compress_prover.open(&pk, data, &mut challenger).unwrap() }); // Wait for our turn to update the state. prover_sync.wait_for_turn(index); // Send the proof. - proofs_tx - .lock() - .unwrap() - .send((index, height, proof, program_type)) - .unwrap(); + proofs_tx.lock().unwrap().send((index, height, vk, proof)).unwrap(); // Advance the turn. prover_sync.advance_turn(); @@ -614,13 +575,13 @@ impl SP1Prover { let mut batch: Vec<( usize, usize, - ShardProof, - ReduceProgramType, + StarkVerifyingKey, + ShardProof, )> = Vec::new(); loop { let received = { proofs_rx.lock().unwrap().recv() }; - if let Ok((index, height, proof, program_type)) = received { - batch.push((index, height, proof, program_type)); + if let Ok((index, height, vk, proof)) = received { + batch.push((index, height, vk, proof)); // Compute whether we've reached the root of the tree. let is_complete = height == expected_height; @@ -641,23 +602,29 @@ impl SP1Prover { // first input, otherwise we include all inputs. let inputs = if is_last { vec![batch[0].clone()] } else { batch.clone() }; - let shard_proofs = - inputs.iter().map(|(_, _, proof, _)| proof.clone()).collect(); - let kinds = inputs - .iter() - .map(|(_, _, _, program_type)| *program_type) - .collect(); - let input = - SP1CompressMemoryLayouts::Compress(SP1CompressMemoryLayout { - compress_vk: self.compress_vk(), - recursive_machine: self.compress_prover.machine(), - shard_proofs, - kinds, - is_complete, - }); + + let next_input_index = inputs[0].1 + 1; + let vks_and_proofs = inputs + .into_iter() + .map(|(_, _, vk, proof)| (vk, proof)) + .collect::>(); + // let shard_proofs = + // inputs.iter().map(|(_, _, proof, _)| proof.clone()).collect(); + // let kinds = inputs + // .iter() + // .map(|(_, _, _, program_type)| *program_type) + // .collect(); + let input = SP1CircuitWitness::Compress(SP1CompressWitnessValues { + vks_and_proofs, + is_complete, + }); input_sync.wait_for_turn(count); - input_tx.lock().unwrap().send((count, inputs[0].1 + 1, input)).unwrap(); + input_tx + .lock() + .unwrap() + .send((count, next_input_index, input)) + .unwrap(); input_sync.advance_turn(); count += 1; @@ -689,223 +656,186 @@ impl SP1Prover { } handle.join().unwrap(); - let output = proofs_rx.lock().unwrap().recv().unwrap(); - output.2 + let (_, _, vk, proof) = proofs_rx.lock().unwrap().recv().unwrap(); + (vk, proof) }); - Ok(SP1ReduceProof { proof }) + Ok(SP1ReduceProof { vk, proof }) } - /// Generate a proof with the compress machine. - pub fn compress_machine_proof( - &self, - input: impl Hintable, - program: &RecursionProgram, - pk: &StarkProvingKey, - opts: SP1ProverOpts, - ) -> Result, SP1RecursionProverError> { - let mut runtime = RecursionRuntime::, Challenge, _>::new( - program, - self.compress_prover.config().perm.clone(), - ); - - let span = tracing::debug_span!("execute runtime"); - let guard = span.enter(); - - let mut witness_stream = Vec::new(); - witness_stream.extend(input.write()); - - runtime.witness_stream = witness_stream.into(); - runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; - runtime.print_stats(); - - drop(guard); - - let mut recursive_challenger = self.compress_prover.config().challenger(); - let proof = self - .compress_prover - .prove(pk, vec![runtime.record], &mut recursive_challenger, opts.recursion_opts) - .unwrap() - .shard_proofs - .pop() - .unwrap(); - - Ok(proof) - } - - /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. - #[instrument(name = "shrink", level = "info", skip_all)] - pub fn shrink( - &self, - reduced_proof: SP1ReduceProof, - opts: SP1ProverOpts, - ) -> Result, SP1RecursionProverError> { - // Make the compress proof. - let input = SP1RootMemoryLayout { - machine: self.compress_prover.machine(), - proof: reduced_proof.proof, - is_reduce: true, - }; - - // Run the compress program. - let mut runtime = RecursionRuntime::, Challenge, _>::new( - self.shrink_program(), - self.shrink_prover.config().perm.clone(), - ); - - let mut witness_stream = Vec::new(); - witness_stream.extend(input.write()); - - runtime.witness_stream = witness_stream.into(); - - runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; - - runtime.print_stats(); - tracing::debug!("Compress program executed successfully"); - - // Prove the compress program. - let mut compress_challenger = self.shrink_prover.config().challenger(); - let mut compress_proof = self - .shrink_prover - .prove( - self.shrink_pk(), - vec![runtime.record], - &mut compress_challenger, - opts.recursion_opts, - ) - .unwrap(); - - Ok(SP1ReduceProof { proof: compress_proof.shard_proofs.pop().unwrap() }) - } - - /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. - #[instrument(name = "wrap_bn254", level = "info", skip_all)] - pub fn wrap_bn254( - &self, - compressed_proof: SP1ReduceProof, - opts: SP1ProverOpts, - ) -> Result, SP1RecursionProverError> { - let input = SP1RootMemoryLayout { - machine: self.shrink_prover.machine(), - proof: compressed_proof.proof, - is_reduce: false, - }; - - // Run the compress program. - let mut runtime = RecursionRuntime::, Challenge, _>::new( - self.wrap_program(), - self.shrink_prover.config().perm.clone(), - ); - - let mut witness_stream = Vec::new(); - witness_stream.extend(input.write()); - - runtime.witness_stream = witness_stream.into(); - - runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; - - runtime.print_stats(); - tracing::debug!("Wrap program executed successfully"); - - // Prove the wrap program. - let mut wrap_challenger = self.wrap_prover.config().challenger(); - let time = std::time::Instant::now(); - let mut wrap_proof = self - .wrap_prover - .prove(self.wrap_pk(), vec![runtime.record], &mut wrap_challenger, opts.recursion_opts) - .unwrap(); - let elapsed = time.elapsed(); - tracing::debug!("Wrap proving time: {:?}", elapsed); - let mut wrap_challenger = self.wrap_prover.config().challenger(); - let result = - self.wrap_prover.machine().verify(self.wrap_vk(), &wrap_proof, &mut wrap_challenger); - match result { - Ok(_) => tracing::info!("Proof verified successfully"), - Err(MachineVerificationError::NonZeroCumulativeSum) => { - tracing::info!("Proof verification failed: NonZeroCumulativeSum") - } - e => panic!("Proof verification failed: {:?}", e), - } - tracing::info!("Wrapping successful"); - - Ok(SP1ReduceProof { proof: wrap_proof.shard_proofs.pop().unwrap() }) - } - - /// Wrap the STARK proven over a SNARK-friendly field into a PLONK proof. - #[instrument(name = "wrap_plonk_bn254", level = "info", skip_all)] - pub fn wrap_plonk_bn254( - &self, - proof: SP1ReduceProof, - build_dir: &Path, - ) -> PlonkBn254Proof { - let vkey_digest = proof.sp1_vkey_digest_bn254(); - let commited_values_digest = proof.sp1_commited_values_digest_bn254(); - - let mut witness = Witness::default(); - proof.proof.write(&mut witness); - witness.write_commited_values_digest(commited_values_digest); - witness.write_vkey_hash(vkey_digest); - - let prover = PlonkBn254Prover::new(); - let proof = prover.prove(witness, build_dir.to_path_buf()); - - // Verify the proof. - prover.verify( - &proof, - &vkey_digest.as_canonical_biguint(), - &commited_values_digest.as_canonical_biguint(), - build_dir, - ); - - proof - } - - /// Wrap the STARK proven over a SNARK-friendly field into a Groth16 proof. - #[instrument(name = "wrap_groth16_bn254", level = "info", skip_all)] - pub fn wrap_groth16_bn254( - &self, - proof: SP1ReduceProof, - build_dir: &Path, - ) -> Groth16Bn254Proof { - let vkey_digest = proof.sp1_vkey_digest_bn254(); - let commited_values_digest = proof.sp1_commited_values_digest_bn254(); - - let mut witness = Witness::default(); - proof.proof.write(&mut witness); - witness.write_commited_values_digest(commited_values_digest); - witness.write_vkey_hash(vkey_digest); - - let prover = Groth16Bn254Prover::new(); - let proof = prover.prove(witness, build_dir.to_path_buf()); - - // Verify the proof. - prover.verify( - &proof, - &vkey_digest.as_canonical_biguint(), - &commited_values_digest.as_canonical_biguint(), - build_dir, - ); - - proof - } - - /// Accumulate deferred proofs into a single digest. - pub fn hash_deferred_proofs( - prev_digest: [Val; DIGEST_SIZE], - deferred_proofs: &[ShardProof], - ) -> [Val; 8] { - let mut digest = prev_digest; - for proof in deferred_proofs.iter() { - let pv: &RecursionPublicValues> = proof.public_values.as_slice().borrow(); - let committed_values_digest = words_to_bytes(&pv.committed_value_digest); - digest = hash_deferred_proof( - &digest, - &pv.sp1_vk_digest, - &committed_values_digest.try_into().unwrap(), - ); - } - digest - } + // /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. + // #[instrument(name = "shrink", level = "info", skip_all)] + // pub fn shrink( + // &self, + // reduced_proof: SP1ReduceProof, + // opts: SP1ProverOpts, + // ) -> Result, SP1RecursionProverError> { + // // Make the compress proof. + // let input = SP1RootMemoryLayout { + // machine: self.compress_prover.machine(), + // proof: reduced_proof.proof, + // is_reduce: true, + // }; + + // // Run the compress program. + // let mut runtime = RecursionRuntime::, Challenge, _>::new( + // self.shrink_program(), + // self.shrink_prover.config().perm.clone(), + // ); + + // let mut witness_stream = Vec::new(); + // witness_stream.extend(input.write()); + + // runtime.witness_stream = witness_stream.into(); + + // runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; + + // runtime.print_stats(); + // tracing::debug!("Compress program executed successfully"); + + // // Prove the compress program. + // let mut compress_challenger = self.shrink_prover.config().challenger(); + // let mut compress_proof = self + // .shrink_prover + // .prove( + // self.shrink_pk(), + // vec![runtime.record], + // &mut compress_challenger, + // opts.recursion_opts, + // ) + // .unwrap(); + + // Ok(SP1ReduceProof { proof: compress_proof.shard_proofs.pop().unwrap() }) + // } + + // /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. + // #[instrument(name = "wrap_bn254", level = "info", skip_all)] + // pub fn wrap_bn254( + // &self, + // compressed_proof: SP1ReduceProof, + // opts: SP1ProverOpts, + // ) -> Result, SP1RecursionProverError> { + // let input = SP1RootMemoryLayout { + // machine: self.shrink_prover.machine(), + // proof: compressed_proof.proof, + // is_reduce: false, + // }; + + // // Run the compress program. + // let mut runtime = RecursionRuntime::, Challenge, _>::new( + // self.wrap_program(), + // self.shrink_prover.config().perm.clone(), + // ); + + // let mut witness_stream = Vec::new(); + // witness_stream.extend(input.write()); + + // runtime.witness_stream = witness_stream.into(); + + // runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; + + // runtime.print_stats(); + // tracing::debug!("Wrap program executed successfully"); + + // // Prove the wrap program. + // let mut wrap_challenger = self.wrap_prover.config().challenger(); + // let time = std::time::Instant::now(); + // let mut wrap_proof = self + // .wrap_prover + // .prove(self.wrap_pk(), vec![runtime.record], &mut wrap_challenger, opts.recursion_opts) + // .unwrap(); + // let elapsed = time.elapsed(); + // tracing::debug!("Wrap proving time: {:?}", elapsed); + // let mut wrap_challenger = self.wrap_prover.config().challenger(); + // let result = + // self.wrap_prover.machine().verify(self.wrap_vk(), &wrap_proof, &mut wrap_challenger); + // match result { + // Ok(_) => tracing::info!("Proof verified successfully"), + // Err(MachineVerificationError::NonZeroCumulativeSum) => { + // tracing::info!("Proof verification failed: NonZeroCumulativeSum") + // } + // e => panic!("Proof verification failed: {:?}", e), + // } + // tracing::info!("Wrapping successful"); + + // Ok(SP1ReduceProof { proof: wrap_proof.shard_proofs.pop().unwrap() }) + // } + + // /// Wrap the STARK proven over a SNARK-friendly field into a PLONK proof. + // #[instrument(name = "wrap_plonk_bn254", level = "info", skip_all)] + // pub fn wrap_plonk_bn254( + // &self, + // proof: SP1ReduceProof, + // build_dir: &Path, + // ) -> PlonkBn254Proof { + // let vkey_digest = proof.sp1_vkey_digest_bn254(); + // let commited_values_digest = proof.sp1_commited_values_digest_bn254(); + + // let mut witness = Witness::default(); + // proof.proof.write(&mut witness); + // witness.write_commited_values_digest(commited_values_digest); + // witness.write_vkey_hash(vkey_digest); + + // let prover = PlonkBn254Prover::new(); + // let proof = prover.prove(witness, build_dir.to_path_buf()); + + // // Verify the proof. + // prover.verify( + // &proof, + // &vkey_digest.as_canonical_biguint(), + // &commited_values_digest.as_canonical_biguint(), + // build_dir, + // ); + + // proof + // } + + // /// Wrap the STARK proven over a SNARK-friendly field into a Groth16 proof. + // #[instrument(name = "wrap_groth16_bn254", level = "info", skip_all)] + // pub fn wrap_groth16_bn254( + // &self, + // proof: SP1ReduceProof, + // build_dir: &Path, + // ) -> Groth16Bn254Proof { + // let vkey_digest = proof.sp1_vkey_digest_bn254(); + // let commited_values_digest = proof.sp1_commited_values_digest_bn254(); + + // let mut witness = Witness::default(); + // proof.proof.write(&mut witness); + // witness.write_commited_values_digest(commited_values_digest); + // witness.write_vkey_hash(vkey_digest); + + // let prover = Groth16Bn254Prover::new(); + // let proof = prover.prove(witness, build_dir.to_path_buf()); + + // // Verify the proof. + // prover.verify( + // &proof, + // &vkey_digest.as_canonical_biguint(), + // &commited_values_digest.as_canonical_biguint(), + // build_dir, + // ); + + // proof + // } + + // /// Accumulate deferred proofs into a single digest. + // pub fn hash_deferred_proofs( + // prev_digest: [Val; DIGEST_SIZE], + // deferred_proofs: &[ShardProof], + // ) -> [Val; 8] { + // let mut digest = prev_digest; + // for proof in deferred_proofs.iter() { + // let pv: &RecursionPublicValues> = proof.public_values.as_slice().borrow(); + // let committed_values_digest = words_to_bytes(&pv.committed_value_digest); + // digest = hash_deferred_proof( + // &digest, + // &pv.sp1_vk_digest, + // &committed_values_digest.try_into().unwrap(), + // ); + // } + // digest + // } fn check_for_high_cycles(cycles: u64) { if cycles > 100_000_000 { @@ -927,9 +857,10 @@ pub mod tests { use super::*; use anyhow::Result; - use build::{try_build_groth16_bn254_artifacts_dev, try_build_plonk_bn254_artifacts_dev}; + // use build::{try_build_groth16_bn254_artifacts_dev, try_build_plonk_bn254_artifacts_dev}; use p3_field::PrimeField32; - use sp1_core_machine::io::SP1Stdin; + + use sp1_recursion_core_v2::air::RecursionPublicValues; #[cfg(test)] use serial_test::serial; @@ -979,62 +910,62 @@ pub mod tests { return Ok(()); } - tracing::info!("shrink"); - let shrink_proof = prover.shrink(compressed_proof, opts)?; + // tracing::info!("shrink"); + // let shrink_proof = prover.shrink(compressed_proof, opts)?; - tracing::info!("verify shrink"); - prover.verify_shrink(&shrink_proof, &vk)?; + // tracing::info!("verify shrink"); + // prover.verify_shrink(&shrink_proof, &vk)?; - if test_kind == Test::Shrink { - return Ok(()); - } + // if test_kind == Test::Shrink { + // return Ok(()); + // } - tracing::info!("wrap bn254"); - let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; - let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); + // tracing::info!("wrap bn254"); + // let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; + // let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); - // Save the proof. - let mut file = File::create("proof-with-pis.bin").unwrap(); - file.write_all(bytes.as_slice()).unwrap(); + // // Save the proof. + // let mut file = File::create("proof-with-pis.bin").unwrap(); + // file.write_all(bytes.as_slice()).unwrap(); - // Load the proof. - let mut file = File::open("proof-with-pis.bin").unwrap(); - let mut bytes = Vec::new(); - file.read_to_end(&mut bytes).unwrap(); + // // Load the proof. + // let mut file = File::open("proof-with-pis.bin").unwrap(); + // let mut bytes = Vec::new(); + // file.read_to_end(&mut bytes).unwrap(); - let wrapped_bn254_proof = bincode::deserialize(&bytes).unwrap(); + // let wrapped_bn254_proof = bincode::deserialize(&bytes).unwrap(); - tracing::info!("verify wrap bn254"); - prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk).unwrap(); + // tracing::info!("verify wrap bn254"); + // prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk).unwrap(); - if test_kind == Test::Wrap { - return Ok(()); - } + // if test_kind == Test::Wrap { + // return Ok(()); + // } - tracing::info!("checking vkey hash babybear"); - let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); - assert_eq!(vk_digest_babybear, vk.hash_babybear()); + // tracing::info!("checking vkey hash babybear"); + // let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); + // assert_eq!(vk_digest_babybear, vk.hash_babybear()); - tracing::info!("checking vkey hash bn254"); - let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); - assert_eq!(vk_digest_bn254, vk.hash_bn254()); + // tracing::info!("checking vkey hash bn254"); + // let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); + // assert_eq!(vk_digest_bn254, vk.hash_bn254()); - tracing::info!("generate plonk bn254 proof"); - let artifacts_dir = - try_build_plonk_bn254_artifacts_dev(prover.wrap_vk(), &wrapped_bn254_proof.proof); - let plonk_bn254_proof = - prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); - println!("{:?}", plonk_bn254_proof); + // tracing::info!("generate plonk bn254 proof"); + // let artifacts_dir = + // try_build_plonk_bn254_artifacts_dev(prover.wrap_vk(), &wrapped_bn254_proof.proof); + // let plonk_bn254_proof = + // prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); + // println!("{:?}", plonk_bn254_proof); - prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; + // prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; - tracing::info!("generate groth16 bn254 proof"); - let artifacts_dir = - try_build_groth16_bn254_artifacts_dev(prover.wrap_vk(), &wrapped_bn254_proof.proof); - let groth16_bn254_proof = prover.wrap_groth16_bn254(wrapped_bn254_proof, &artifacts_dir); - println!("{:?}", groth16_bn254_proof); + // tracing::info!("generate groth16 bn254 proof"); + // let artifacts_dir = + // try_build_groth16_bn254_artifacts_dev(prover.wrap_vk(), &wrapped_bn254_proof.proof); + // let groth16_bn254_proof = prover.wrap_groth16_bn254(wrapped_bn254_proof, &artifacts_dir); + // println!("{:?}", groth16_bn254_proof); - prover.verify_groth16_bn254(&groth16_bn254_proof, &vk, &public_values, &artifacts_dir)?; + // prover.verify_groth16_bn254(&groth16_bn254_proof, &vk, &public_values, &artifacts_dir)?; Ok(()) } diff --git a/crates/prover/src/types.rs b/crates/prover/src/types.rs index 95bc5d8a6c..ab6eb3a1ec 100644 --- a/crates/prover/src/types.rs +++ b/crates/prover/src/types.rs @@ -6,22 +6,23 @@ use p3_bn254_fr::Bn254Fr; use p3_commit::{Pcs, TwoAdicMultiplicativeCoset}; use p3_field::{AbstractField, PrimeField, PrimeField32, TwoAdicField}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use sp1_core_machine::{ - io::{SP1PublicValues, SP1Stdin}, - riscv::RiscvAir, -}; +use sp1_core_machine::io::{SP1PublicValues, SP1Stdin}; use sp1_primitives::poseidon2_hash; -use sp1_recursion_core::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; + +use sp1_recursion_core_v2::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; + +use sp1_recursion_circuit_v2::machine::{SP1CompressWitnessValues, SP1RecursionWitnessValues}; + use sp1_recursion_gnark_ffi::proof::{Groth16Bn254Proof, PlonkBn254Proof}; -use sp1_recursion_program::machine::{ - SP1CompressMemoryLayout, SP1DeferredMemoryLayout, SP1RecursionMemoryLayout, + +use sp1_stark::{ + Dom, ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, DIGEST_SIZE, }; -use sp1_stark::{ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, DIGEST_SIZE}; use thiserror::Error; use crate::{ utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes_be}, - words_to_bytes, CompressAir, CoreSC, InnerSC, + words_to_bytes, CoreSC, InnerSC, }; /// The information necessary to generate a proof for a given RISC-V program. @@ -201,9 +202,10 @@ impl ProofSystem { /// An intermediate proof which proves the execution over a range of shards. #[derive(Serialize, Deserialize, Clone)] -#[serde(bound(serialize = "ShardProof: Serialize"))] -#[serde(bound(deserialize = "ShardProof: Deserialize<'de>"))] +#[serde(bound(serialize = "ShardProof: Serialize, Dom: Serialize"))] +#[serde(bound(deserialize = "ShardProof: Deserialize<'de>, Dom: DeserializeOwned"))] pub struct SP1ReduceProof { + pub vk: StarkVerifyingKey, pub proof: ShardProof, } @@ -241,8 +243,8 @@ pub enum SP1RecursionProverError { } #[allow(clippy::large_enum_variant)] -pub enum SP1CompressMemoryLayouts<'a> { - Core(SP1RecursionMemoryLayout<'a, InnerSC, RiscvAir>), - Deferred(SP1DeferredMemoryLayout<'a, InnerSC, CompressAir>), - Compress(SP1CompressMemoryLayout<'a, InnerSC, CompressAir>), +pub enum SP1CircuitWitness { + Core(SP1RecursionWitnessValues), + // Deferred(SP1DeferredMemoryLayout>), + Compress(SP1CompressWitnessValues), } diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index f9c0817ca3..5bc70e81e9 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -7,7 +7,8 @@ use p3_field::{AbstractField, PrimeField}; use sp1_core_executor::subproof::SubproofVerifier; use sp1_core_machine::{cpu::MAX_CPU_LOG_DEGREE, io::SP1PublicValues}; use sp1_primitives::consts::WORD_SIZE; -use sp1_recursion_core::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; + +use sp1_recursion_core_v2::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; use sp1_recursion_gnark_ffi::{ Groth16Bn254Proof, Groth16Bn254Prover, PlonkBn254Proof, PlonkBn254Prover, }; @@ -290,17 +291,13 @@ impl SP1Prover { proof: &SP1ReduceProof, vk: &SP1VerifyingKey, ) -> Result<(), MachineVerificationError> { + let SP1ReduceProof { vk: compress_vk, proof } = proof; let mut challenger = self.compress_prover.config().challenger(); - let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; - self.compress_prover.machine().verify( - self.compress_vk(), - &machine_proof, - &mut challenger, - )?; + let machine_proof = MachineProof { shard_proofs: vec![proof.clone()] }; + self.compress_prover.machine().verify(compress_vk, &machine_proof, &mut challenger)?; // Validate public values - let public_values: &RecursionPublicValues<_> = - proof.proof.public_values.as_slice().borrow(); + let public_values: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully // reduced. @@ -314,13 +311,13 @@ impl SP1Prover { return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); } - // Verify that the reduce program is the one we are expecting. - let recursion_vkey_hash = self.compress_vk().hash_babybear(); - if public_values.compress_vk_digest != recursion_vkey_hash { - return Err(MachineVerificationError::InvalidPublicValues( - "recursion vk hash mismatch", - )); - } + // // Verify that the reduce program is the one we are expecting. + // let recursion_vkey_hash = self.compress_vk().hash_babybear(); + // if public_values.compress_vk_digest != recursion_vkey_hash { + // return Err(MachineVerificationError::InvalidPublicValues( + // "recursion vk hash mismatch", + // )); + // } Ok(()) } @@ -331,25 +328,25 @@ impl SP1Prover { proof: &SP1ReduceProof, vk: &SP1VerifyingKey, ) -> Result<(), MachineVerificationError> { - let mut challenger = self.shrink_prover.config().challenger(); - let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; - self.shrink_prover.machine().verify(self.shrink_vk(), &machine_proof, &mut challenger)?; - - // Validate public values - let public_values: &RecursionPublicValues<_> = - proof.proof.public_values.as_slice().borrow(); - - // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully - // reduced. - if public_values.is_complete != BabyBear::one() { - return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); - } - - // Verify that the proof is for the sp1 vkey we are expecting. - let vkey_hash = vk.hash_babybear(); - if public_values.sp1_vk_digest != vkey_hash { - return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); - } + // let mut challenger = self.shrink_prover.config().challenger(); + // let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; + // self.shrink_prover.machine().verify(self.shrink_vk(), &machine_proof, &mut challenger)?; + + // // Validate public values + // let public_values: &RecursionPublicValues<_> = + // proof.proof.public_values.as_slice().borrow(); + + // // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully + // // reduced. + // if public_values.is_complete != BabyBear::one() { + // return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); + // } + + // // Verify that the proof is for the sp1 vkey we are expecting. + // let vkey_hash = vk.hash_babybear(); + // if public_values.sp1_vk_digest != vkey_hash { + // return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); + // } Ok(()) } @@ -360,25 +357,25 @@ impl SP1Prover { proof: &SP1ReduceProof, vk: &SP1VerifyingKey, ) -> Result<(), MachineVerificationError> { - let mut challenger = self.wrap_prover.config().challenger(); - let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; - self.wrap_prover.machine().verify(self.wrap_vk(), &machine_proof, &mut challenger)?; - - // Validate public values - let public_values: &RecursionPublicValues<_> = - proof.proof.public_values.as_slice().borrow(); - - // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully - // reduced. - if public_values.is_complete != BabyBear::one() { - return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); - } - - // Verify that the proof is for the sp1 vkey we are expecting. - let vkey_hash = vk.hash_babybear(); - if public_values.sp1_vk_digest != vkey_hash { - return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); - } + // let mut challenger = self.wrap_prover.config().challenger(); + // let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; + // self.wrap_prover.machine().verify(self.wrap_vk(), &machine_proof, &mut challenger)?; + + // // Validate public values + // let public_values: &RecursionPublicValues<_> = + // proof.proof.public_values.as_slice().borrow(); + + // // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully + // // reduced. + // if public_values.is_complete != BabyBear::one() { + // return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); + // } + + // // Verify that the proof is for the sp1 vkey we are expecting. + // let vkey_hash = vk.hash_babybear(); + // if public_values.sp1_vk_digest != vkey_hash { + // return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); + // } Ok(()) } @@ -391,15 +388,15 @@ impl SP1Prover { public_values: &SP1PublicValues, build_dir: &Path, ) -> Result<()> { - let prover = PlonkBn254Prover::new(); + // let prover = PlonkBn254Prover::new(); - let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; - let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; + // let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; + // let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; - // Verify the proof with the corresponding public inputs. - prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); + // // Verify the proof with the corresponding public inputs. + // prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); - verify_plonk_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; + // verify_plonk_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; Ok(()) } @@ -412,15 +409,15 @@ impl SP1Prover { public_values: &SP1PublicValues, build_dir: &Path, ) -> Result<()> { - let prover = Groth16Bn254Prover::new(); + // let prover = Groth16Bn254Prover::new(); - let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; - let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; + // let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; + // let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; - // Verify the proof with the corresponding public inputs. - prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); + // // Verify the proof with the corresponding public inputs. + // prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); - verify_groth16_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; + // verify_groth16_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; Ok(()) } @@ -433,18 +430,18 @@ pub fn verify_plonk_bn254_public_inputs( public_values: &SP1PublicValues, plonk_bn254_public_inputs: &[String], ) -> Result<()> { - let expected_vk_hash = BigUint::from_str(&plonk_bn254_public_inputs[0])?; - let expected_public_values_hash = BigUint::from_str(&plonk_bn254_public_inputs[1])?; + // let expected_vk_hash = BigUint::from_str(&plonk_bn254_public_inputs[0])?; + // let expected_public_values_hash = BigUint::from_str(&plonk_bn254_public_inputs[1])?; - let vk_hash = vk.hash_bn254().as_canonical_biguint(); - if vk_hash != expected_vk_hash { - return Err(PlonkVerificationError::InvalidVerificationKey.into()); - } + // let vk_hash = vk.hash_bn254().as_canonical_biguint(); + // if vk_hash != expected_vk_hash { + // return Err(PlonkVerificationError::InvalidVerificationKey.into()); + // } - let public_values_hash = public_values.hash(); - if public_values_hash != expected_public_values_hash { - return Err(PlonkVerificationError::InvalidPublicValues.into()); - } + // let public_values_hash = public_values.hash(); + // if public_values_hash != expected_public_values_hash { + // return Err(PlonkVerificationError::InvalidPublicValues.into()); + // } Ok(()) } @@ -456,18 +453,18 @@ pub fn verify_groth16_bn254_public_inputs( public_values: &SP1PublicValues, groth16_bn254_public_inputs: &[String], ) -> Result<()> { - let expected_vk_hash = BigUint::from_str(&groth16_bn254_public_inputs[0])?; - let expected_public_values_hash = BigUint::from_str(&groth16_bn254_public_inputs[1])?; + // let expected_vk_hash = BigUint::from_str(&groth16_bn254_public_inputs[0])?; + // let expected_public_values_hash = BigUint::from_str(&groth16_bn254_public_inputs[1])?; - let vk_hash = vk.hash_bn254().as_canonical_biguint(); - if vk_hash != expected_vk_hash { - return Err(Groth16VerificationError::InvalidVerificationKey.into()); - } + // let vk_hash = vk.hash_bn254().as_canonical_biguint(); + // if vk_hash != expected_vk_hash { + // return Err(Groth16VerificationError::InvalidVerificationKey.into()); + // } - let public_values_hash = public_values.hash(); - if public_values_hash != expected_public_values_hash { - return Err(Groth16VerificationError::InvalidPublicValues.into()); - } + // let public_values_hash = public_values.hash(); + // if public_values_hash != expected_public_values_hash { + // return Err(Groth16VerificationError::InvalidPublicValues.into()); + // } Ok(()) } @@ -480,26 +477,26 @@ impl SubproofVerifier for &SP1Prover { vk_hash: [u32; 8], committed_value_digest: [u32; 8], ) -> Result<(), MachineVerificationError> { - // Check that the vk hash matches the vk hash from the input. - if vk.hash_u32() != vk_hash { - return Err(MachineVerificationError::InvalidPublicValues( - "vk hash from syscall does not match vkey from input", - )); - } - // Check that proof is valid. - self.verify_compressed( - &SP1ReduceProof { proof: proof.clone() }, - &SP1VerifyingKey { vk: vk.clone() }, - )?; - // Check that the committed value digest matches the one from syscall - let public_values: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); - for (i, word) in public_values.committed_value_digest.iter().enumerate() { - if *word != committed_value_digest[i].into() { - return Err(MachineVerificationError::InvalidPublicValues( - "committed_value_digest does not match", - )); - } - } + // // Check that the vk hash matches the vk hash from the input. + // if vk.hash_u32() != vk_hash { + // return Err(MachineVerificationError::InvalidPublicValues( + // "vk hash from syscall does not match vkey from input", + // )); + // } + // // Check that proof is valid. + // self.verify_compressed( + // &SP1ReduceProof { proof: proof.clone() }, + // &SP1VerifyingKey { vk: vk.clone() }, + // )?; + // // Check that the committed value digest matches the one from syscall + // let public_values: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); + // for (i, word) in public_values.committed_value_digest.iter().enumerate() { + // if *word != committed_value_digest[i].into() { + // return Err(MachineVerificationError::InvalidPublicValues( + // "committed_value_digest does not match", + // )); + // } + // } Ok(()) } } diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index fee4f82cf5..9ba3244fa3 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -2,6 +2,7 @@ use std::{ array, borrow::{Borrow, BorrowMut}, marker::PhantomData, + mem::MaybeUninit, }; use itertools::{izip, Itertools}; @@ -88,8 +89,9 @@ where // Initialize the values for the aggregated public output. - let mut reduce_public_values_stream: Vec> = - (0..RECURSIVE_PROOF_NUM_PV_ELTS).map(|_| builder.uninit()).collect(); + let mut reduce_public_values_stream: Vec> = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + .map(|_| unsafe { MaybeUninit::zeroed().assume_init() }) + .collect(); let compress_public_values: &mut RecursionPublicValues<_> = reduce_public_values_stream.as_mut_slice().borrow_mut(); @@ -99,25 +101,30 @@ where assert!(!vks_and_proofs.is_empty()); // Initialize the consistency check variables. - let mut sp1_vk_digest: [Felt<_>; DIGEST_SIZE] = array::from_fn(|_| builder.uninit()); - let mut pc: Felt<_> = builder.uninit(); - let mut shard: Felt<_> = builder.uninit(); - let mut execution_shard: Felt<_> = builder.uninit(); + let mut sp1_vk_digest: [Felt<_>; DIGEST_SIZE] = + array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); + let mut pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + let mut shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + let mut execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; let mut initial_reconstruct_challenger_values: ChallengerPublicValues> = - uninit_challenger_pv(builder); + unsafe { uninit_challenger_pv(builder) }; let mut reconstruct_challenger_values: ChallengerPublicValues> = - uninit_challenger_pv(builder); + unsafe { uninit_challenger_pv(builder) }; let mut leaf_challenger_values: ChallengerPublicValues> = - uninit_challenger_pv(builder); + unsafe { uninit_challenger_pv(builder) }; let mut committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = - array::from_fn(|_| Word(array::from_fn(|_| builder.uninit()))); + array::from_fn(|_| { + Word(array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() })) + }); let mut deferred_proofs_digest: [Felt<_>; POSEIDON_NUM_WORDS] = - array::from_fn(|_| builder.uninit()); + array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); let mut reconstruct_deferred_digest: [Felt<_>; POSEIDON_NUM_WORDS] = - core::array::from_fn(|_| builder.uninit()); + core::array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); let mut cumulative_sum: [Felt<_>; D] = core::array::from_fn(|_| builder.eval(C::F::zero())); - let mut init_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); - let mut finalize_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| builder.uninit()); + let mut init_addr_bits: [Felt<_>; 32] = + core::array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); + let mut finalize_addr_bits: [Felt<_>; 32] = + core::array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); // Verify proofs, check consistency, and aggregate public values. for (i, (vk, shard_proof)) in vks_and_proofs.into_iter().enumerate() { @@ -163,20 +170,17 @@ where } // Initiallize start pc. - builder.assign(compress_public_values.start_pc, current_public_values.start_pc); - builder.assign(pc, current_public_values.start_pc); + compress_public_values.start_pc = current_public_values.start_pc; + pc = current_public_values.start_pc; // Initialize start shard. - builder.assign(shard, current_public_values.start_shard); - builder - .assign(compress_public_values.start_shard, current_public_values.start_shard); + shard = current_public_values.start_shard; + compress_public_values.start_shard = current_public_values.start_shard; // Initialize start execution shard. - builder.assign(execution_shard, current_public_values.start_execution_shard); - builder.assign( - compress_public_values.start_execution_shard, - current_public_values.start_execution_shard, - ); + execution_shard = current_public_values.start_execution_shard; + compress_public_values.start_execution_shard = + current_public_values.start_execution_shard; // Initialize the MemoryInitialize address bits. for (bit, (first_bit, current_bit)) in init_addr_bits.iter_mut().zip( @@ -210,19 +214,19 @@ where // Assign the commited values and deferred proof digests. for (word, current_word) in committed_value_digest - .iter() + .iter_mut() .zip_eq(current_public_values.committed_value_digest.iter()) { - for (byte, current_byte) in word.0.iter().zip_eq(current_word.0.iter()) { - builder.assign(*byte, *current_byte); + for (byte, current_byte) in word.0.iter_mut().zip_eq(current_word.0.iter()) { + *byte = *current_byte; } } for (digest, current_digest) in deferred_proofs_digest - .iter() + .iter_mut() .zip_eq(current_public_values.deferred_proofs_digest.iter()) { - builder.assign(*digest, *current_digest); + *digest = *current_digest; } } @@ -458,6 +462,6 @@ where // }, // ); - commit_recursion_public_values(builder, compress_public_values); + commit_recursion_public_values(builder, *compress_public_values); } } diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 6a90d21227..5546d86bca 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -2,6 +2,7 @@ use std::{ array, borrow::{Borrow, BorrowMut}, marker::PhantomData, + mem::MaybeUninit, }; use itertools::Itertools; @@ -112,27 +113,29 @@ where } = input; // Initialize shard variables. - let mut initial_shard: Felt<_> = builder.uninit(); - let mut current_shard: Felt<_> = builder.uninit(); + let mut initial_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + let mut current_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; // Initialize execution shard variables. - let mut initial_execution_shard: Felt<_> = builder.uninit(); - let mut current_execution_shard: Felt<_> = builder.uninit(); + let mut initial_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + let mut current_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; // Initialize program counter variables. - let mut start_pc: Felt<_> = builder.uninit(); - let mut current_pc: Felt<_> = builder.uninit(); + let mut start_pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + let mut current_pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; // Initialize memory initialization and finalization variables. let mut initial_previous_init_addr_bits: [Felt<_>; 32] = - array::from_fn(|_| builder.uninit()); + unsafe { MaybeUninit::zeroed().assume_init() }; let mut initial_previous_finalize_addr_bits: [Felt<_>; 32] = - array::from_fn(|_| builder.uninit()); - let mut current_init_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); - let mut current_finalize_addr_bits: [Felt<_>; 32] = array::from_fn(|_| builder.uninit()); + unsafe { MaybeUninit::zeroed().assume_init() }; + let mut current_init_addr_bits: [Felt<_>; 32] = + unsafe { MaybeUninit::zeroed().assume_init() }; + let mut current_finalize_addr_bits: [Felt<_>; 32] = + unsafe { MaybeUninit::zeroed().assume_init() }; // Initialize the exit code variable. - let mut exit_code: Felt<_> = builder.uninit(); + let mut exit_code: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; // Initialize the public values digest. let mut committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS] = @@ -544,7 +547,7 @@ where // assert_complete(builder, recursion_public_values, &reconstruct_challenger) // }); - commit_recursion_public_values(builder, recursion_public_values); + commit_recursion_public_values(builder, *recursion_public_values); } } } diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs new file mode 100644 index 0000000000..31e2856d49 --- /dev/null +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -0,0 +1,7 @@ +pub struct SP1DeferredVerifier { + _phantom: std::marker::PhantomData<(C, SC, A)>, +} + +pub struct SP1DeferredWitnessValues { + _marker: std::marker::PhantomData, +} diff --git a/crates/recursion/circuit-v2/src/machine/mod.rs b/crates/recursion/circuit-v2/src/machine/mod.rs index 8de8ec4a0f..64b60d4b5a 100644 --- a/crates/recursion/circuit-v2/src/machine/mod.rs +++ b/crates/recursion/circuit-v2/src/machine/mod.rs @@ -1,10 +1,12 @@ mod compress; mod core; +mod deferred; mod witness; #[allow(unused_imports)] pub use compress::*; pub use core::*; +pub use deferred::*; #[allow(unused_imports)] pub use witness::*; diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 68e92cdb5b..f8df403372 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -212,17 +212,17 @@ where // Verify the shape of the opening arguments matches the expected values. Self::verify_opening_shape(chip, values).unwrap(); // Verify the constraint evaluation. - Self::verify_constraints( - builder, - chip, - values, - trace_domain, - qc_domains, - zeta, - alpha, - &permutation_challenges, - public_values, - ); + // Self::verify_constraints( + // builder, + // chip, + // values, + // trace_domain, + // qc_domains, + // zeta, + // alpha, + // &permutation_challenges, + // public_values, + // ); } builder.cycle_tracker_v2_exit(); } diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index 971c907bed..9977d82fd6 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -1,4 +1,4 @@ -use std::{array, borrow::BorrowMut}; +use std::{array, borrow::BorrowMut, mem::MaybeUninit}; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, @@ -11,33 +11,27 @@ use sp1_recursion_core_v2::air::{ /// Register and commits the recursion public values. pub fn commit_recursion_public_values( builder: &mut Builder, - public_values: &RecursionPublicValues>, + public_values: RecursionPublicValues>, ) { - let mut pv_elements: [Felt<_>; RECURSIVE_PROOF_NUM_PV_ELTS] = - core::array::from_fn(|_| builder.uninit()); - *pv_elements.as_mut_slice().borrow_mut() = *public_values; - let pv_elms_no_digest = &pv_elements[0..NUM_PV_ELMS_TO_HASH]; - - for value in pv_elms_no_digest.iter() { - builder.register_public_value(*value); - } - - // Hash the public values. - let pv_digest = builder.poseidon2_hash_v2(&pv_elements[0..NUM_PV_ELMS_TO_HASH]); - for element in pv_digest { - builder.commit_public_value(element); - } + builder.commit_public_values_v2(public_values); + // let mut pv_elements: [Felt<_>; RECURSIVE_PROOF_NUM_PV_ELTS] = + // core::array::from_fn(|_| builder.uninit()); + // *pv_elements.as_mut_slice().borrow_mut() = *public_values; + // let pv_elms_no_digest = &pv_elements[0..NUM_PV_ELMS_TO_HASH]; + + // for value in pv_elms_no_digest.iter() { + // builder.register_public_value(*value); + // } + + // // Hash the public values. + // let pv_digest = builder.poseidon2_hash_v2(&pv_elements[0..NUM_PV_ELMS_TO_HASH]); + // for element in pv_digest {} } -pub fn uninit_challenger_pv( +pub(crate) unsafe fn uninit_challenger_pv( builder: &mut Builder, ) -> ChallengerPublicValues> { - let sponge_state = array::from_fn(|_| builder.uninit()); - let num_inputs = builder.uninit(); - let input_buffer = array::from_fn(|_| builder.uninit()); - let num_outputs = builder.uninit(); - let output_buffer = array::from_fn(|_| builder.uninit()); - ChallengerPublicValues { sponge_state, num_inputs, input_buffer, num_outputs, output_buffer } + unsafe { MaybeUninit::zeroed().assume_init() } } #[cfg(any(test, feature = "export-tests"))] diff --git a/crates/recursion/core-v2/src/runtime/mod.rs b/crates/recursion/core-v2/src/runtime/mod.rs index 7b56a007db..7aa63d67d7 100644 --- a/crates/recursion/core-v2/src/runtime/mod.rs +++ b/crates/recursion/core-v2/src/runtime/mod.rs @@ -229,7 +229,7 @@ where fn nearest_pc_backtrace(&mut self) -> Option<(usize, Trace)> { let trap_pc = self.pc.as_canonical_u32() as usize; - let trace = self.program.traces[trap_pc].clone(); + let trace = self.program.traces.get(trap_pc).cloned()?; if let Some(mut trace) = trace { trace.resolve(); Some((trap_pc, trace)) From 5c55f1ce6543ee491fadca7d36f9550a129208ad Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 10:02:02 -0700 Subject: [PATCH 005/268] checkpoint --- crates/core/machine/src/utils/prove.rs | 4 ++++ crates/prover/Cargo.toml | 1 + crates/prover/src/lib.rs | 7 +++++++ crates/recursion/circuit-v2/src/stark.rs | 22 +++++++++++----------- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index ec15865f79..aad71b7743 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -653,6 +653,10 @@ where let prover = P::new(machine); let mut challenger = prover.config().challenger(); let prove_span = tracing::debug_span!("prove").entered(); + + #[cfg(feature = "debug")] + prover.machine().debug_constraints(&pk, records.clone(), &mut challenger.clone()); + let proof = prover.prove(&pk, records, &mut challenger, SP1CoreOpts::default()).unwrap(); prove_span.exit(); let nb_bytes = bincode::serialize(&proof).unwrap().len(); diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index a38eb211d8..19d1c3991c 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -61,3 +61,4 @@ path = "scripts/e2e.rs" neon = ["sp1-core-machine/neon"] native-gnark = ["sp1-recursion-gnark-ffi/native"] export-tests = [] +debug = ["sp1-core-machine/debug"] diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index dca1f97fa3..c1e03afbdb 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -530,6 +530,13 @@ impl SP1Prover { pk.observe_into(&mut challenger); }); + #[cfg(feature = "debug")] + self.compress_prover.debug_constraints( + &pk, + vec![record.clone()], + &mut challenger.clone(), + ); + // Commit to the record and traces. let data = tracing::debug_span!("commit") .in_scope(|| self.compress_prover.commit(record, traces)); diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index f8df403372..68e92cdb5b 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -212,17 +212,17 @@ where // Verify the shape of the opening arguments matches the expected values. Self::verify_opening_shape(chip, values).unwrap(); // Verify the constraint evaluation. - // Self::verify_constraints( - // builder, - // chip, - // values, - // trace_domain, - // qc_domains, - // zeta, - // alpha, - // &permutation_challenges, - // public_values, - // ); + Self::verify_constraints( + builder, + chip, + values, + trace_domain, + qc_domains, + zeta, + alpha, + &permutation_challenges, + public_values, + ); } builder.cycle_tracker_v2_exit(); } From 2ce25530e911f45a91554aef6159059036c3e9d8 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 10:03:51 -0700 Subject: [PATCH 006/268] checkpoint --- crates/recursion/circuit-v2/src/utils.rs | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index 9977d82fd6..50acd4784e 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -1,12 +1,10 @@ -use std::{array, borrow::BorrowMut, mem::MaybeUninit}; +use std::mem::MaybeUninit; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, ir::{Builder, Config, Felt}, }; -use sp1_recursion_core_v2::air::{ - ChallengerPublicValues, RecursionPublicValues, NUM_PV_ELMS_TO_HASH, RECURSIVE_PROOF_NUM_PV_ELTS, -}; +use sp1_recursion_core_v2::air::{ChallengerPublicValues, RecursionPublicValues}; /// Register and commits the recursion public values. pub fn commit_recursion_public_values( @@ -14,22 +12,10 @@ pub fn commit_recursion_public_values( public_values: RecursionPublicValues>, ) { builder.commit_public_values_v2(public_values); - // let mut pv_elements: [Felt<_>; RECURSIVE_PROOF_NUM_PV_ELTS] = - // core::array::from_fn(|_| builder.uninit()); - // *pv_elements.as_mut_slice().borrow_mut() = *public_values; - // let pv_elms_no_digest = &pv_elements[0..NUM_PV_ELMS_TO_HASH]; - - // for value in pv_elms_no_digest.iter() { - // builder.register_public_value(*value); - // } - - // // Hash the public values. - // let pv_digest = builder.poseidon2_hash_v2(&pv_elements[0..NUM_PV_ELMS_TO_HASH]); - // for element in pv_digest {} } pub(crate) unsafe fn uninit_challenger_pv( - builder: &mut Builder, + _builder: &mut Builder, ) -> ChallengerPublicValues> { unsafe { MaybeUninit::zeroed().assume_init() } } From 7a329136ee3b8530a23152577abafd73e1f48f79 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 11:04:22 -0700 Subject: [PATCH 007/268] fix generic --- crates/prover/src/lib.rs | 14 ++++++++++++++ crates/prover/src/types.rs | 2 +- crates/recursion/circuit-v2/src/witness.rs | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index c1e03afbdb..0061c04cb8 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -554,6 +554,20 @@ impl SP1Prover { self.compress_prover.open(&pk, data, &mut challenger).unwrap() }); + // Verify the proof. + + #[cfg(feature = "debug")] + self.compress_prover + .machine() + .verify( + &vk, + &sp1_stark::MachineProof { + shard_proofs: vec![proof.clone()], + }, + &mut self.compress_prover.config().challenger(), + ) + .unwrap(); + // Wait for our turn to update the state. prover_sync.wait_for_turn(index); diff --git a/crates/prover/src/types.rs b/crates/prover/src/types.rs index ab6eb3a1ec..dd4862c1b8 100644 --- a/crates/prover/src/types.rs +++ b/crates/prover/src/types.rs @@ -244,7 +244,7 @@ pub enum SP1RecursionProverError { #[allow(clippy::large_enum_variant)] pub enum SP1CircuitWitness { - Core(SP1RecursionWitnessValues), + Core(SP1RecursionWitnessValues), // Deferred(SP1DeferredMemoryLayout>), Compress(SP1CompressWitnessValues), } diff --git a/crates/recursion/circuit-v2/src/witness.rs b/crates/recursion/circuit-v2/src/witness.rs index ada041d851..1df65bc106 100644 --- a/crates/recursion/circuit-v2/src/witness.rs +++ b/crates/recursion/circuit-v2/src/witness.rs @@ -52,7 +52,7 @@ impl, U: Witnessable> Witnessable for (T, U) } fn write(&self) -> Vec> { - self.0.write().into_iter().chain(self.1.write()).collect() + [self.0.write(), self.1.write()].concat() } } From 4ba9e6efe1a8cea9cb03a6dd12f4e6ea85681ef1 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 13:35:33 -0700 Subject: [PATCH 008/268] fix multiplicity --- crates/recursion/compiler/src/circuit/compiler.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index f9546b19cd..2cb09265c1 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -313,6 +313,9 @@ impl AsmCompiler { &mut self, public_values: &RecursionPublicValues>, ) -> CompileOneItem { + public_values.digest.iter().for_each(|x| { + let _ = x.read(self); + }); let pv_addrs = unsafe { transmute::< @@ -320,7 +323,7 @@ impl AsmCompiler { [Felt; RECURSIVE_PROOF_NUM_PV_ELTS], >(*public_values) } - .map(|pv| pv.read(self)); + .map(|pv| pv.read_ghost(self)); let public_values_a: &RecursionPublicValues> = pv_addrs.as_slice().borrow(); Instruction::CommitPublicValues(CommitPublicValuesInstr { From 52e5d79480e03194881ec8edc56e8f1e0096104c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 13:51:06 -0700 Subject: [PATCH 009/268] checkpoint --- crates/prover/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 0061c04cb8..ab159d7a7d 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -556,7 +556,7 @@ impl SP1Prover { // Verify the proof. - #[cfg(feature = "debug")] + // #[cfg(feature = "debug")] self.compress_prover .machine() .verify( From 4c3cfa9843dc37896e23fca4a65b2aaabbc6b355 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 14:46:06 -0700 Subject: [PATCH 010/268] fix constraints --- crates/recursion/circuit-v2/src/machine/compress.rs | 2 ++ crates/recursion/circuit-v2/src/machine/core.rs | 2 ++ crates/recursion/circuit-v2/src/stark.rs | 7 ++++++- crates/recursion/core-v2/src/chips/alu_base.rs | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 9ba3244fa3..3d8c463fde 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -448,6 +448,8 @@ where compress_public_values.cumulative_sum = cumulative_sum; // Assign the `is_complete` flag. compress_public_values.is_complete = is_complete; + // TODO: set the digest according to the previous values. + compress_public_values.digest = array::from_fn(|_| builder.eval(C::F::zero())); // // If the proof is complete, make completeness assertions and set the flag. Otherwise, check // // the flag is zero and set the public value to zero. diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 5546d86bca..3984cfa0c2 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -537,6 +537,8 @@ where recursion_public_values.end_reconstruct_deferred_digest = end_deferred_digest; recursion_public_values.exit_code = exit_code; recursion_public_values.is_complete = is_complete; + // TODO: set the digest according to the previous values. + recursion_public_values.digest = array::from_fn(|_| builder.eval(C::F::zero())); // // If the proof represents a complete proof, make completeness assertions. // // diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 68e92cdb5b..ef3403eb26 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -6,7 +6,7 @@ use p3_matrix::dense::RowMajorMatrix; use p3_air::Air; use p3_baby_bear::BabyBear; use p3_commit::{Pcs, TwoAdicMultiplicativeCoset}; -use p3_field::TwoAdicField; +use p3_field::{AbstractField, TwoAdicField}; use sp1_stark::{ShardCommitment, ShardOpenedValues, Val}; use p3_commit::PolynomialSpace; @@ -204,11 +204,15 @@ where verify_two_adic_pcs::(builder, config, opening_proof, challenger, rounds); builder.cycle_tracker_v2_exit(); + let mut count = 0; // Verify the constrtaint evaluations. builder.cycle_tracker_v2_enter("stage-e-verify-constraints".to_string()); for (chip, trace_domain, qc_domains, values) in izip!(chips.iter(), trace_domains, quotient_chunk_domains, opened_values.chips.iter(),) { + println!("verify chip: {}", chip.name()); + let count_f: Felt<_> = builder.eval(C::F::from_canonical_usize(count)); + builder.print_f(count_f); // Verify the shape of the opening arguments matches the expected values. Self::verify_opening_shape(chip, values).unwrap(); // Verify the constraint evaluation. @@ -223,6 +227,7 @@ where &permutation_challenges, public_values, ); + count += 1; } builder.cycle_tracker_v2_exit(); } diff --git a/crates/recursion/core-v2/src/chips/alu_base.rs b/crates/recursion/core-v2/src/chips/alu_base.rs index fc3b3535e2..7272144b35 100644 --- a/crates/recursion/core-v2/src/chips/alu_base.rs +++ b/crates/recursion/core-v2/src/chips/alu_base.rs @@ -174,8 +174,8 @@ where builder.when(access.is_add).assert_eq(in1 + in2, out); builder.when(access.is_sub).assert_eq(in1, in2 + out); - builder.when(access.is_mul).assert_eq(in1 * in2, out); builder.when(access.is_div).assert_eq(in1, in2 * out); + builder.when(access.is_mul).assert_eq(out, in1 * in2); builder.receive_single(access.addrs.in1, in1, is_real.clone()); From b6bf38863715bbf31b05d54fa07a512dd78d0772 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 14:59:48 -0700 Subject: [PATCH 011/268] works --- crates/recursion/circuit-v2/src/stark.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index ef3403eb26..4fe97c4011 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -204,15 +204,11 @@ where verify_two_adic_pcs::(builder, config, opening_proof, challenger, rounds); builder.cycle_tracker_v2_exit(); - let mut count = 0; // Verify the constrtaint evaluations. builder.cycle_tracker_v2_enter("stage-e-verify-constraints".to_string()); for (chip, trace_domain, qc_domains, values) in izip!(chips.iter(), trace_domains, quotient_chunk_domains, opened_values.chips.iter(),) { - println!("verify chip: {}", chip.name()); - let count_f: Felt<_> = builder.eval(C::F::from_canonical_usize(count)); - builder.print_f(count_f); // Verify the shape of the opening arguments matches the expected values. Self::verify_opening_shape(chip, values).unwrap(); // Verify the constraint evaluation. @@ -227,7 +223,6 @@ where &permutation_challenges, public_values, ); - count += 1; } builder.cycle_tracker_v2_exit(); } From 2ab367bffb621a518457406119061a309b072108 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 16:12:04 -0700 Subject: [PATCH 012/268] some opts --- crates/prover/src/lib.rs | 26 +++- crates/recursion/circuit-v2/src/fri.rs | 130 +++++++++--------- .../circuit-v2/src/machine/compress.rs | 2 + .../recursion/circuit-v2/src/machine/core.rs | 2 + crates/recursion/circuit-v2/src/stark.rs | 4 + 5 files changed, 94 insertions(+), 70 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index ab159d7a7d..047a743858 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -207,14 +207,23 @@ impl SP1Prover { // Compile the program. // Get the operations. + let operations_span = + tracing::debug_span!("Get operations for the recursion program").entered(); let mut builder = Builder::::default(); + let input_read_span = tracing::debug_span!("Read input values").entered(); let input = input.read(&mut builder); + input_read_span.exit(); + let verify_span = tracing::debug_span!("Verify recursion program").entered(); SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); + verify_span.exit(); let operations = builder.operations; + operations_span.exit(); // Compile the program. - let mut compiler = AsmCompiler::::default(); - Arc::new(compiler.compile(operations)) + tracing::debug_span!("Compile recursion program").in_scope(|| { + let mut compiler = AsmCompiler::::default(); + Arc::new(compiler.compile(operations)) + }) } pub fn compress_program( @@ -224,14 +233,23 @@ impl SP1Prover { // Compile the program. // Get the operations. + let operations_span = + tracing::debug_span!("Get operations for the compress program").entered(); let mut builder = Builder::::default(); + let input_read_span = tracing::debug_span!("Read input values").entered(); let input = input.read(&mut builder); + input_read_span.exit(); + let verify_span = tracing::debug_span!("Verify compress program").entered(); SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); + verify_span.exit(); let operations = builder.operations; + operations_span.exit(); // Compile the program. - let mut compiler = AsmCompiler::::default(); - Arc::new(compiler.compile(operations)) + tracing::debug_span!("Compile compress program").in_scope(|| { + let mut compiler = AsmCompiler::::default(); + Arc::new(compiler.compile(operations)) + }) } pub fn get_recursion_core_inputs( diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index dc3d995386..6d01237fd0 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -67,6 +67,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let log_global_max_height = proof.fri_proof.commit_phase_commits.len() + config.log_blowup; + let reduced_openings_span = tracing::debug_span!("Compute reduced openings").entered(); let reduced_openings = proof .query_openings .iter() @@ -77,15 +78,11 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let mut ro: [Ext; 32] = [builder.eval(SymbolicExt::from_f(C::EF::zero())); 32]; - for (batch_opening, round) in zip(query_opening, rounds.iter().cloned()) { + for (batch_opening, round) in zip(query_opening, rounds.iter()) { let batch_commit = round.batch_commit; - let mats = round.domains_points_and_opens; + let mats = &round.domains_points_and_opens; let batch_heights = mats.iter().map(|mat| mat.domain.size() << config.log_blowup).collect_vec(); - let batch_dims = batch_heights - .iter() - .map(|&height| Dimensions { width: 0, height }) - .collect_vec(); let batch_max_height = batch_heights.iter().max().expect("Empty batch?"); let log_batch_max_height = log2_strict_usize(*batch_max_height); @@ -96,16 +93,14 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV verify_batch::( builder, batch_commit, - batch_dims, + &batch_heights, reduced_index_bits, batch_opening.opened_values.clone(), batch_opening.opening_proof.clone(), ); - for (mat_opening, mat) in izip!(&batch_opening.opened_values, mats) { + for (mat_opening, mat) in izip!(batch_opening.opened_values.iter(), mats) { let mat_domain = mat.domain; - let mat_points = mat.points; - let mat_values = mat.values; let log_height = log2_strict_usize(mat_domain.size()) + config.log_blowup; let bits_reduced = log_global_max_height - log_height; @@ -119,10 +114,10 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV C::exp_reverse_bits(builder, two_adic_generator, reduced_index_bits_trunc); let x: Felt<_> = builder.eval(g * two_adic_generator_exp); - for (z, ps_at_z) in izip!(&mat_points, mat_values) { + for (z, ps_at_z) in izip!(mat.points.iter(), mat.values.iter()) { let mut acc: Ext = builder.eval(SymbolicExt::from_f(C::EF::zero())); - for (p_at_x, &p_at_z) in mat_opening.clone().into_iter().zip(&ps_at_z) { + for (p_at_x, &p_at_z) in mat_opening.iter().zip(ps_at_z) { acc = builder.eval(acc + (alpha_pows[log_height] * (p_at_z - p_at_x[0]))); alpha_pows[log_height] = builder.eval(alpha_pows[log_height] * alpha); @@ -134,7 +129,9 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV ro }) .collect::>(); + reduced_openings_span.exit(); + let verify_challenges_span = tracing::debug_span!("Verify challenges").entered(); verify_challenges::( builder, config, @@ -142,6 +139,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV &fri_challenges, reduced_openings, ); + verify_challenges_span.exit(); } pub fn verify_challenges, SC: BabyBearFriConfigVariable>( @@ -209,11 +207,11 @@ pub fn verify_query, SC: BabyBearFriConfigVariable C::ext2felt(builder, evals_ext[1]).to_vec(), ]; - let dims = &[Dimensions { width: 2, height: (1 << log_folded_height) }]; + let heights = &[1 << log_folded_height]; verify_batch::( builder, commit, - dims.to_vec(), + heights, index_pair.to_vec(), [evals_felt].to_vec(), step.opening_proof.clone(), @@ -232,18 +230,18 @@ pub fn verify_query, SC: BabyBearFriConfigVariable pub fn verify_batch, SC: BabyBearFriConfigVariable>( builder: &mut Builder, commit: SC::Digest, - dimensions: Vec, + heights: &[usize], index_bits: Vec, opened_values: Vec>>>, proof: Vec, ) { let mut heights_tallest_first = - dimensions.iter().enumerate().sorted_by_key(|(_, dims)| Reverse(dims.height)).peekable(); + heights.iter().enumerate().sorted_by_key(|(_, height)| Reverse(*height)).peekable(); - let mut curr_height_padded = heights_tallest_first.peek().unwrap().1.height.next_power_of_two(); + let mut curr_height_padded = heights_tallest_first.peek().unwrap().1.next_power_of_two(); let ext_slice: Vec>> = heights_tallest_first - .peeking_take_while(|(_, dims)| dims.height.next_power_of_two() == curr_height_padded) + .peeking_take_while(|(_, height)| height.next_power_of_two() == curr_height_padded) .flat_map(|(i, _)| opened_values[i].as_slice()) .cloned() .collect::>(); @@ -259,12 +257,12 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable let next_height = heights_tallest_first .peek() - .map(|(_, dims)| dims.height) + .map(|(_, height)| *height) .filter(|h| h.next_power_of_two() == curr_height_padded); if let Some(next_height) = next_height { let ext_slice: Vec>> = heights_tallest_first - .peeking_take_while(|(_, dims)| dims.height == next_height) + .peeking_take_while(|(_, height)| *height == next_height) .flat_map(|(i, _)| opened_values[i].as_slice()) .cloned() .collect::>(); @@ -423,52 +421,52 @@ mod tests { (commit, vec![TwoAdicPcsRoundVariable { batch_commit: commit, domains_points_and_opens }]) } - /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/merkle-tree/src/mmcs.rs#L421 - #[test] - fn size_gaps() { - use p3_commit::Mmcs; - let perm = inner_perm(); - let hash = InnerHash::new(perm.clone()); - let compress = InnerCompress::new(perm); - let mmcs = InnerValMmcs::new(hash, compress); - - let mut builder = Builder::::default(); - - // 4 mats with 1000 rows, 8 columns - let large_mats = (0..4).map(|_| RowMajorMatrix::::rand(&mut OsRng, 1000, 8)); - let large_mat_dims = (0..4).map(|_| Dimensions { height: 1000, width: 8 }); - - // 5 mats with 70 rows, 8 columns - let medium_mats = (0..5).map(|_| RowMajorMatrix::::rand(&mut OsRng, 70, 8)); - let medium_mat_dims = (0..5).map(|_| Dimensions { height: 70, width: 8 }); - - // 6 mats with 8 rows, 8 columns - let small_mats = (0..6).map(|_| RowMajorMatrix::::rand(&mut OsRng, 8, 8)); - let small_mat_dims = (0..6).map(|_| Dimensions { height: 8, width: 8 }); - - let (commit, prover_data) = - mmcs.commit(large_mats.chain(medium_mats).chain(small_mats).collect_vec()); - - let commit: [_; DIGEST_SIZE] = commit.into(); - let commit = commit.map(|x| builder.eval(x)); - // open the 6th row of each matrix and verify - let (opened_values, proof) = mmcs.open_batch(6, &prover_data); - let opened_values = opened_values - .into_iter() - .map(|x| x.into_iter().map(|y| vec![builder.eval::, _>(y)]).collect()) - .collect(); - let index = builder.eval(F::from_canonical_u32(6)); - let index_bits = C::num2bits(&mut builder, index, 32); - let proof = proof.into_iter().map(|p| p.map(|x| builder.eval(x))).collect(); - verify_batch::<_, SC>( - &mut builder, - commit, - large_mat_dims.chain(medium_mat_dims).chain(small_mat_dims).collect_vec(), - index_bits, - opened_values, - proof, - ); - } + // /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/merkle-tree/src/mmcs.rs#L421 + // #[test] + // fn size_gaps() { + // use p3_commit::Mmcs; + // let perm = inner_perm(); + // let hash = InnerHash::new(perm.clone()); + // let compress = InnerCompress::new(perm); + // let mmcs = InnerValMmcs::new(hash, compress); + + // let mut builder = Builder::::default(); + + // // 4 mats with 1000 rows, 8 columns + // let large_mats = (0..4).map(|_| RowMajorMatrix::::rand(&mut OsRng, 1000, 8)); + // let large_mat_dims = (0..4).map(|_| Dimensions { height: 1000, width: 8 }); + + // // 5 mats with 70 rows, 8 columns + // let medium_mats = (0..5).map(|_| RowMajorMatrix::::rand(&mut OsRng, 70, 8)); + // let medium_mat_dims = (0..5).map(|_| Dimensions { height: 70, width: 8 }); + + // // 6 mats with 8 rows, 8 columns + // let small_mats = (0..6).map(|_| RowMajorMatrix::::rand(&mut OsRng, 8, 8)); + // let small_mat_dims = (0..6).map(|_| Dimensions { height: 8, width: 8 }); + + // let (commit, prover_data) = + // mmcs.commit(large_mats.chain(medium_mats).chain(small_mats).collect_vec()); + + // let commit: [_; DIGEST_SIZE] = commit.into(); + // let commit = commit.map(|x| builder.eval(x)); + // // open the 6th row of each matrix and verify + // let (opened_values, proof) = mmcs.open_batch(6, &prover_data); + // let opened_values = opened_values + // .into_iter() + // .map(|x| x.into_iter().map(|y| vec![builder.eval::, _>(y)]).collect()) + // .collect(); + // let index = builder.eval(F::from_canonical_u32(6)); + // let index_bits = C::num2bits(&mut builder, index, 32); + // let proof = proof.into_iter().map(|p| p.map(|x| builder.eval(x))).collect(); + // verify_batch::<_, SC>( + // &mut builder, + // commit, + // large_mat_dims.chain(medium_mat_dims).chain(small_mat_dims).collect_vec(), + // index_bits, + // opened_values, + // proof, + // ); + // } #[test] fn test_fri_verify_shape_and_sample_challenges() { diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 3d8c463fde..8db0e65899 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -143,7 +143,9 @@ where builder, shard_proof.public_values[0..machine.num_pv_elts()].iter().copied(), ); + let verify_shard_span = tracing::debug_span!("Verify operations shard").entered(); StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); + verify_shard_span.exit(); // Get the current public values. let current_public_values: &RecursionPublicValues> = diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 3984cfa0c2..9f35d0bb51 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -237,7 +237,9 @@ where // Do not verify the cumulative sum here, since the permutation challenge is shared // between all shards. let mut challenger = leaf_challenger.copy(builder); + let verify_shard_span = tracing::debug_span!("Verify operations shard").entered(); StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); + verify_shard_span.exit(); // // First shard has a "CPU" constraint. // { diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 4fe97c4011..f47ca3aee4 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -201,10 +201,13 @@ where // Verify the pcs proof builder.cycle_tracker_v2_enter("stage-d-verify-pcs".to_string()); let config = machine.config().fri_config(); + let verify_pcs_span = tracing::debug_span!("Verify PCS proof, operations").entered(); verify_two_adic_pcs::(builder, config, opening_proof, challenger, rounds); + verify_pcs_span.exit(); builder.cycle_tracker_v2_exit(); // Verify the constrtaint evaluations. + let verify_constraints_span = tracing::debug_span!("Verify constraints").entered(); builder.cycle_tracker_v2_enter("stage-e-verify-constraints".to_string()); for (chip, trace_domain, qc_domains, values) in izip!(chips.iter(), trace_domains, quotient_chunk_domains, opened_values.chips.iter(),) @@ -224,6 +227,7 @@ where public_values, ); } + verify_constraints_span.exit(); builder.cycle_tracker_v2_exit(); } } From f503e4cb3c3e6e449d7c6e8db21ec0a47c54deb8 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 16:39:49 -0700 Subject: [PATCH 013/268] copy --- crates/recursion/circuit-v2/src/fri.rs | 17 ++++++++--------- crates/recursion/circuit-v2/src/lib.rs | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 6d01237fd0..aa41f1b7fc 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -6,6 +6,7 @@ use p3_fri::FriConfig; use p3_matrix::Dimensions; use p3_util::log2_strict_usize; use sp1_recursion_compiler::ir::{Builder, Felt, SymbolicExt, SymbolicFelt}; +use sp1_recursion_core_v2::chips::exp_reverse_bits; use std::{ cmp::Reverse, iter::{once, repeat_with, zip}, @@ -88,7 +89,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let log_batch_max_height = log2_strict_usize(*batch_max_height); let bits_reduced = log_global_max_height - log_batch_max_height; - let reduced_index_bits = index_bits[bits_reduced..].to_vec(); + let reduced_index_bits = &index_bits[bits_reduced..]; verify_batch::( builder, @@ -192,13 +193,12 @@ pub fn verify_query, SC: BabyBearFriConfigVariable ) { folded_eval = builder.eval(folded_eval + reduced_openings[log_folded_height + 1]); - let index_sibling_complement: C::Bit = index_bits[offset].clone(); - // let index_sibling_complement: Felt<_> = builder.constant(C::F::one()); + let index_sibling_complement: C::Bit = index_bits[offset]; let index_pair = &index_bits[(offset + 1)..]; let evals_ext = C::select_chain_ef( builder, - index_sibling_complement.clone(), + index_sibling_complement, once(folded_eval), once(step.sibling_value), ); @@ -212,7 +212,7 @@ pub fn verify_query, SC: BabyBearFriConfigVariable builder, commit, heights, - index_pair.to_vec(), + index_pair, [evals_felt].to_vec(), step.opening_proof.clone(), ); @@ -231,7 +231,7 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable builder: &mut Builder, commit: SC::Digest, heights: &[usize], - index_bits: Vec, + index_bits: &[C::Bit], opened_values: Vec>>>, proof: Vec, ) { @@ -245,11 +245,10 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable .flat_map(|(i, _)| opened_values[i].as_slice()) .cloned() .collect::>(); - let felt_slice: Vec> = - ext_slice.iter().flat_map(|ext| ext.as_slice()).cloned().collect::>(); + let felt_slice: Vec> = ext_slice.into_iter().flatten().collect::>(); let mut root: SC::Digest = SC::hash(builder, &felt_slice[..]); - zip(index_bits, proof).for_each(|(bit, sibling): (C::Bit, SC::Digest)| { + zip(index_bits.iter(), proof).for_each(|(&bit, sibling): (&C::Bit, SC::Digest)| { let compress_args = SC::select_chain_digest(builder, bit, [root, sibling]); root = SC::compress(builder, compress_args); diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 25e75fd02e..caad7e2d35 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -93,7 +93,7 @@ pub trait BabyBearFriConfigVariable>: } pub trait CircuitConfig: Config { - type Bit: Clone + Variable; + type Bit: Clone + Copy + Variable; type BitExpression: AbstractField + Mul< as Variable>::Expression, From cb4dfdd54a0df9f8aff8ffe730687f67a2f60fc9 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 16:57:25 -0700 Subject: [PATCH 014/268] checkpoint --- crates/recursion/circuit-v2/src/fri.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index aa41f1b7fc..45c3bc2696 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -5,7 +5,7 @@ use p3_field::{AbstractField, TwoAdicField}; use p3_fri::FriConfig; use p3_matrix::Dimensions; use p3_util::log2_strict_usize; -use sp1_recursion_compiler::ir::{Builder, Felt, SymbolicExt, SymbolicFelt}; +use sp1_recursion_compiler::ir::{Builder, CircuitV2FriFoldInput, Felt, SymbolicExt, SymbolicFelt}; use sp1_recursion_core_v2::chips::exp_reverse_bits; use std::{ cmp::Reverse, @@ -116,6 +116,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let x: Felt<_> = builder.eval(g * two_adic_generator_exp); for (z, ps_at_z) in izip!(mat.points.iter(), mat.values.iter()) { + // Unrolling the following code to avoid symbolic expression calculations. let mut acc: Ext = builder.eval(SymbolicExt::from_f(C::EF::zero())); for (p_at_x, &p_at_z) in mat_opening.iter().zip(ps_at_z) { @@ -124,6 +125,9 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV alpha_pows[log_height] = builder.eval(alpha_pows[log_height] * alpha); } ro[log_height] = builder.eval(ro[log_height] + acc / (*z - x)); + + // First, initialize a zero accumulator. + // let mut acc: Ext = builder.uninit(); } } } From 7c3535669cef9067475bde5cdd70a250efcddb82 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 17:43:56 -0700 Subject: [PATCH 015/268] unroll fri-fold --- crates/recursion/circuit-v2/src/fri.rs | 63 ++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 45c3bc2696..1ea0599f9a 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -5,7 +5,9 @@ use p3_field::{AbstractField, TwoAdicField}; use p3_fri::FriConfig; use p3_matrix::Dimensions; use p3_util::log2_strict_usize; -use sp1_recursion_compiler::ir::{Builder, CircuitV2FriFoldInput, Felt, SymbolicExt, SymbolicFelt}; +use sp1_recursion_compiler::ir::{ + Builder, CircuitV2FriFoldInput, DslIr, Felt, SymbolicExt, SymbolicFelt, +}; use sp1_recursion_core_v2::chips::exp_reverse_bits; use std::{ cmp::Reverse, @@ -117,17 +119,60 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV for (z, ps_at_z) in izip!(mat.points.iter(), mat.values.iter()) { // Unrolling the following code to avoid symbolic expression calculations. - let mut acc: Ext = - builder.eval(SymbolicExt::from_f(C::EF::zero())); + // let mut acc: Ext = + // builder.eval(SymbolicExt::from_f(C::EF::zero())); + // for (p_at_x, &p_at_z) in mat_opening.iter().zip(ps_at_z) { + // acc = + // builder.eval(acc + (alpha_pows[log_height] * (p_at_z - p_at_x[0]))); + // alpha_pows[log_height] = builder.eval(alpha_pows[log_height] * alpha); + // } + // ro[log_height] = builder.eval(ro[log_height] + acc / (*z - x)); + + // let acc = C::EF::zero(); + let mut acc: Ext = builder.uninit(); + builder.operations.push(DslIr::ImmE(acc, C::EF::zero())); + for (p_at_x, &p_at_z) in mat_opening.iter().zip(ps_at_z) { - acc = - builder.eval(acc + (alpha_pows[log_height] * (p_at_z - p_at_x[0]))); - alpha_pows[log_height] = builder.eval(alpha_pows[log_height] * alpha); + // let temp_1 = p_at_z - p_at_x[0]; + let temp_1: Ext = builder.uninit(); + builder.operations.push(DslIr::SubEF(temp_1, p_at_z, p_at_x[0])); + + // let temp_2 = alpha_pows[log_height] * temp_1; + let temp_2: Ext = builder.uninit(); + builder.operations.push(DslIr::MulE( + temp_2, + alpha_pows[log_height], + temp_1, + )); + + // temp_3 = acc + temp_2; + let temp_3: Ext = builder.uninit(); + builder.operations.push(DslIr::AddE(temp_3, acc, temp_2)); + // acc = temp_3; + acc = temp_3; + + // let temp_4 = alpha_pows[log_height] * alpha; + let temp_4: Ext = builder.uninit(); + builder.operations.push(DslIr::MulE( + temp_4, + alpha_pows[log_height], + alpha, + )); + // alpha_pows[log_height] = temp_4; + alpha_pows[log_height] = temp_4; } - ro[log_height] = builder.eval(ro[log_height] + acc / (*z - x)); - // First, initialize a zero accumulator. - // let mut acc: Ext = builder.uninit(); + // let temp_1 = z - x; + let temp_1: Ext = builder.uninit(); + builder.operations.push(DslIr::SubEF(temp_1, *z, x)); + // let temp_2 = acc / temp_1; + let temp_2: Ext = builder.uninit(); + builder.operations.push(DslIr::DivE(temp_2, acc, temp_1)); + // let temp_3 = ro[log_height] + temp_2; + let temp_3: Ext = builder.uninit(); + builder.operations.push(DslIr::AddE(temp_3, ro[log_height], temp_2)); + // ro[log_height] = temp_3; + ro[log_height] = temp_3; } } } From 3ac3cba597bcda93c54d41f34f56ffed448e347a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 18:05:08 -0700 Subject: [PATCH 016/268] checkpoint --- crates/recursion/circuit-v2/src/fri.rs | 50 +++++++++++++++++++++----- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 1ea0599f9a..0319cd7754 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -205,10 +205,10 @@ pub fn verify_challenges, SC: BabyBearFriConfigVar { let folded_eval = verify_query::( builder, - proof.commit_phase_commits.clone(), + &proof.commit_phase_commits, index_bits, query_proof.clone(), - challenges.betas.clone(), + &challenges.betas, ro, log_max_height, ); @@ -219,10 +219,10 @@ pub fn verify_challenges, SC: BabyBearFriConfigVar pub fn verify_query, SC: BabyBearFriConfigVariable>( builder: &mut Builder, - commit_phase_commits: Vec, + commit_phase_commits: &[SC::Digest], index_bits: &[C::Bit], proof: FriQueryProofVariable, - betas: Vec>, + betas: &[Ext], reduced_openings: [Ext; 32], log_max_height: usize, ) -> Ext { @@ -259,7 +259,7 @@ pub fn verify_query, SC: BabyBearFriConfigVariable let heights = &[1 << log_folded_height]; verify_batch::( builder, - commit, + *commit, heights, index_pair, [evals_felt].to_vec(), @@ -268,9 +268,43 @@ pub fn verify_query, SC: BabyBearFriConfigVariable let xs_new: Ext<_, _> = builder.eval(x * C::EF::two_adic_generator(1)); let xs = C::select_chain_ef(builder, index_sibling_complement, once(x), once(xs_new)); - folded_eval = builder - .eval(evals_ext[0] + (beta - xs[0]) * (evals_ext[1] - evals_ext[0]) / (xs[1] - xs[0])); - x = builder.eval(x * x); + + // Unroll the `folded_eval` calculation to avoid symbolic expression overhead. + // folded_eval = builder + // .eval(evals_ext[0] + (beta - xs[0]) * (evals_ext[1] - evals_ext[0]) / (xs[1] - xs[0])); + // x = builder.eval(x * x); + + // let temp_1 = xs[1] - xs[0]; + let temp_1: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::SubE(temp_1, xs[1], xs[0])); + + // let temp_2 = evals_ext[1] - evals_ext[0]; + let temp_2: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::SubE(temp_2, evals_ext[1], evals_ext[0])); + + // let temp_3 = temp_2 / temp_1; + let temp_3: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::DivE(temp_3, temp_2, temp_1)); + + // let temp_4 = beta - xs[0]; + let temp_4: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::SubE(temp_4, *beta, xs[0])); + + // let temp_5 = temp_4 * temp_3; + let temp_5: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::MulE(temp_5, temp_4, temp_3)); + + // let temp65 = evals_ext[0] + temp_5; + let temp_6: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::AddE(temp_6, evals_ext[0], temp_5)); + // folded_eval = temp_6; + folded_eval = temp_6; + + // let temp_7 = x * x; + let temp_7: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::MulE(temp_7, x, x)); + // x = temp_7; + x = temp_7; } folded_eval From 5ebc483e7d41197308995c7f47511b7be8c94f10 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 18:20:08 -0700 Subject: [PATCH 017/268] less clone --- crates/recursion/circuit-v2/src/fri.rs | 20 +++++++------------- crates/recursion/circuit-v2/src/stark.rs | 2 +- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 0319cd7754..52c2c2680a 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -3,12 +3,8 @@ use p3_baby_bear::BabyBear; use p3_commit::PolynomialSpace; use p3_field::{AbstractField, TwoAdicField}; use p3_fri::FriConfig; -use p3_matrix::Dimensions; use p3_util::log2_strict_usize; -use sp1_recursion_compiler::ir::{ - Builder, CircuitV2FriFoldInput, DslIr, Felt, SymbolicExt, SymbolicFelt, -}; -use sp1_recursion_core_v2::chips::exp_reverse_bits; +use sp1_recursion_compiler::ir::{Builder, DslIr, Felt, SymbolicExt, SymbolicFelt}; use std::{ cmp::Reverse, iter::{once, repeat_with, zip}, @@ -185,7 +181,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV verify_challenges::( builder, config, - &proof.fri_proof, + proof.fri_proof.clone(), &fri_challenges, reduced_openings, ); @@ -195,19 +191,19 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV pub fn verify_challenges, SC: BabyBearFriConfigVariable>( builder: &mut Builder, config: &FriConfig>, - proof: &FriProofVariable, + proof: FriProofVariable, challenges: &FriChallenges, reduced_openings: Vec<[Ext; 32]>, ) { let log_max_height = proof.commit_phase_commits.len() + config.log_blowup; for ((index_bits, query_proof), ro) in - challenges.query_indices.iter().zip(&proof.query_proofs).zip(reduced_openings) + challenges.query_indices.iter().zip(proof.query_proofs).zip(reduced_openings) { let folded_eval = verify_query::( builder, &proof.commit_phase_commits, index_bits, - query_proof.clone(), + query_proof, &challenges.betas, ro, log_max_height, @@ -345,11 +341,9 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable if let Some(next_height) = next_height { let ext_slice: Vec>> = heights_tallest_first .peeking_take_while(|(_, height)| *height == next_height) - .flat_map(|(i, _)| opened_values[i].as_slice()) - .cloned() + .flat_map(|(i, _)| opened_values[i].clone()) .collect::>(); - let felt_slice: Vec> = - ext_slice.iter().flat_map(|ext| ext.as_slice()).cloned().collect::>(); + let felt_slice: Vec> = ext_slice.into_iter().flatten().collect::>(); let next_height_openings_digest = SC::hash(builder, &felt_slice); root = SC::compress(builder, [root, next_height_openings_digest]); } diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index f47ca3aee4..4b1c8b289f 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -6,7 +6,7 @@ use p3_matrix::dense::RowMajorMatrix; use p3_air::Air; use p3_baby_bear::BabyBear; use p3_commit::{Pcs, TwoAdicMultiplicativeCoset}; -use p3_field::{AbstractField, TwoAdicField}; +use p3_field::TwoAdicField; use sp1_stark::{ShardCommitment, ShardOpenedValues, Val}; use p3_commit::PolynomialSpace; From b7c2056a352c7ba3a9aec07f9b6bf6b4bbb5f7ee Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 18:28:23 -0700 Subject: [PATCH 018/268] fix test --- crates/recursion/circuit-v2/src/fri.rs | 92 +++++++++++++------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 52c2c2680a..9128ee76ac 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -497,52 +497,52 @@ mod tests { (commit, vec![TwoAdicPcsRoundVariable { batch_commit: commit, domains_points_and_opens }]) } - // /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/merkle-tree/src/mmcs.rs#L421 - // #[test] - // fn size_gaps() { - // use p3_commit::Mmcs; - // let perm = inner_perm(); - // let hash = InnerHash::new(perm.clone()); - // let compress = InnerCompress::new(perm); - // let mmcs = InnerValMmcs::new(hash, compress); - - // let mut builder = Builder::::default(); - - // // 4 mats with 1000 rows, 8 columns - // let large_mats = (0..4).map(|_| RowMajorMatrix::::rand(&mut OsRng, 1000, 8)); - // let large_mat_dims = (0..4).map(|_| Dimensions { height: 1000, width: 8 }); - - // // 5 mats with 70 rows, 8 columns - // let medium_mats = (0..5).map(|_| RowMajorMatrix::::rand(&mut OsRng, 70, 8)); - // let medium_mat_dims = (0..5).map(|_| Dimensions { height: 70, width: 8 }); - - // // 6 mats with 8 rows, 8 columns - // let small_mats = (0..6).map(|_| RowMajorMatrix::::rand(&mut OsRng, 8, 8)); - // let small_mat_dims = (0..6).map(|_| Dimensions { height: 8, width: 8 }); - - // let (commit, prover_data) = - // mmcs.commit(large_mats.chain(medium_mats).chain(small_mats).collect_vec()); - - // let commit: [_; DIGEST_SIZE] = commit.into(); - // let commit = commit.map(|x| builder.eval(x)); - // // open the 6th row of each matrix and verify - // let (opened_values, proof) = mmcs.open_batch(6, &prover_data); - // let opened_values = opened_values - // .into_iter() - // .map(|x| x.into_iter().map(|y| vec![builder.eval::, _>(y)]).collect()) - // .collect(); - // let index = builder.eval(F::from_canonical_u32(6)); - // let index_bits = C::num2bits(&mut builder, index, 32); - // let proof = proof.into_iter().map(|p| p.map(|x| builder.eval(x))).collect(); - // verify_batch::<_, SC>( - // &mut builder, - // commit, - // large_mat_dims.chain(medium_mat_dims).chain(small_mat_dims).collect_vec(), - // index_bits, - // opened_values, - // proof, - // ); - // } + /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/merkle-tree/src/mmcs.rs#L421 + #[test] + fn size_gaps() { + use p3_commit::Mmcs; + let perm = inner_perm(); + let hash = InnerHash::new(perm.clone()); + let compress = InnerCompress::new(perm); + let mmcs = InnerValMmcs::new(hash, compress); + + let mut builder = Builder::::default(); + + // 4 mats with 1000 rows, 8 columns + let large_mats = (0..4).map(|_| RowMajorMatrix::::rand(&mut OsRng, 1000, 8)); + let large_mat_heights = (0..4).map(|_| 1000); + + // 5 mats with 70 rows, 8 columns + let medium_mats = (0..5).map(|_| RowMajorMatrix::::rand(&mut OsRng, 70, 8)); + let medium_mat_heights = (0..5).map(|_| 70); + + // 6 mats with 8 rows, 8 columns + let small_mats = (0..6).map(|_| RowMajorMatrix::::rand(&mut OsRng, 8, 8)); + let small_mat_heights = (0..6).map(|_| 8); + + let (commit, prover_data) = + mmcs.commit(large_mats.chain(medium_mats).chain(small_mats).collect_vec()); + + let commit: [_; DIGEST_SIZE] = commit.into(); + let commit = commit.map(|x| builder.eval(x)); + // open the 6th row of each matrix and verify + let (opened_values, proof) = mmcs.open_batch(6, &prover_data); + let opened_values = opened_values + .into_iter() + .map(|x| x.into_iter().map(|y| vec![builder.eval::, _>(y)]).collect()) + .collect(); + let index = builder.eval(F::from_canonical_u32(6)); + let index_bits = C::num2bits(&mut builder, index, 32); + let proof = proof.into_iter().map(|p| p.map(|x| builder.eval(x))).collect(); + verify_batch::<_, SC>( + &mut builder, + commit, + &large_mat_heights.chain(medium_mat_heights).chain(small_mat_heights).collect_vec(), + &index_bits, + opened_values, + proof, + ); + } #[test] fn test_fri_verify_shape_and_sample_challenges() { From 7442ac3d6c0432dd0de82bf9f89b7b970acf54f5 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 18:39:43 -0700 Subject: [PATCH 019/268] shard consistency --- .../recursion/circuit-v2/src/machine/core.rs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 9f35d0bb51..cb18f6cc99 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -337,21 +337,21 @@ where // } // }); - // // Assert that the MemoryInitialize address bits match the current loop variable. - // for (bit, current_bit) in current_init_addr_bits - // .iter() - // .zip_eq(public_values.previous_init_addr_bits.iter()) - // { - // builder.assert_felt_eq(*bit, *current_bit); - // } + // Assert that the MemoryInitialize address bits match the current loop variable. + for (bit, current_bit) in current_init_addr_bits + .iter() + .zip_eq(public_values.previous_init_addr_bits.iter()) + { + builder.assert_felt_eq(*bit, *current_bit); + } - // // Assert that the MemoryFinalize address bits match the current loop variable. - // for (bit, current_bit) in current_finalize_addr_bits - // .iter() - // .zip_eq(public_values.previous_finalize_addr_bits.iter()) - // { - // builder.assert_felt_eq(*bit, *current_bit); - // } + // Assert that the MemoryFinalize address bits match the current loop variable. + for (bit, current_bit) in current_finalize_addr_bits + .iter() + .zip_eq(public_values.previous_finalize_addr_bits.iter()) + { + builder.assert_felt_eq(*bit, *current_bit); + } // // Assert that if MemoryInit is not present, then the address bits are the same. // builder From 3c099fc8e632d2dff57133e92692a73ef7e9166d Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 18:46:57 -0700 Subject: [PATCH 020/268] more consistency --- .../circuit-v2/src/machine/compress.rs | 52 +++++++++---------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 8db0e65899..dfa2346468 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -245,40 +245,36 @@ where // // Consistency checks for all accumulated values. - // // Assert that the sp1_vk digest is always the same. - // for (digest, current) in sp1_vk_digest - // .iter() - // .zip(current_public_values.sp1_vk_digest) - // { - // builder.assert_felt_eq(*digest, current); - // } + // Assert that the sp1_vk digest is always the same. + for (digest, current) in sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { + builder.assert_felt_eq(*digest, current); + } - // // Assert that the start pc is equal to the current pc. - // builder.assert_felt_eq(pc, current_public_values.start_pc); + // Assert that the start pc is equal to the current pc. + builder.assert_felt_eq(pc, current_public_values.start_pc); - // // Verify that the shard is equal to the current shard. - // builder.assert_felt_eq(shard, current_public_values.start_shard); + // Verify that the shard is equal to the current shard. + builder.assert_felt_eq(shard, current_public_values.start_shard); - // // Verfiy that the exeuction shard is equal to the current execution shard. - // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + // Verfiy that the exeuction shard is equal to the current execution shard. + builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); - // // Assert that the leaf challenger is always the same. + // Assert that the leaf challenger is always the same. - // // Assert that the MemoryInitialize address bits are the same. - // for (bit, current_bit) in init_addr_bits - // .iter() - // .zip(current_public_values.previous_init_addr_bits.iter()) - // { - // builder.assert_felt_eq(*bit, *current_bit); - // } + // Assert that the MemoryInitialize address bits are the same. + for (bit, current_bit) in + init_addr_bits.iter().zip(current_public_values.previous_init_addr_bits.iter()) + { + builder.assert_felt_eq(*bit, *current_bit); + } - // // Assert that the MemoryFinalize address bits are the same. - // for (bit, current_bit) in finalize_addr_bits - // .iter() - // .zip(current_public_values.previous_finalize_addr_bits.iter()) - // { - // builder.assert_felt_eq(*bit, *current_bit); - // } + // Assert that the MemoryFinalize address bits are the same. + for (bit, current_bit) in finalize_addr_bits + .iter() + .zip(current_public_values.previous_finalize_addr_bits.iter()) + { + builder.assert_felt_eq(*bit, *current_bit); + } // Assert that the leaf challenger is always the same. From fd7e5cde7bfd2b2217093d5c6251751e9fc3e652 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 19:02:30 -0700 Subject: [PATCH 021/268] more asserts --- crates/recursion/circuit-v2/src/machine/compress.rs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index dfa2346468..89a9721426 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -325,15 +325,6 @@ where *byte = *current_byte; } } - // Less nice version of above but simialr to original code: - // for i in 0..committed_value_digest.len() { - // for j in 0..WORD_SIZE { - // builder.assign( - // committed_value_digest[i][j], - // current_public_values.committed_value_digest[i][j], - // ); - // } - // } // // If `deferred_proofs_digest` is not zero, then `public_values.deferred_proofs_digest // // should be the current value. From 147e152b75bcf02a8d07d69fd17cb467019c947a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 20:38:41 -0700 Subject: [PATCH 022/268] deferred --- crates/prover/src/lib.rs | 99 +++++---- crates/prover/src/types.rs | 6 +- .../circuit-v2/src/machine/compress.rs | 2 - .../circuit-v2/src/machine/deferred.rs | 198 +++++++++++++++++- .../circuit-v2/src/machine/witness.rs | 60 +++++- crates/recursion/circuit-v2/src/witness.rs | 14 +- 6 files changed, 332 insertions(+), 47 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 047a743858..bc5ff9e252 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -252,6 +252,32 @@ impl SP1Prover { }) } + // pub fn defered_program( + // &self, + // input: &SP1DeferredWitnessValues, + // ) -> Arc> { + // // Compile the program. + + // // Get the operations. + // let operations_span = + // tracing::debug_span!("Get operations for the deferred program").entered(); + // let mut builder = Builder::::default(); + // let input_read_span = tracing::debug_span!("Read input values").entered(); + // let input = input.read(&mut builder); + // input_read_span.exit(); + // let verify_span = tracing::debug_span!("Verify deferred program").entered(); + // SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); + // verify_span.exit(); + // let operations = builder.operations; + // operations_span.exit(); + + // // Compile the program. + // tracing::debug_span!("Compile compress program").in_scope(|| { + // let mut compiler = AsmCompiler::::default(); + // Arc::new(compiler.compile(operations)) + // }) + // } + pub fn get_recursion_core_inputs( &self, vk: &StarkVerifyingKey, @@ -290,44 +316,41 @@ impl SP1Prover { core_inputs } - pub fn get_recursion_deferred_inputs<'a>( - &'a self, - vk: &'a StarkVerifyingKey, - leaf_challenger: &'a Challenger, - last_proof_pv: &PublicValues, BabyBear>, - deferred_proofs: &[ShardProof], - batch_size: usize, - ) -> Vec> { - todo!() - // // Prepare the inputs for the deferred proofs recursive verification. - // let mut deferred_digest = [Val::::zero(); DIGEST_SIZE]; - // let mut deferred_inputs = Vec::new(); - - // for batch in deferred_proofs.chunks(batch_size) { - // let proofs = batch.to_vec(); - - // deferred_inputs.push(SP1DeferredMemoryLayout { - // compress_vk: self.compress_vk(), - // machine: self.compress_prover.machine(), - // proofs, - // start_reconstruct_deferred_digest: deferred_digest.to_vec(), - // is_complete: false, - // sp1_vk: vk, - // sp1_machine: self.core_prover.machine(), - // end_pc: Val::::zero(), - // end_shard: last_proof_pv.shard + BabyBear::one(), - // end_execution_shard: last_proof_pv.execution_shard, - // init_addr_bits: last_proof_pv.last_init_addr_bits, - // finalize_addr_bits: last_proof_pv.last_finalize_addr_bits, - // leaf_challenger: leaf_challenger.clone(), - // committed_value_digest: last_proof_pv.committed_value_digest.to_vec(), - // deferred_proofs_digest: last_proof_pv.deferred_proofs_digest.to_vec(), - // }); - - // deferred_digest = Self::hash_deferred_proofs(deferred_digest, batch); - // } - // deferred_inputs - } + // pub fn get_recursion_deferred_inputs<'a>( + // &'a self, + // vk: &'a StarkVerifyingKey, + // leaf_challenger: &'a Challenger, + // last_proof_pv: &PublicValues, BabyBear>, + // deferred_proofs: &[ShardProof], + // batch_size: usize, + // ) -> Vec> { + // // Prepare the inputs for the deferred proofs recursive verification. + // let mut deferred_digest = [Val::::zero(); DIGEST_SIZE]; + // let mut deferred_inputs = Vec::new(); + + // for batch in deferred_proofs.chunks(batch_size) { + // let proofs = batch.to_vec(); + + // deferred_inputs.push(SP1DeferredMemoryLayout { + // proofs, + // start_reconstruct_deferred_digest: deferred_digest.to_vec(), + // is_complete: false, + // sp1_vk: vk, + // sp1_machine: self.core_prover.machine(), + // end_pc: Val::::zero(), + // end_shard: last_proof_pv.shard + BabyBear::one(), + // end_execution_shard: last_proof_pv.execution_shard, + // init_addr_bits: last_proof_pv.last_init_addr_bits, + // finalize_addr_bits: last_proof_pv.last_finalize_addr_bits, + // leaf_challenger: leaf_challenger.clone(), + // committed_value_digest: last_proof_pv.committed_value_digest.to_vec(), + // deferred_proofs_digest: last_proof_pv.deferred_proofs_digest.to_vec(), + // }); + + // deferred_digest = Self::hash_deferred_proofs(deferred_digest, batch); + // } + // deferred_inputs + // } /// Generate the inputs for the first layer of recursive proofs. #[allow(clippy::type_complexity)] diff --git a/crates/prover/src/types.rs b/crates/prover/src/types.rs index dd4862c1b8..5a63f72320 100644 --- a/crates/prover/src/types.rs +++ b/crates/prover/src/types.rs @@ -11,7 +11,9 @@ use sp1_primitives::poseidon2_hash; use sp1_recursion_core_v2::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; -use sp1_recursion_circuit_v2::machine::{SP1CompressWitnessValues, SP1RecursionWitnessValues}; +use sp1_recursion_circuit_v2::machine::{ + SP1CompressWitnessValues, SP1DeferredWitnessValues, SP1RecursionWitnessValues, +}; use sp1_recursion_gnark_ffi::proof::{Groth16Bn254Proof, PlonkBn254Proof}; @@ -245,6 +247,6 @@ pub enum SP1RecursionProverError { #[allow(clippy::large_enum_variant)] pub enum SP1CircuitWitness { Core(SP1RecursionWitnessValues), - // Deferred(SP1DeferredMemoryLayout>), + // Deferred(SP1DeferredWitnessValues), Compress(SP1CompressWitnessValues), } diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 89a9721426..b742d65a61 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -143,9 +143,7 @@ where builder, shard_proof.public_values[0..machine.num_pv_elts()].iter().copied(), ); - let verify_shard_span = tracing::debug_span!("Verify operations shard").entered(); StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); - verify_shard_span.exit(); // Get the current public values. let current_public_values: &RecursionPublicValues> = diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 31e2856d49..607d24a0b0 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -1,7 +1,201 @@ +use std::{ + array, + borrow::{Borrow, BorrowMut}, + mem::MaybeUninit, +}; + +use p3_air::Air; +use p3_baby_bear::BabyBear; +use p3_commit::Mmcs; +use p3_matrix::dense::RowMajorMatrix; + +use sp1_primitives::consts::WORD_SIZE; +use sp1_recursion_compiler::ir::{Builder, Felt}; + +use sp1_stark::{ + air::{MachineAir, POSEIDON_NUM_WORDS}, + ShardProof, StarkGenericConfig, StarkMachine, StarkVerifyingKey, Word, +}; + +use sp1_recursion_core_v2::{ + air::{RecursionPublicValues, PV_DIGEST_NUM_WORDS, RECURSIVE_PROOF_NUM_PV_ELTS}, + DIGEST_SIZE, +}; + +use crate::{ + challenger::{CanObserveVariable, DuplexChallengerVariable}, + constraints::RecursiveVerifierConstraintFolder, + stark::{ShardProofVariable, StarkVerifier}, + utils::commit_recursion_public_values, + BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, +}; + pub struct SP1DeferredVerifier { _phantom: std::marker::PhantomData<(C, SC, A)>, } -pub struct SP1DeferredWitnessValues { - _marker: std::marker::PhantomData, +pub struct SP1DeferredWitnessValues { + pub vks_and_proofs: Vec<(StarkVerifyingKey, ShardProof)>, + pub start_reconstruct_deferred_digest: [SC::Val; POSEIDON_NUM_WORDS], + pub sp1_vk: StarkVerifyingKey, + pub leaf_challenger: SC::Challenger, + pub committed_value_digest: [Word; PV_DIGEST_NUM_WORDS], + pub deferred_proofs_digest: [SC::Val; POSEIDON_NUM_WORDS], + pub end_pc: SC::Val, + pub end_shard: SC::Val, + pub end_execution_shard: SC::Val, + pub init_addr_bits: [SC::Val; 32], + pub finalize_addr_bits: [SC::Val; 32], + pub is_complete: bool, +} + +pub struct SP1DeferredWitnessVariable< + C: CircuitConfig, + SC: BabyBearFriConfigVariable, +> { + pub vks_and_proofs: Vec<(VerifyingKeyVariable, ShardProofVariable)>, + pub start_reconstruct_deferred_digest: [Felt; POSEIDON_NUM_WORDS], + pub sp1_vk: VerifyingKeyVariable, + pub leaf_challenger: SC::FriChallengerVariable, + pub committed_value_digest: [Word>; PV_DIGEST_NUM_WORDS], + pub deferred_proofs_digest: [Felt; POSEIDON_NUM_WORDS], + pub end_pc: Felt, + pub end_shard: Felt, + pub end_execution_shard: Felt, + pub init_addr_bits: [Felt; 32], + pub finalize_addr_bits: [Felt; 32], + pub is_complete: Felt, +} + +impl SP1DeferredVerifier +where + SC: BabyBearFriConfigVariable< + C, + FriChallengerVariable = DuplexChallengerVariable, + Digest = [Felt; DIGEST_SIZE], + >, + C: CircuitConfig>, + >::ProverData>: Clone, + A: MachineAir + for<'a> Air>, +{ + /// Verify a batch of deferred proofs. + /// + /// Each deferred proof is a recursive proof representing some computation. Namely, every such + /// proof represents a recursively verified program. + /// verifier: + /// - Asserts that each of these proofs is valid as a `compress` proof. + /// - Asserts that each of these proofs is complete by checking the `is_complete` flag in the + /// proof's public values. + /// - Aggregates the proof information into the accumulated deferred digest. + pub fn verify( + builder: &mut Builder, + machine: &StarkMachine, + input: SP1DeferredWitnessVariable, + ) { + let SP1DeferredWitnessVariable { + vks_and_proofs, + start_reconstruct_deferred_digest, + sp1_vk, + leaf_challenger, + committed_value_digest, + deferred_proofs_digest, + end_pc, + end_shard, + end_execution_shard, + init_addr_bits, + finalize_addr_bits, + is_complete, + } = input; + + let mut deferred__public_values_stream: Vec> = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + .map(|_| unsafe { MaybeUninit::zeroed().assume_init() }) + .collect(); + let deferred_public_values: &mut RecursionPublicValues<_> = + deferred__public_values_stream.as_mut_slice().borrow_mut(); + + // Initialize the start of deferred digests. + deferred_public_values.start_reconstruct_deferred_digest = + start_reconstruct_deferred_digest; + + // Initialize the consistency check variable. + let mut reconstruct_deferred_digest: [Felt; POSEIDON_NUM_WORDS] = + { unsafe { MaybeUninit::zeroed().assume_init() } }; + + for (i, (vk, shard_proof)) in vks_and_proofs.into_iter().enumerate() { + // Initialize a challenger. + let mut challenger = machine.config().challenger_variable(builder); + // Observe the vk and start pc. + challenger.observe(builder, vk.commitment); + challenger.observe(builder, vk.pc_start); + + // Observe the main commitment and public values. + challenger.observe(builder, shard_proof.commitment.main_commit); + challenger.observe_slice( + builder, + shard_proof.public_values[0..machine.num_pv_elts()].iter().copied(), + ); + StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); + + // Get the current public values. + let current_public_values: &RecursionPublicValues> = + shard_proof.public_values.as_slice().borrow(); + + // // Assert that the proof is complete. + // builder.assert_felt_eq(current_public_values.is_complete, C::F::one()); + + // Update deferred proof digest + // poseidon2( current_digest[..8] || pv.sp1_vk_digest[..8] || + // pv.committed_value_digest[..32] ) + let mut inputs: [Felt; 48] = array::from_fn(|_| builder.uninit()); + inputs[0..DIGEST_SIZE].copy_from_slice(&reconstruct_deferred_digest); + + inputs[DIGEST_SIZE..DIGEST_SIZE + DIGEST_SIZE] + .copy_from_slice(¤t_public_values.sp1_vk_digest); + + for j in 0..PV_DIGEST_NUM_WORDS { + for k in 0..WORD_SIZE { + let element = current_public_values.committed_value_digest[j][k]; + inputs[j * WORD_SIZE + k + 16] = element; + } + } + reconstruct_deferred_digest = SC::hash(builder, &inputs); + } + + // Set the public values. + + // Set initial_pc, end_pc, initial_shard, and end_shard to be the hitned values. + deferred_public_values.start_pc = end_pc; + deferred_public_values.next_pc = end_pc; + deferred_public_values.start_shard = end_shard; + deferred_public_values.next_shard = end_shard; + deferred_public_values.start_execution_shard = end_execution_shard; + deferred_public_values.next_execution_shard = end_execution_shard; + // Set the init and finalize address bits to be the hinted values. + deferred_public_values.previous_init_addr_bits = init_addr_bits; + deferred_public_values.last_init_addr_bits = init_addr_bits; + deferred_public_values.previous_finalize_addr_bits = finalize_addr_bits; + deferred_public_values.last_finalize_addr_bits = finalize_addr_bits; + + // Set the sp1_vk_digest to be the hitned value. + deferred_public_values.sp1_vk_digest = sp1_vk.hash(builder); + + // Set the committed value digest to be the hitned value. + deferred_public_values.committed_value_digest = committed_value_digest; + // Set the deferred proof digest to be the hitned value. + deferred_public_values.deferred_proofs_digest = deferred_proofs_digest; + + // Set the initial, end, and leaf challenger to be the hitned values. + let values = leaf_challenger.public_values(builder); + deferred_public_values.leaf_challenger = values; + deferred_public_values.start_reconstruct_challenger = values; + deferred_public_values.end_reconstruct_challenger = values; + + // Assign the deffered proof digests. + deferred_public_values.end_reconstruct_deferred_digest = reconstruct_deferred_digest; + + // Set the is_complete flag. + deferred_public_values.is_complete = is_complete; + + commit_recursion_public_values(builder, *deferred_public_values); + } } diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index 1a0d31b925..a38ac150fe 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -16,8 +16,8 @@ use crate::{ }; use super::{ - SP1CompressWitnessValues, SP1CompressWitnessVariable, SP1RecursionWitnessValues, - SP1RecursionWitnessVariable, + SP1CompressWitnessValues, SP1CompressWitnessVariable, SP1DeferredWitnessValues, + SP1DeferredWitnessVariable, SP1RecursionWitnessValues, SP1RecursionWitnessVariable, }; impl Witnessable for DuplexChallenger @@ -134,3 +134,59 @@ where .concat() } } + +impl Witnessable for SP1DeferredWitnessValues +where + C: CircuitConfig>, +{ + type WitnessVariable = SP1DeferredWitnessVariable; + + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + let vks_and_proofs = self.vks_and_proofs.read(builder); + let start_reconstruct_deferred_digest = + self.start_reconstruct_deferred_digest.read(builder); + let sp1_vk = self.sp1_vk.read(builder); + let leaf_challenger = self.leaf_challenger.read(builder); + let committed_value_digest = self.committed_value_digest.read(builder); + let deferred_proofs_digest = self.deferred_proofs_digest.read(builder); + let end_pc = self.end_pc.read(builder); + let end_shard = self.end_shard.read(builder); + let end_execution_shard = self.end_execution_shard.read(builder); + let init_addr_bits = self.init_addr_bits.read(builder); + let finalize_addr_bits = self.finalize_addr_bits.read(builder); + let is_complete = InnerVal::from_bool(self.is_complete).read(builder); + + SP1DeferredWitnessVariable { + vks_and_proofs, + start_reconstruct_deferred_digest, + sp1_vk, + leaf_challenger, + committed_value_digest, + deferred_proofs_digest, + end_pc, + end_shard, + end_execution_shard, + init_addr_bits, + finalize_addr_bits, + is_complete, + } + } + + fn write(&self) -> Vec> { + [ + Witnessable::::write(&self.vks_and_proofs), + Witnessable::::write(&self.start_reconstruct_deferred_digest), + Witnessable::::write(&self.sp1_vk), + Witnessable::::write(&self.leaf_challenger), + Witnessable::::write(&self.committed_value_digest), + Witnessable::::write(&self.deferred_proofs_digest), + Witnessable::::write(&self.end_pc), + Witnessable::::write(&self.end_shard), + Witnessable::::write(&self.end_execution_shard), + Witnessable::::write(&self.init_addr_bits), + Witnessable::::write(&self.finalize_addr_bits), + Witnessable::::write(&InnerVal::from_bool(self.is_complete)), + ] + .concat() + } +} diff --git a/crates/recursion/circuit-v2/src/witness.rs b/crates/recursion/circuit-v2/src/witness.rs index 1df65bc106..e842675914 100644 --- a/crates/recursion/circuit-v2/src/witness.rs +++ b/crates/recursion/circuit-v2/src/witness.rs @@ -12,7 +12,7 @@ use sp1_recursion_core_v2::air::Block; use sp1_stark::{ baby_bear_poseidon2::BabyBearPoseidon2, AirOpenedValues, ChipOpenedValues, InnerBatchOpening, InnerChallenge, InnerChallengeMmcs, InnerDigest, InnerFriProof, InnerPcsProof, InnerVal, - ShardCommitment, ShardOpenedValues, ShardProof, + ShardCommitment, ShardOpenedValues, ShardProof, Word, }; use crate::{ @@ -44,6 +44,18 @@ impl<'a, C: Config, T: Witnessable> Witnessable for &'a T { } } +impl> Witnessable for Word { + type WitnessVariable = Word; + + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + Word(self.0.read(builder)) + } + + fn write(&self) -> Vec> { + self.0.write() + } +} + impl, U: Witnessable> Witnessable for (T, U) { type WitnessVariable = (T::WitnessVariable, U::WitnessVariable); From 642c595435eb6106066b6a54e464cf1b708d7a50 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 20:42:03 -0700 Subject: [PATCH 023/268] don't verify --- crates/prover/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index bc5ff9e252..1ac17eb8d0 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -597,7 +597,7 @@ impl SP1Prover { // Verify the proof. - // #[cfg(feature = "debug")] + #[cfg(feature = "debug")] self.compress_prover .machine() .verify( From 71e098ce8d1ff7d270821aebeffc81be141baea2 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 21:02:30 -0700 Subject: [PATCH 024/268] setup tracing --- crates/prover/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 1ac17eb8d0..7e41167586 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -563,7 +563,8 @@ impl SP1Prover { if let Ok((index, height, program, record, traces)) = received { tracing::debug_span!("batch").in_scope(|| { // Get the keys. - let (pk, vk) = self.compress_prover.setup(&program); + let (pk, vk) = tracing::debug_span!("Setup compress program") + .in_scope(|| self.compress_prover.setup(&program)); // Observe the proving key. let mut challenger = self.compress_prover.config().challenger(); From 1bf9624e9a5dae6d1381ec01860e9f9ac076de67 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 21:13:08 -0700 Subject: [PATCH 025/268] less span spam --- crates/prover/src/lib.rs | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 7e41167586..be2c043f35 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -207,23 +207,14 @@ impl SP1Prover { // Compile the program. // Get the operations. - let operations_span = - tracing::debug_span!("Get operations for the recursion program").entered(); let mut builder = Builder::::default(); - let input_read_span = tracing::debug_span!("Read input values").entered(); let input = input.read(&mut builder); - input_read_span.exit(); - let verify_span = tracing::debug_span!("Verify recursion program").entered(); SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); - verify_span.exit(); let operations = builder.operations; - operations_span.exit(); // Compile the program. - tracing::debug_span!("Compile recursion program").in_scope(|| { - let mut compiler = AsmCompiler::::default(); - Arc::new(compiler.compile(operations)) - }) + let mut compiler = AsmCompiler::::default(); + Arc::new(compiler.compile(operations)) } pub fn compress_program( @@ -233,23 +224,14 @@ impl SP1Prover { // Compile the program. // Get the operations. - let operations_span = - tracing::debug_span!("Get operations for the compress program").entered(); let mut builder = Builder::::default(); - let input_read_span = tracing::debug_span!("Read input values").entered(); let input = input.read(&mut builder); - input_read_span.exit(); - let verify_span = tracing::debug_span!("Verify compress program").entered(); SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); - verify_span.exit(); let operations = builder.operations; - operations_span.exit(); // Compile the program. - tracing::debug_span!("Compile compress program").in_scope(|| { - let mut compiler = AsmCompiler::::default(); - Arc::new(compiler.compile(operations)) - }) + let mut compiler = AsmCompiler::::default(); + Arc::new(compiler.compile(operations)) } // pub fn defered_program( From a49e84c2e0e86ffaf80587ecd4f1fefd1c6dfdfc Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 21:46:27 -0700 Subject: [PATCH 026/268] cleanup --- crates/recursion/circuit-v2/src/fri.rs | 4 ---- crates/recursion/circuit-v2/src/stark.rs | 2 -- 2 files changed, 6 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 9128ee76ac..9323077047 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -66,7 +66,6 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let log_global_max_height = proof.fri_proof.commit_phase_commits.len() + config.log_blowup; - let reduced_openings_span = tracing::debug_span!("Compute reduced openings").entered(); let reduced_openings = proof .query_openings .iter() @@ -175,9 +174,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV ro }) .collect::>(); - reduced_openings_span.exit(); - let verify_challenges_span = tracing::debug_span!("Verify challenges").entered(); verify_challenges::( builder, config, @@ -185,7 +182,6 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV &fri_challenges, reduced_openings, ); - verify_challenges_span.exit(); } pub fn verify_challenges, SC: BabyBearFriConfigVariable>( diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 4b1c8b289f..fe5cfeaf43 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -201,9 +201,7 @@ where // Verify the pcs proof builder.cycle_tracker_v2_enter("stage-d-verify-pcs".to_string()); let config = machine.config().fri_config(); - let verify_pcs_span = tracing::debug_span!("Verify PCS proof, operations").entered(); verify_two_adic_pcs::(builder, config, opening_proof, challenger, rounds); - verify_pcs_span.exit(); builder.cycle_tracker_v2_exit(); // Verify the constrtaint evaluations. From ef59c0ac0128788047bc31e70f160f50adb50d7e Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 21:53:49 -0700 Subject: [PATCH 027/268] add span --- crates/prover/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index be2c043f35..df4b26118f 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -368,6 +368,7 @@ impl SP1Prover { } /// Reduce shards proofs to a single shard proof using the recursion prover. + #[instrument(name = "compress", level = "info", skip_all)] pub fn compress( &self, vk: &SP1VerifyingKey, From 3e172e0517dc15179bb07a176a2b1272e63eb971 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 22:02:46 -0700 Subject: [PATCH 028/268] compress span --- crates/prover/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index df4b26118f..422c59b6c4 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -947,7 +947,9 @@ pub mod tests { } tracing::info!("compress"); + let compress_span = tracing::debug_span!("compress").entered(); let compressed_proof = prover.compress(&vk, core_proof, vec![], opts)?; + compress_span.exit(); tracing::info!("verify compressed"); prover.verify_compressed(&compressed_proof, &vk)?; From 4eb576f8aaba49aa10426296189bd2ae85f4d47e Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 22:24:31 -0700 Subject: [PATCH 029/268] cleanup spans --- crates/prover/src/lib.rs | 2 +- crates/recursion/circuit-v2/src/machine/core.rs | 2 -- crates/recursion/circuit-v2/src/stark.rs | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 422c59b6c4..fe2231e125 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -454,7 +454,7 @@ impl SP1Prover { if let Ok((index, height, input)) = received { // Get the program and witness stream. let (program, witness_stream) = tracing::debug_span!( - "write witness stream" + "Get program and witness stream" ) .in_scope(|| match input { SP1CircuitWitness::Core(input) => { diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index cb18f6cc99..af1a4ed67e 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -237,9 +237,7 @@ where // Do not verify the cumulative sum here, since the permutation challenge is shared // between all shards. let mut challenger = leaf_challenger.copy(builder); - let verify_shard_span = tracing::debug_span!("Verify operations shard").entered(); StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); - verify_shard_span.exit(); // // First shard has a "CPU" constraint. // { diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index fe5cfeaf43..68e92cdb5b 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -205,7 +205,6 @@ where builder.cycle_tracker_v2_exit(); // Verify the constrtaint evaluations. - let verify_constraints_span = tracing::debug_span!("Verify constraints").entered(); builder.cycle_tracker_v2_enter("stage-e-verify-constraints".to_string()); for (chip, trace_domain, qc_domains, values) in izip!(chips.iter(), trace_domains, quotient_chunk_domains, opened_values.chips.iter(),) @@ -225,7 +224,6 @@ where public_values, ); } - verify_constraints_span.exit(); builder.cycle_tracker_v2_exit(); } } From 0d04a04b571011e3f1f1d54f2aa7b41c763fb274 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 22:52:26 -0700 Subject: [PATCH 030/268] cleanup --- crates/prover/src/lib.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index fe2231e125..e34aeb6169 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -654,12 +654,6 @@ impl SP1Prover { .into_iter() .map(|(_, _, vk, proof)| (vk, proof)) .collect::>(); - // let shard_proofs = - // inputs.iter().map(|(_, _, proof, _)| proof.clone()).collect(); - // let kinds = inputs - // .iter() - // .map(|(_, _, _, program_type)| *program_type) - // .collect(); let input = SP1CircuitWitness::Compress(SP1CompressWitnessValues { vks_and_proofs, is_complete, From 25e7188042290e03d83319b0200b7c114aa510b8 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 20 Aug 2024 23:07:15 -0700 Subject: [PATCH 031/268] perf: posedion2 trace opt (#1365) --- .../core-v2/src/chips/poseidon2_wide/trace.rs | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index 71089558d2..a12b005ea6 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -4,7 +4,8 @@ use itertools::Itertools; use p3_air::BaseAir; use p3_field::PrimeField32; use p3_matrix::{dense::RowMajorMatrix, Matrix}; -use sp1_core_machine::utils::pad_rows_fixed; +use p3_maybe_rayon::prelude::{ParallelIterator, ParallelSlice}; +use sp1_core_machine::utils::{next_power_of_two, pad_rows_fixed, par_for_each_row}; use sp1_primitives::RC_16_30_U32; use sp1_stark::air::MachineAir; use tracing::instrument; @@ -43,28 +44,25 @@ impl MachineAir for Poseidon2WideChip, _output: &mut ExecutionRecord, ) -> RowMajorMatrix { - let mut rows = Vec::new(); - + let nb_events = input.poseidon2_events.len(); + let padded_nb_rows = next_power_of_two(nb_events, self.fixed_log2_rows); let num_columns = as BaseAir>::width(self); + let mut values = vec![F::zero(); padded_nb_rows * num_columns]; - for event in &input.poseidon2_events { - let mut row = vec![F::zero(); num_columns]; - self.populate_perm(event.input, Some(event.output), row.as_mut_slice()); - rows.push(row); - } - - if self.pad { - // Pad the trace to a power of two. - // This will need to be adjusted when the AIR constraints are implemented. - let mut dummy_row = vec![F::zero(); num_columns]; - self.populate_perm([F::zero(); WIDTH], None, &mut dummy_row); + let mut dummy_row = vec![F::zero(); num_columns]; + self.populate_perm([F::zero(); WIDTH], None, &mut dummy_row); - pad_rows_fixed(&mut rows, || dummy_row.clone(), self.fixed_log2_rows); - } + par_for_each_row(&mut values, num_columns, |i, row| { + if i >= nb_events { + row.copy_from_slice(&dummy_row); + return; + } + let event = &input.poseidon2_events[i]; + self.populate_perm(event.input, Some(event.output), row); + }); // Convert the trace to a row major matrix. - let trace = - RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), num_columns); + let trace = RowMajorMatrix::new(values, num_columns); #[cfg(debug_assertions)] println!( From 56e987a0e4a3cf34ad4fe7bfd103004dd1e34f3d Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 23:10:25 -0700 Subject: [PATCH 032/268] more spans --- crates/prover/src/lib.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index e34aeb6169..eedf8b205c 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -207,14 +207,19 @@ impl SP1Prover { // Compile the program. // Get the operations. + let builder_span = tracing::debug_span!("build recursion program").entered(); let mut builder = Builder::::default(); let input = input.read(&mut builder); SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); let operations = builder.operations; + builder_span.exit(); // Compile the program. + let compiler_span = tracing::debug_span!("compile recursion program").entered(); let mut compiler = AsmCompiler::::default(); - Arc::new(compiler.compile(operations)) + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program } pub fn compress_program( @@ -224,14 +229,19 @@ impl SP1Prover { // Compile the program. // Get the operations. + let builder_span = tracing::debug_span!("build compress program").entered(); let mut builder = Builder::::default(); let input = input.read(&mut builder); SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); let operations = builder.operations; + builder_span.exit(); // Compile the program. + let compiler_span = tracing::debug_span!("compile compress program").entered(); let mut compiler = AsmCompiler::::default(); - Arc::new(compiler.compile(operations)) + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program } // pub fn defered_program( From b312e2176d03a8f1e798aa570d1d2064141daec6 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 20 Aug 2024 23:59:42 -0700 Subject: [PATCH 033/268] 1 expr --- crates/recursion/compiler/src/ir/symbolic.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/recursion/compiler/src/ir/symbolic.rs b/crates/recursion/compiler/src/ir/symbolic.rs index 1ff565c7b9..b1fbc0a666 100644 --- a/crates/recursion/compiler/src/ir/symbolic.rs +++ b/crates/recursion/compiler/src/ir/symbolic.rs @@ -15,19 +15,21 @@ use p3_field::{AbstractField, ExtensionField, Field, FieldArray}; use super::{Ext, Felt, Usize, Var}; -const NUM_RANDOM_ELEMENTS: usize = 4; +const NUM_RANDOM_ELEMENTS: usize = 1; pub type Digest = FieldArray; pub fn elements() -> Digest { - let powers = [1671541671, 1254988180, 442438744, 1716490559]; + // let powers = [1671541671, 1254988180, 442438744, 1716490559]; + let powers = [1671541671]; let generator = F::generator(); Digest::from(powers.map(|p| generator.exp_u64(p))) } pub fn ext_elements>() -> Digest { - let powers = [1021539871, 1430550064, 447478069, 1248903325]; + let powers = [1021539871]; + // let powers = [1021539871, 1430550064, 447478069, 1248903325]; let generator = EF::generator(); Digest::from(powers.map(|p| generator.exp_u64(p))) From 99d4ab222530d0a8e7a6c76346e4c198f117a989 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 15:31:18 -0700 Subject: [PATCH 034/268] unroll loops --- crates/recursion/circuit-v2/src/fri.rs | 49 ++++++++++++++++++++------ 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index da21be641a..f91ca5b3aa 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -116,25 +116,54 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV builder.eval(C::F::two_adic_generator(log_height)); let two_adic_generator_exp = C::exp_reverse_bits(builder, two_adic_generator, reduced_index_bits_trunc); - let x: Felt<_> = builder.eval(g * two_adic_generator_exp); + + // Unroll the following to avoid symbolic expression overhead + // let x: Felt<_> = builder.eval(g * two_adic_generator_exp); + let x: Felt<_> = builder.uninit(); + builder.operations.push(DslIr::MulF(x, g, two_adic_generator_exp)); for (z, ps_at_z) in izip!(mat_points, mat_values) { - // builder.cycle_tracker("2adic-hotloop"); - let mut acc: Ext = - builder.eval(SymbolicExt::from_f(C::EF::zero())); + // Unroll the loop calculation to avoid symbolic expression overhead + + // let mut acc: Ext = + // builder.eval(SymbolicExt::from_f(C::EF::zero())); + let mut acc: Ext<_, _> = builder.uninit(); + + builder.operations.push(DslIr::ImmE(acc, C::EF::zero())); for (p_at_x, p_at_z) in izip!(mat_opening.clone(), ps_at_z) { let pow = log_height_pow[log_height]; // Fill in any missing powers of alpha. - (alpha_pows.len()..pow + 1).for_each(|_| { - let new_alpha = builder.eval(*alpha_pows.last().unwrap() * alpha); - builder.reduce_e(new_alpha); + for _ in alpha_pows.len()..pow + 1 { + // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * alpha); + // builder.reduce_e(new_alpha); + // alpha_pows.push(new_alpha); + let new_alpha: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::MulE( + new_alpha, + *alpha_pows.last().unwrap(), + alpha, + )); alpha_pows.push(new_alpha); - }); - acc = builder.eval(acc + (alpha_pows[pow] * (p_at_z - p_at_x[0]))); + } + // Unroll: + // + // acc = builder.eval(acc + (alpha_pows[pow] * (p_at_z - p_at_x[0]))); + + // let temp_1 = p_at_z - p_at_x[0]; + let temp_1: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::SubEF(temp_1, p_at_z, p_at_x[0])); + // let temp_2 = alpha_pows[pow] * temp_1; + let temp_2: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::MulE(temp_2, alpha_pows[pow], temp_1)); + // let temp_3 = acc + temp_2; + let temp_3: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::AddE(temp_3, acc, temp_2)); + // acc = temp_3; + acc = temp_3; + log_height_pow[log_height] += 1; } ro[log_height] = builder.eval(ro[log_height] + acc / (z - x)); - // builder.cycle_tracker("2adic-hotloop"); } } } From 6b052eaf668b5c4c4e795dd460fe7134b25719ad Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 15:35:00 -0700 Subject: [PATCH 035/268] fix alpha reduce --- crates/recursion/circuit-v2/src/fri.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index f91ca5b3aa..10cf149fc8 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -135,7 +135,6 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV // Fill in any missing powers of alpha. for _ in alpha_pows.len()..pow + 1 { // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * alpha); - // builder.reduce_e(new_alpha); // alpha_pows.push(new_alpha); let new_alpha: Ext<_, _> = builder.uninit(); builder.operations.push(DslIr::MulE( @@ -143,6 +142,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV *alpha_pows.last().unwrap(), alpha, )); + builder.reduce_e(new_alpha); alpha_pows.push(new_alpha); } // Unroll: From be6dad46cf2dbb043437079e798d01f03015c34a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 15:35:16 -0700 Subject: [PATCH 036/268] cleanup --- crates/recursion/circuit-v2/src/fri.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 10cf149fc8..290d465a59 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -135,7 +135,6 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV // Fill in any missing powers of alpha. for _ in alpha_pows.len()..pow + 1 { // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * alpha); - // alpha_pows.push(new_alpha); let new_alpha: Ext<_, _> = builder.uninit(); builder.operations.push(DslIr::MulE( new_alpha, From 44415c45fb2314874790b3d1dc1bd514d0866b1f Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 15:44:51 -0700 Subject: [PATCH 037/268] small optimizations --- crates/recursion/circuit-v2/src/fri.rs | 18 +++++++++++++++++- crates/recursion/circuit-v2/src/hash.rs | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 290d465a59..930a716c48 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -162,7 +162,23 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV log_height_pow[log_height] += 1; } - ro[log_height] = builder.eval(ro[log_height] + acc / (z - x)); + // Unroll this calculation to avoid symbolic expression overhead + // ro[log_height] = builder.eval(ro[log_height] + acc / (z - x)); + + // let temp_1 = z - x; + let temp_1: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::SubEF(temp_1, z, x)); + + // let temp_2 = acc / (temp_1); + let temp_2: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::DivE(temp_2, acc, temp_1)); + + // let temp_3 = rp[log_height] + temp_2; + let temp_3: Ext<_, _> = builder.uninit(); + builder.operations.push(DslIr::AddE(temp_3, ro[log_height], temp_2)); + + // ro[log_height] = temp_3; + ro[log_height] = temp_3; } } } diff --git a/crates/recursion/circuit-v2/src/hash.rs b/crates/recursion/circuit-v2/src/hash.rs index 4e99a220bc..135d4ceba8 100644 --- a/crates/recursion/circuit-v2/src/hash.rs +++ b/crates/recursion/circuit-v2/src/hash.rs @@ -81,7 +81,7 @@ impl>> FieldHashe [builder.eval(C::N::zero()), builder.eval(C::N::zero()), builder.eval(C::N::zero())]; for block_chunk in &input.iter().chunks(RATE) { for (chunk_id, chunk) in (&block_chunk.chunks(num_f_elms)).into_iter().enumerate() { - let chunk = chunk.collect_vec().into_iter().copied().collect::>(); + let chunk = chunk.copied().collect::>(); state[chunk_id] = reduce_32(builder, chunk.as_slice()); } builder.push(DslIr::CircuitPoseidon2Permute(state)) From a968bc28d8a47e7a713c004548ca07f3ea12f217 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 17:03:31 -0700 Subject: [PATCH 038/268] convert to felts --- crates/recursion/circuit-v2/Cargo.toml | 1 + crates/recursion/circuit-v2/src/fri.rs | 27 +++++++----- crates/recursion/circuit-v2/src/lib.rs | 41 +++++++++++++++++++ .../recursion/compiler/src/constraints/mod.rs | 4 ++ crates/recursion/core-v2/src/machine.rs | 12 +++--- .../gnark-ffi/go/sp1/babybear/babybear.go | 5 +++ crates/recursion/gnark-ffi/go/sp1/sp1.go | 2 + 7 files changed, 75 insertions(+), 17 deletions(-) diff --git a/crates/recursion/circuit-v2/Cargo.toml b/crates/recursion/circuit-v2/Cargo.toml index 8bb5495e39..f1ca9f36e8 100644 --- a/crates/recursion/circuit-v2/Cargo.toml +++ b/crates/recursion/circuit-v2/Cargo.toml @@ -60,3 +60,4 @@ rand = "0.8.5" [features] native-gnark = ["sp1-recursion-gnark-ffi/native"] export-tests = [] +debug = ["sp1-core-machine/debug"] diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 930a716c48..3c13d1ec25 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -4,7 +4,7 @@ use p3_commit::PolynomialSpace; use p3_field::{AbstractField, TwoAdicField}; use p3_fri::FriConfig; use p3_util::log2_strict_usize; -use sp1_recursion_compiler::ir::{Builder, DslIr, Felt, SymbolicExt, SymbolicFelt}; +use sp1_recursion_compiler::ir::{Builder, DslIr, Felt, SymbolicExt}; use std::{ cmp::Reverse, iter::{once, repeat_with, zip}, @@ -232,9 +232,14 @@ pub fn verify_query, SC: BabyBearFriConfigVariable let mut folded_eval: Ext<_, _> = builder.constant(C::EF::zero()); let two_adic_generator: Felt<_> = builder.constant(C::F::two_adic_generator(log_max_height)); - let x_felt = + // TODO: fix expreversebits address bug to avoid needing to allocate a new variable. + let x_f = C::exp_reverse_bits(builder, two_adic_generator, index_bits[..log_max_height].to_vec()); - let mut x: Ext<_, _> = builder.eval(SymbolicExt::one() * SymbolicFelt::from(x_felt)); + let mut x = builder.uninit(); + builder.operations.push(DslIr::AddFI(x, x_f, C::F::zero())); + + // let mut x = builder.eval(x + C::F::zero()); + // let mut x: Ext<_, _> = builder.eval(SymbolicExt::one() * SymbolicFelt::from(x_felt)); for (offset, log_folded_height, commit, step, beta) in izip!( 0.., @@ -271,8 +276,8 @@ pub fn verify_query, SC: BabyBearFriConfigVariable step.opening_proof.clone(), ); - let xs_new: Ext<_, _> = builder.eval(x * C::EF::two_adic_generator(1)); - let xs = C::select_chain_ef(builder, index_sibling_complement, once(x), once(xs_new)); + let xs_new: Felt<_> = builder.eval(x * C::F::two_adic_generator(1)); + let xs = C::select_chain_f(builder, index_sibling_complement, once(x), once(xs_new)); // Unroll the `folded_eval` calculation to avoid symbolic expression overhead. // folded_eval = builder @@ -280,8 +285,8 @@ pub fn verify_query, SC: BabyBearFriConfigVariable // x = builder.eval(x * x); // let temp_1 = xs[1] - xs[0]; - let temp_1: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::SubE(temp_1, xs[1], xs[0])); + let temp_1: Felt<_> = builder.uninit(); + builder.operations.push(DslIr::SubF(temp_1, xs[1], xs[0])); // let temp_2 = evals_ext[1] - evals_ext[0]; let temp_2: Ext<_, _> = builder.uninit(); @@ -289,11 +294,11 @@ pub fn verify_query, SC: BabyBearFriConfigVariable // let temp_3 = temp_2 / temp_1; let temp_3: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::DivE(temp_3, temp_2, temp_1)); + builder.operations.push(DslIr::DivEF(temp_3, temp_2, temp_1)); // let temp_4 = beta - xs[0]; let temp_4: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::SubE(temp_4, *beta, xs[0])); + builder.operations.push(DslIr::SubEF(temp_4, *beta, xs[0])); // let temp_5 = temp_4 * temp_3; let temp_5: Ext<_, _> = builder.uninit(); @@ -306,8 +311,8 @@ pub fn verify_query, SC: BabyBearFriConfigVariable folded_eval = temp_6; // let temp_7 = x * x; - let temp_7: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::MulE(temp_7, x, x)); + let temp_7: Felt<_> = builder.uninit(); + builder.operations.push(DslIr::MulF(temp_7, x, x)); // x = temp_7; x = temp_7; } diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 7db5b0af07..825e37444b 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -130,6 +130,14 @@ pub trait CircuitConfig: Config { bits: impl IntoIterator, ) -> Felt<::F>; + #[allow(clippy::type_complexity)] + fn select_chain_f( + builder: &mut Builder, + should_swap: Self::Bit, + first: impl IntoIterator::F>> + Clone, + second: impl IntoIterator::F>> + Clone, + ) -> Vec::F>>; + #[allow(clippy::type_complexity)] fn select_chain_ef( builder: &mut Builder, @@ -184,6 +192,22 @@ impl CircuitConfig for InnerConfig { builder.bits2num_v2_f(bits) } + fn select_chain_f( + builder: &mut Builder, + should_swap: Self::Bit, + first: impl IntoIterator::F>> + Clone, + second: impl IntoIterator::F>> + Clone, + ) -> Vec::F>> { + let one: Felt<_> = builder.constant(Self::F::one()); + let shouldnt_swap: Felt<_> = builder.eval(one - should_swap); + + let id_branch = first.clone().into_iter().chain(second.clone()); + let swap_branch = second.into_iter().chain(first); + zip(zip(id_branch, swap_branch), zip(repeat(shouldnt_swap), repeat(should_swap))) + .map(|((id_v, sw_v), (id_c, sw_c))| builder.eval(id_v * id_c + sw_v * sw_c)) + .collect() + } + fn select_chain_ef( builder: &mut Builder, should_swap: Self::Bit, @@ -267,6 +291,23 @@ impl CircuitConfig for OuterConfig { result } + fn select_chain_f( + builder: &mut Builder, + should_swap: Self::Bit, + first: impl IntoIterator::F>> + Clone, + second: impl IntoIterator::F>> + Clone, + ) -> Vec::F>> { + let id_branch = first.clone().into_iter().chain(second.clone()); + let swap_branch = second.into_iter().chain(first); + zip(id_branch, swap_branch) + .map(|(id_v, sw_v): (Felt<_>, Felt<_>)| -> Felt<_> { + let result: Felt<_> = builder.uninit(); + builder.operations.push(DslIr::CircuitSelectF(should_swap, sw_v, id_v, result)); + result + }) + .collect() + } + fn select_chain_ef( builder: &mut Builder, should_swap: Self::Bit, diff --git a/crates/recursion/compiler/src/constraints/mod.rs b/crates/recursion/compiler/src/constraints/mod.rs index 58a0fff3cb..d086c64c51 100644 --- a/crates/recursion/compiler/src/constraints/mod.rs +++ b/crates/recursion/compiler/src/constraints/mod.rs @@ -225,6 +225,10 @@ impl ConstraintCompiler { args: vec![vec![a.id()], vec![tmp], vec![c.id()]], }); } + DslIr::DivEF(a, b, c) => constraints.push(Constraint { + opcode: ConstraintOpcode::DivEF, + args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], + }), DslIr::DivE(a, b, c) => constraints.push(Constraint { opcode: ConstraintOpcode::DivE, args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index a30a8846e9..5208df3b14 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -105,7 +105,7 @@ impl, const DEGREE: usize, const COL_P RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), // RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - RecursionAir::FriFold(FriFoldChip::::default()), + // RecursionAir::FriFold(FriFoldChip::::default()), RecursionAir::PublicValues(PublicValuesChip::default()), ] } @@ -120,7 +120,7 @@ impl, const DEGREE: usize, const COL_P // RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - RecursionAir::FriFold(FriFoldChip::::default()), + // RecursionAir::FriFold(FriFoldChip::::default()), RecursionAir::PublicValues(PublicValuesChip::default()), ] } @@ -145,10 +145,10 @@ impl, const DEGREE: usize, const COL_P fixed_log2_rows: Some(erbl_padding), pad: true, }), - RecursionAir::FriFold(FriFoldChip:: { - fixed_log2_rows: Some(fri_fold_padding), - pad: true, - }), + // RecursionAir::FriFold(FriFoldChip:: { + // fixed_log2_rows: Some(fri_fold_padding), + // pad: true, + // }), RecursionAir::PublicValues(PublicValuesChip::default()), ] } diff --git a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go index 86e9cda569..1e75a80766 100644 --- a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go +++ b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go @@ -278,6 +278,11 @@ func (c *Chip) DivE(a, b ExtensionVariable) ExtensionVariable { return c.MulE(a, bInv) } +func (c *Chip) DivEF(a ExtensionVariable, b Variable) ExtensionVariable { + bInv := c.invF(b) + return c.MulEF(a, bInv) +} + func (c *Chip) NegE(a ExtensionVariable) ExtensionVariable { v1 := c.negF(a.Value[0]) v2 := c.negF(a.Value[1]) diff --git a/crates/recursion/gnark-ffi/go/sp1/sp1.go b/crates/recursion/gnark-ffi/go/sp1/sp1.go index 3b01e19820..156ff27ad0 100644 --- a/crates/recursion/gnark-ffi/go/sp1/sp1.go +++ b/crates/recursion/gnark-ffi/go/sp1/sp1.go @@ -116,6 +116,8 @@ func (circuit *Circuit) Define(api frontend.API) error { exts[cs.Args[0][0]] = fieldAPI.MulEF(exts[cs.Args[1][0]], felts[cs.Args[2][0]]) case "DivE": exts[cs.Args[0][0]] = fieldAPI.DivE(exts[cs.Args[1][0]], exts[cs.Args[2][0]]) + case "DivEF": + exts[cs.Args[0][0]] = fieldAPI.DivEF(exts[cs.Args[1][0]], felts[cs.Args[2][0]]) case "NegE": exts[cs.Args[0][0]] = fieldAPI.NegE(exts[cs.Args[1][0]]) case "InvE": From 506ed8aa2b3e570ed6f5824d11ffd84a071352af Mon Sep 17 00:00:00 2001 From: erabinov Date: Thu, 22 Aug 2024 18:15:15 -0700 Subject: [PATCH 039/268] fix bug --- crates/recursion/circuit-v2/src/fri.rs | 6 +++--- crates/recursion/core-v2/src/chips/exp_reverse_bits.rs | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 3c13d1ec25..413c64422b 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -233,10 +233,10 @@ pub fn verify_query, SC: BabyBearFriConfigVariable let two_adic_generator: Felt<_> = builder.constant(C::F::two_adic_generator(log_max_height)); // TODO: fix expreversebits address bug to avoid needing to allocate a new variable. - let x_f = + let mut x = C::exp_reverse_bits(builder, two_adic_generator, index_bits[..log_max_height].to_vec()); - let mut x = builder.uninit(); - builder.operations.push(DslIr::AddFI(x, x_f, C::F::zero())); + // let mut x = builder.uninit(); + // builder.operations.push(DslIr::AddFI(x, x_f, C::F::zero())); // let mut x = builder.eval(x + C::F::zero()); // let mut x: Ext<_, _> = builder.eval(SymbolicExt::one() * SymbolicFelt::from(x_felt)); diff --git a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs index 60e6f1ac45..0cbfeaa982 100644 --- a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs +++ b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs @@ -115,8 +115,7 @@ impl MachineAir for ExpReverseBitsLenCh row.is_first = F::from_bool(i == 0); row.is_last = F::from_bool(i == addrs.exp.len() - 1); row.is_real = F::one(); - row.x_mem = - MemoryAccessCols { addr: addrs.base, mult: -F::from_bool(i == 0) * *mult }; + row.x_mem = MemoryAccessCols { addr: addrs.base, mult: -F::from_bool(i == 0) }; row.exponent_mem = MemoryAccessCols { addr: addrs.exp[i], mult: F::neg_one() }; row.result_mem = MemoryAccessCols { addr: addrs.result, From 841d6a47d3d412c3663b783b9b058512dfd05e82 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 19:38:43 -0700 Subject: [PATCH 040/268] cache --- crates/prover/Cargo.toml | 2 + crates/prover/src/lib.rs | 110 +++++++++++++++++++++++++++------------ 2 files changed, 80 insertions(+), 32 deletions(-) diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index 19d1c3991c..cfc141f3d8 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -45,6 +45,8 @@ num-bigint = "0.4.6" thiserror = "1.0.63" oneshot = "0.1.8" +lru = "0.12.4" + [[bin]] name = "build_plonk_bn254" path = "scripts/build_plonk_bn254.rs" diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 9e63864b27..983163eb8a 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -20,11 +20,15 @@ pub mod verify; use std::{ borrow::Borrow, + env, + num::NonZeroUsize, path::Path, sync::{mpsc::sync_channel, Arc, Mutex, OnceLock}, thread, }; +use lru::LruCache; + use tracing::instrument; use p3_baby_bear::BabyBear; @@ -38,6 +42,7 @@ use sp1_core_machine::{ riscv::RiscvAir, utils::{concurrency::TurnBasedSync, SP1CoreProverError}, }; + use sp1_primitives::hash_deferred_proof; use sp1_recursion_compiler::{ @@ -51,7 +56,7 @@ use sp1_recursion_gnark_ffi::{groth16_bn254::Groth16Bn254Prover, plonk_bn254::Pl use sp1_stark::{ air::PublicValues, baby_bear_poseidon2::BabyBearPoseidon2, Challenge, Challenger, - MachineProver, MachineVerificationError, SP1CoreOpts, SP1ProverOpts, ShardProof, + MachineProver, MachineVerificationError, ProofShape, SP1CoreOpts, SP1ProverOpts, ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, Val, Word, DIGEST_SIZE, }; @@ -88,6 +93,9 @@ const COMPRESS_DEGREE: usize = 3; const SHRINK_DEGREE: usize = 9; const WRAP_DEGREE: usize = 17; +const CORE_CACHE_SIZE: usize = 100; +const COMPRESS_CACHE_SIZE: usize = 10; + pub type CompressAir = RecursionAir; pub type ShrinkAir = RecursionAir; pub type WrapAir = RecursionAir; @@ -105,6 +113,10 @@ pub struct SP1Prover { /// The machine used for proving the wrapping step. pub wrap_prover: C::WrapProver, + + pub recursion_programs: Mutex, Arc>>>, + + pub compress_programs: Mutex, Arc>>>, } impl SP1Prover { @@ -132,7 +144,30 @@ impl SP1Prover { let wrap_machine = WrapAir::machine(OuterSC::default()); let wrap_prover = C::WrapProver::new(wrap_machine); - Self { core_prover, compress_prover, shrink_prover, wrap_prover } + let core_cache_size = NonZeroUsize::new( + env::var("PROVER_CORE_CACHE_SIZE") + .unwrap_or_else(|_| CORE_CACHE_SIZE.to_string()) + .parse() + .unwrap_or(CORE_CACHE_SIZE), + ) + .expect("PROVER_CORE_CACHE_SIZE must be a non-zero usize"); + + let compress_cache_size = NonZeroUsize::new( + env::var("PROVER_COMPRESS_CACHE_SIZE") + .unwrap_or_else(|_| CORE_CACHE_SIZE.to_string()) + .parse() + .unwrap_or(COMPRESS_CACHE_SIZE), + ) + .expect("PROVER_COMPRESS_CACHE_SIZE must be a non-zero usize"); + + Self { + core_prover, + compress_prover, + shrink_prover, + wrap_prover, + recursion_programs: Mutex::new(LruCache::new(core_cache_size)), + compress_programs: Mutex::new(LruCache::new(compress_cache_size)), + } } /// Fully initializes the programs, proving keys, and verifying keys that are normally @@ -204,44 +239,55 @@ impl SP1Prover { &self, input: &SP1RecursionWitnessValues, ) -> Arc> { - // Compile the program. - - // Get the operations. - let builder_span = tracing::debug_span!("build recursion program").entered(); - let mut builder = Builder::::default(); - let input = input.read(&mut builder); - SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); - let operations = builder.operations; - builder_span.exit(); - - // Compile the program. - let compiler_span = tracing::debug_span!("compile recursion program").entered(); - let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); - compiler_span.exit(); - program + let shapes = input.shard_proofs.iter().map(|proof| proof.shape()).collect::>(); + let mut cache = self.recursion_programs.lock().unwrap(); + cache + .get_or_insert(shapes, || { + // Get the operations. + let builder_span = tracing::debug_span!("build recursion program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); + let operations = builder.operations; + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile recursion program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program + }) + .clone() } pub fn compress_program( &self, input: &SP1CompressWitnessValues, ) -> Arc> { + let shapes = + input.vks_and_proofs.iter().map(|(_, proof)| proof.shape()).collect::>(); + let mut cache = self.recursion_programs.lock().unwrap(); // Compile the program. - // Get the operations. - let builder_span = tracing::debug_span!("build compress program").entered(); - let mut builder = Builder::::default(); - let input = input.read(&mut builder); - SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); - let operations = builder.operations; - builder_span.exit(); - - // Compile the program. - let compiler_span = tracing::debug_span!("compile compress program").entered(); - let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); - compiler_span.exit(); - program + cache + .get_or_insert(shapes, || { + // Get the operations. + let builder_span = tracing::debug_span!("build compress program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); + let operations = builder.operations; + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile compress program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program + }) + .clone() } // pub fn defered_program( From bfd8d76eb78e879f42a3e8a7fd58869384e7ddf5 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 19:41:34 -0700 Subject: [PATCH 041/268] cache v1 --- Cargo.lock | 10 ++++++++++ crates/stark/src/types.rs | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index e53f6b708e..9daeb5ab12 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2850,6 +2850,15 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "lru" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "matchers" version = "0.1.0" @@ -5221,6 +5230,7 @@ dependencies = [ "dirs", "hex", "itertools 0.13.0", + "lru", "num-bigint 0.4.6", "oneshot", "p3-baby-bear", diff --git a/crates/stark/src/types.rs b/crates/stark/src/types.rs index 822a7a6268..5a8d44510d 100644 --- a/crates/stark/src/types.rs +++ b/crates/stark/src/types.rs @@ -3,6 +3,7 @@ use std::fmt::Debug; use hashbrown::HashMap; +use itertools::Itertools; use p3_matrix::{dense::RowMajorMatrixView, stack::VerticalPair}; use serde::{Deserialize, Serialize}; @@ -73,6 +74,11 @@ pub struct ShardProof { pub public_values: Vec>, } +#[derive(Clone, Serialize, Deserialize, PartialEq, PartialOrd, Ord, Eq, Hash)] +pub struct ProofShape { + pub chip_information: Vec<(String, usize, usize)>, +} + impl Debug for ShardProof { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("ShardProof").finish() @@ -148,3 +154,17 @@ impl From<[u32; 8]> for DeferredDigest { DeferredDigest(bytes) } } + +impl ShardProof { + pub fn shape(&self) -> ProofShape { + ProofShape { + chip_information: self + .chip_ordering + .iter() + .sorted_by_key(|(_, idx)| *idx) + .zip(self.opened_values.chips.iter()) + .map(|((name, idx), values)| (name.to_owned(), *idx, values.log_degree)) + .collect(), + } + } +} From b10602a8bb89be6fb59f24fdec30aa00923117c0 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 20:02:08 -0700 Subject: [PATCH 042/268] better cache --- crates/prover/src/lib.rs | 19 ++++++---------- crates/recursion/circuit-v2/src/challenger.rs | 7 ++++++ crates/recursion/circuit-v2/src/lib.rs | 19 +++++++++++++++- .../circuit-v2/src/machine/compress.rs | 17 ++++++++++++-- .../recursion/circuit-v2/src/machine/core.rs | 22 +++++++++++++++++-- crates/stark/src/types.rs | 2 +- 6 files changed, 68 insertions(+), 18 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 983163eb8a..5c60663af8 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -67,8 +67,8 @@ use sp1_recursion_core_v2::{ use sp1_recursion_circuit_v2::{ machine::{ - SP1CompressVerifier, SP1CompressWitnessValues, SP1DeferredWitnessValues, - SP1RecursionWitnessValues, SP1RecursiveVerifier, + SP1CompressShape, SP1CompressVerifier, SP1CompressWitnessValues, SP1DeferredWitnessValues, + SP1RecursionShape, SP1RecursionWitnessValues, SP1RecursiveVerifier, }, witness::Witnessable, }; @@ -114,9 +114,9 @@ pub struct SP1Prover { /// The machine used for proving the wrapping step. pub wrap_prover: C::WrapProver, - pub recursion_programs: Mutex, Arc>>>, + pub recursion_programs: Mutex>>>, - pub compress_programs: Mutex, Arc>>>, + pub compress_programs: Mutex>>>, } impl SP1Prover { @@ -239,10 +239,9 @@ impl SP1Prover { &self, input: &SP1RecursionWitnessValues, ) -> Arc> { - let shapes = input.shard_proofs.iter().map(|proof| proof.shape()).collect::>(); let mut cache = self.recursion_programs.lock().unwrap(); cache - .get_or_insert(shapes, || { + .get_or_insert(input.shape(), || { // Get the operations. let builder_span = tracing::debug_span!("build recursion program").entered(); let mut builder = Builder::::default(); @@ -265,13 +264,9 @@ impl SP1Prover { &self, input: &SP1CompressWitnessValues, ) -> Arc> { - let shapes = - input.vks_and_proofs.iter().map(|(_, proof)| proof.shape()).collect::>(); - let mut cache = self.recursion_programs.lock().unwrap(); - // Compile the program. - + let mut cache = self.compress_programs.lock().unwrap(); cache - .get_or_insert(shapes, || { + .get_or_insert(input.shape(), || { // Get the operations. let builder_span = tracing::debug_span!("build compress program").entered(); let mut builder = Builder::::default(); diff --git a/crates/recursion/circuit-v2/src/challenger.rs b/crates/recursion/circuit-v2/src/challenger.rs index 2ea066920d..af460c0253 100644 --- a/crates/recursion/circuit-v2/src/challenger.rs +++ b/crates/recursion/circuit-v2/src/challenger.rs @@ -20,6 +20,13 @@ pub const RATE: usize = 16; pub trait CanCopyChallenger { fn copy(&self, builder: &mut Builder) -> Self; } + +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct SpongeChallengerShape { + pub input_buffer_len: usize, + pub output_buffer_len: usize, +} + /// Reference: [p3_challenger::CanObserve]. pub trait CanObserveVariable { fn observe(&mut self, builder: &mut Builder, value: V); diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 825e37444b..a1bbee210a 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -7,7 +7,7 @@ use std::{ use challenger::{ CanCopyChallenger, CanObserveVariable, DuplexChallengerVariable, FieldChallengerVariable, - MultiField32ChallengerVariable, + MultiField32ChallengerVariable, SpongeChallengerShape, }; use hash::FieldHasherVariable; use p3_bn254_fr::Bn254Fr; @@ -86,6 +86,8 @@ pub trait BabyBearFriConfig: + FieldChallenger; fn fri_config(&self) -> &FriConfig>; + + fn challenger_shape(challenger: &Self::FriChallenger) -> SpongeChallengerShape; } pub trait BabyBearFriConfigVariable>: @@ -334,6 +336,13 @@ impl BabyBearFriConfig for BabyBearPoseidon2 { fn fri_config(&self) -> &FriConfig> { self.pcs().fri_config() } + + fn challenger_shape(challenger: &Self::FriChallenger) -> SpongeChallengerShape { + SpongeChallengerShape { + input_buffer_len: challenger.input_buffer.len(), + output_buffer_len: challenger.output_buffer.len(), + } + } } impl BabyBearFriConfig for BabyBearPoseidon2Outer { @@ -346,6 +355,14 @@ impl BabyBearFriConfig for BabyBearPoseidon2Outer { fn fri_config(&self) -> &FriConfig> { self.pcs().fri_config() } + + fn challenger_shape(challenger: &Self::FriChallenger) -> SpongeChallengerShape { + unimplemented!("Shape not supported for outer fri challenger"); + // SpongeChallengerShape { + // input_buffer_len: challenger.input_buffer.len(), + // output_buffer_len: challenger.output_buffer.len(), + // } + } } impl>> BabyBearFriConfigVariable diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index b742d65a61..7ddec342a4 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -23,7 +23,7 @@ use sp1_recursion_core_v2::{ use sp1_stark::{ air::{MachineAir, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}, - ShardProof, StarkGenericConfig, StarkMachine, StarkVerifyingKey, Word, DIGEST_SIZE, + ProofShape, ShardProof, StarkGenericConfig, StarkMachine, StarkVerifyingKey, Word, DIGEST_SIZE, }; use crate::{ @@ -31,7 +31,7 @@ use crate::{ constraints::RecursiveVerifierConstraintFolder, stark::{ShardProofVariable, StarkVerifier}, utils::{commit_recursion_public_values, uninit_challenger_pv}, - BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, + BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, }; /// A program to verify a batch of recursive proofs and aggregate their public values. @@ -56,6 +56,12 @@ pub struct SP1CompressWitnessValues { pub is_complete: bool, } +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct SP1CompressShape { + pub proof_shapes: Vec, + pub is_complete: bool, +} + impl SP1CompressVerifier where SC: BabyBearFriConfigVariable, @@ -454,3 +460,10 @@ where commit_recursion_public_values(builder, *compress_public_values); } } + +impl SP1CompressWitnessValues { + pub fn shape(&self) -> SP1CompressShape { + let proof_shapes = self.vks_and_proofs.iter().map(|(_, proof)| proof.shape()).collect(); + SP1CompressShape { proof_shapes, is_complete: self.is_complete } + } +} diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index af1a4ed67e..1c4a8ef2b9 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -15,7 +15,7 @@ use sp1_primitives::consts::WORD_SIZE; use sp1_recursion_core_v2::air::PV_DIGEST_NUM_WORDS; use sp1_stark::{ air::{PublicValues, POSEIDON_NUM_WORDS}, - StarkMachine, Word, + ProofShape, StarkMachine, Word, }; use sp1_stark::{ShardProof, StarkGenericConfig, StarkVerifyingKey}; @@ -31,7 +31,7 @@ use sp1_recursion_core_v2::{ }; use crate::{ - challenger::{CanObserveVariable, DuplexChallengerVariable}, + challenger::{CanObserveVariable, DuplexChallengerVariable, SpongeChallengerShape}, stark::{ShardProofVariable, StarkVerifier}, utils::commit_recursion_public_values, BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, @@ -56,6 +56,13 @@ pub struct SP1RecursionWitnessValues { pub is_complete: bool, } +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct SP1RecursionShape { + pub proof_shapes: Vec, + pub challenger_shapes: Vec, + pub is_complete: bool, +} + /// A program for recursively verifying a batch of SP1 proofs. #[derive(Debug, Clone, Copy)] pub struct SP1RecursiveVerifier { @@ -553,3 +560,14 @@ where } } } + +impl SP1RecursionWitnessValues { + pub fn shape(&self) -> SP1RecursionShape { + let proof_shapes = self.shard_proofs.iter().map(|proof| proof.shape()).collect(); + let challenger_shapes = vec![ + SC::challenger_shape(&self.leaf_challenger), + SC::challenger_shape(&self.initial_reconstruct_challenger), + ]; + SP1RecursionShape { proof_shapes, challenger_shapes, is_complete: self.is_complete } + } +} diff --git a/crates/stark/src/types.rs b/crates/stark/src/types.rs index 5a8d44510d..482ecd1424 100644 --- a/crates/stark/src/types.rs +++ b/crates/stark/src/types.rs @@ -74,7 +74,7 @@ pub struct ShardProof { pub public_values: Vec>, } -#[derive(Clone, Serialize, Deserialize, PartialEq, PartialOrd, Ord, Eq, Hash)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd, Ord, Eq, Hash)] pub struct ProofShape { pub chip_information: Vec<(String, usize, usize)>, } From 3aea880d6fb27f06776cdcda8498752709ba212a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 20:07:26 -0700 Subject: [PATCH 043/268] cache miss log --- crates/prover/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 5c60663af8..a8a7aeb16a 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -242,6 +242,7 @@ impl SP1Prover { let mut cache = self.recursion_programs.lock().unwrap(); cache .get_or_insert(input.shape(), || { + tracing::debug!("Core cache miss"); // Get the operations. let builder_span = tracing::debug_span!("build recursion program").entered(); let mut builder = Builder::::default(); @@ -267,6 +268,7 @@ impl SP1Prover { let mut cache = self.compress_programs.lock().unwrap(); cache .get_or_insert(input.shape(), || { + tracing::debug!("Compress cache miss"); // Get the operations. let builder_span = tracing::debug_span!("build compress program").entered(); let mut builder = Builder::::default(); From 69269b9f85c5f585ccd06f723504f7b71b94db43 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 20:38:45 -0700 Subject: [PATCH 044/268] lower cache size --- crates/prover/src/lib.rs | 145 ++++++++++++++++++++------------------- 1 file changed, 76 insertions(+), 69 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index a8a7aeb16a..2cde78f8d4 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -93,8 +93,8 @@ const COMPRESS_DEGREE: usize = 3; const SHRINK_DEGREE: usize = 9; const WRAP_DEGREE: usize = 17; -const CORE_CACHE_SIZE: usize = 100; -const COMPRESS_CACHE_SIZE: usize = 10; +const CORE_CACHE_SIZE: usize = 10; +const COMPRESS_CACHE_SIZE: usize = 5; pub type CompressAir = RecursionAir; pub type ShrinkAir = RecursionAir; @@ -799,58 +799,63 @@ impl SP1Prover { // Ok(SP1ReduceProof { proof: compress_proof.shard_proofs.pop().unwrap() }) // } - // /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. - // #[instrument(name = "wrap_bn254", level = "info", skip_all)] - // pub fn wrap_bn254( - // &self, - // compressed_proof: SP1ReduceProof, - // opts: SP1ProverOpts, - // ) -> Result, SP1RecursionProverError> { - // let input = SP1RootMemoryLayout { - // machine: self.shrink_prover.machine(), - // proof: compressed_proof.proof, - // is_reduce: false, - // }; + /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. + #[instrument(name = "wrap_bn254", level = "info", skip_all)] + pub fn wrap_bn254( + &self, + compressed_proof: SP1ReduceProof, + opts: SP1ProverOpts, + ) -> Result, SP1RecursionProverError> { + let SP1ReduceProof { vk: compressed_vk, proof: compressed_proof } = compressed_proof; + let input = SP1CompressWitnessValues { + vks_and_proofs: vec![(compressed_vk, compressed_proof)], + is_complete: true, + }; + + let program = self.compress_program(&input); + + // Run the compress program. + let mut runtime = RecursionRuntime::, Challenge, _>::new( + program.clone(), + self.shrink_prover.config().perm.clone(), + ); - // // Run the compress program. - // let mut runtime = RecursionRuntime::, Challenge, _>::new( - // self.wrap_program(), - // self.shrink_prover.config().perm.clone(), - // ); + let mut witness_stream = Vec::new(); + Witnessable::::write(&input, &mut witness_stream); - // let mut witness_stream = Vec::new(); - // witness_stream.extend(input.write()); + runtime.witness_stream = witness_stream.into(); - // runtime.witness_stream = witness_stream.into(); + runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; - // runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; + runtime.print_stats(); + tracing::debug!("Wrap program executed successfully"); - // runtime.print_stats(); - // tracing::debug!("Wrap program executed successfully"); - - // // Prove the wrap program. - // let mut wrap_challenger = self.wrap_prover.config().challenger(); - // let time = std::time::Instant::now(); - // let mut wrap_proof = self - // .wrap_prover - // .prove(self.wrap_pk(), vec![runtime.record], &mut wrap_challenger, opts.recursion_opts) - // .unwrap(); - // let elapsed = time.elapsed(); - // tracing::debug!("Wrap proving time: {:?}", elapsed); - // let mut wrap_challenger = self.wrap_prover.config().challenger(); - // let result = - // self.wrap_prover.machine().verify(self.wrap_vk(), &wrap_proof, &mut wrap_challenger); - // match result { - // Ok(_) => tracing::info!("Proof verified successfully"), - // Err(MachineVerificationError::NonZeroCumulativeSum) => { - // tracing::info!("Proof verification failed: NonZeroCumulativeSum") - // } - // e => panic!("Proof verification failed: {:?}", e), - // } - // tracing::info!("Wrapping successful"); + // Setup the wrap program. + let (wrap_pk, wrap_vk) = + tracing::debug_span!("Setup wrap").in_scope(|| self.wrap_prover.setup(&program)); - // Ok(SP1ReduceProof { proof: wrap_proof.shard_proofs.pop().unwrap() }) - // } + // Prove the wrap program. + let mut wrap_challenger = self.wrap_prover.config().challenger(); + let time = std::time::Instant::now(); + let mut wrap_proof = self + .wrap_prover + .prove(&wrap_pk, vec![runtime.record], &mut wrap_challenger, opts.recursion_opts) + .unwrap(); + let elapsed = time.elapsed(); + tracing::debug!("Wrap proving time: {:?}", elapsed); + let mut wrap_challenger = self.wrap_prover.config().challenger(); + let result = self.wrap_prover.machine().verify(&wrap_vk, &wrap_proof, &mut wrap_challenger); + match result { + Ok(_) => tracing::info!("Proof verified successfully"), + Err(MachineVerificationError::NonZeroCumulativeSum) => { + tracing::info!("Proof verification failed: NonZeroCumulativeSum") + } + e => panic!("Proof verification failed: {:?}", e), + } + tracing::info!("Wrapping successful"); + + Ok(SP1ReduceProof { vk: wrap_vk, proof: wrap_proof.shard_proofs.pop().unwrap() }) + } // /// Wrap the STARK proven over a SNARK-friendly field into a PLONK proof. // #[instrument(name = "wrap_plonk_bn254", level = "info", skip_all)] @@ -1006,34 +1011,36 @@ pub mod tests { // tracing::info!("shrink"); // let shrink_proof = prover.shrink(compressed_proof, opts)?; - // tracing::info!("verify shrink"); - // prover.verify_shrink(&shrink_proof, &vk)?; + let shrink_proof = compressed_proof; - // if test_kind == Test::Shrink { - // return Ok(()); - // } + tracing::info!("verify shrink"); + prover.verify_shrink(&shrink_proof, &vk)?; - // tracing::info!("wrap bn254"); - // let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; - // let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); + if test_kind == Test::Shrink { + return Ok(()); + } - // // Save the proof. - // let mut file = File::create("proof-with-pis.bin").unwrap(); - // file.write_all(bytes.as_slice()).unwrap(); + tracing::info!("wrap bn254"); + let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; + let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); - // // Load the proof. - // let mut file = File::open("proof-with-pis.bin").unwrap(); - // let mut bytes = Vec::new(); - // file.read_to_end(&mut bytes).unwrap(); + // Save the proof. + let mut file = File::create("proof-with-pis.bin").unwrap(); + file.write_all(bytes.as_slice()).unwrap(); - // let wrapped_bn254_proof = bincode::deserialize(&bytes).unwrap(); + // Load the proof. + let mut file = File::open("proof-with-pis.bin").unwrap(); + let mut bytes = Vec::new(); + file.read_to_end(&mut bytes).unwrap(); - // tracing::info!("verify wrap bn254"); - // prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk).unwrap(); + let wrapped_bn254_proof = bincode::deserialize(&bytes).unwrap(); - // if test_kind == Test::Wrap { - // return Ok(()); - // } + tracing::info!("verify wrap bn254"); + prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk).unwrap(); + + if test_kind == Test::Wrap { + return Ok(()); + } // tracing::info!("checking vkey hash babybear"); // let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); From 3d803735cc0c21599947c809076d9c9515420bbf Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 21:10:59 -0700 Subject: [PATCH 045/268] cancel cache --- crates/prover/src/lib.rs | 80 ++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 2cde78f8d4..3ea7c29431 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -239,52 +239,52 @@ impl SP1Prover { &self, input: &SP1RecursionWitnessValues, ) -> Arc> { - let mut cache = self.recursion_programs.lock().unwrap(); - cache - .get_or_insert(input.shape(), || { - tracing::debug!("Core cache miss"); - // Get the operations. - let builder_span = tracing::debug_span!("build recursion program").entered(); - let mut builder = Builder::::default(); - let input = input.read(&mut builder); - SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); - let operations = builder.operations; - builder_span.exit(); - - // Compile the program. - let compiler_span = tracing::debug_span!("compile recursion program").entered(); - let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); - compiler_span.exit(); - program - }) - .clone() + // let mut cache = self.recursion_programs.lock().unwrap(); + // cache + // .get_or_insert(input.shape(), || { + tracing::debug!("Core cache miss"); + // Get the operations. + let builder_span = tracing::debug_span!("build recursion program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); + let operations = builder.operations; + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile recursion program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program + // }) + // .clone() } pub fn compress_program( &self, input: &SP1CompressWitnessValues, ) -> Arc> { - let mut cache = self.compress_programs.lock().unwrap(); - cache - .get_or_insert(input.shape(), || { - tracing::debug!("Compress cache miss"); - // Get the operations. - let builder_span = tracing::debug_span!("build compress program").entered(); - let mut builder = Builder::::default(); - let input = input.read(&mut builder); - SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); - let operations = builder.operations; - builder_span.exit(); - - // Compile the program. - let compiler_span = tracing::debug_span!("compile compress program").entered(); - let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); - compiler_span.exit(); - program - }) - .clone() + // let mut cache = self.compress_programs.lock().unwrap(); + // cache + // .get_or_insert(input.shape(), || { + tracing::debug!("Compress cache miss"); + // Get the operations. + let builder_span = tracing::debug_span!("build compress program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); + let operations = builder.operations; + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile compress program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program + // }) + // .clone() } // pub fn defered_program( From 4b94aafdeb1e0ba1907bf8429971a0f751c3acd6 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 21:52:28 -0700 Subject: [PATCH 046/268] vc --- crates/recursion/circuit-v2/src/stark.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 9f0a07b107..56267c71b9 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -212,17 +212,17 @@ where // Verify the shape of the opening arguments matches the expected values. Self::verify_opening_shape(chip, values).unwrap(); // Verify the constraint evaluation. - Self::verify_constraints( - builder, - chip, - values, - trace_domain, - qc_domains, - zeta, - alpha, - &permutation_challenges, - public_values, - ); + // Self::verify_constraints( + // builder, + // chip, + // values, + // trace_domain, + // qc_domains, + // zeta, + // alpha, + // &permutation_challenges, + // public_values, + // ); } builder.cycle_tracker_v2_exit(); } From c8551224a277b1f52f8e39d25fad229728d87535 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 22:11:37 -0700 Subject: [PATCH 047/268] stacker --- crates/recursion/circuit-v2/src/stark.rs | 27 ++++++++++++++---------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 56267c71b9..f559a61e32 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -40,6 +40,9 @@ pub struct ShardProofVariable, SC: BabyBearFriConf pub const EMPTY: usize = 0x_1111_1111; +const CONSTRAINT_RED_ZONE: usize = 16 * 1024 * 1024; +const CONSTRAINT_STACK_SIZE: usize = 16 * 1024 * 1024; + #[derive(Debug, Clone, Copy)] pub struct StarkVerifier { _phantom: std::marker::PhantomData<(C, SC, A)>, @@ -212,17 +215,19 @@ where // Verify the shape of the opening arguments matches the expected values. Self::verify_opening_shape(chip, values).unwrap(); // Verify the constraint evaluation. - // Self::verify_constraints( - // builder, - // chip, - // values, - // trace_domain, - // qc_domains, - // zeta, - // alpha, - // &permutation_challenges, - // public_values, - // ); + stacker::maybe_grow(CONSTRAINT_RED_ZONE, CONSTRAINT_STACK_SIZE, || { + Self::verify_constraints( + builder, + chip, + values, + trace_domain, + qc_domains, + zeta, + alpha, + &permutation_challenges, + public_values, + ); + }); } builder.cycle_tracker_v2_exit(); } From fe77d19ebed3ee3dc0bb40f1b074d8e4bce33e13 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 22:39:40 -0700 Subject: [PATCH 048/268] cache back --- crates/prover/src/lib.rs | 84 ++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 3ea7c29431..4c6f494305 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -93,8 +93,8 @@ const COMPRESS_DEGREE: usize = 3; const SHRINK_DEGREE: usize = 9; const WRAP_DEGREE: usize = 17; -const CORE_CACHE_SIZE: usize = 10; -const COMPRESS_CACHE_SIZE: usize = 5; +const CORE_CACHE_SIZE: usize = 100; +const COMPRESS_CACHE_SIZE: usize = 10; pub type CompressAir = RecursionAir; pub type ShrinkAir = RecursionAir; @@ -239,52 +239,52 @@ impl SP1Prover { &self, input: &SP1RecursionWitnessValues, ) -> Arc> { - // let mut cache = self.recursion_programs.lock().unwrap(); - // cache - // .get_or_insert(input.shape(), || { - tracing::debug!("Core cache miss"); - // Get the operations. - let builder_span = tracing::debug_span!("build recursion program").entered(); - let mut builder = Builder::::default(); - let input = input.read(&mut builder); - SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); - let operations = builder.operations; - builder_span.exit(); - - // Compile the program. - let compiler_span = tracing::debug_span!("compile recursion program").entered(); - let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); - compiler_span.exit(); - program - // }) - // .clone() + let mut cache = self.recursion_programs.lock().unwrap(); + cache + .get_or_insert(input.shape(), || { + tracing::debug!("Core cache miss"); + // Get the operations. + let builder_span = tracing::debug_span!("build recursion program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); + let operations = builder.operations; + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile recursion program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program + }) + .clone() } pub fn compress_program( &self, input: &SP1CompressWitnessValues, ) -> Arc> { - // let mut cache = self.compress_programs.lock().unwrap(); - // cache - // .get_or_insert(input.shape(), || { - tracing::debug!("Compress cache miss"); - // Get the operations. - let builder_span = tracing::debug_span!("build compress program").entered(); - let mut builder = Builder::::default(); - let input = input.read(&mut builder); - SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); - let operations = builder.operations; - builder_span.exit(); - - // Compile the program. - let compiler_span = tracing::debug_span!("compile compress program").entered(); - let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); - compiler_span.exit(); - program - // }) - // .clone() + let mut cache = self.compress_programs.lock().unwrap(); + cache + .get_or_insert(input.shape(), || { + tracing::debug!("Compress cache miss"); + // Get the operations. + let builder_span = tracing::debug_span!("build compress program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); + let operations = builder.operations; + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile compress program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program + }) + .clone() } // pub fn defered_program( From 1d79dee5e19dc187086b8e24a6be5648a113b352 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 22:50:01 -0700 Subject: [PATCH 049/268] count misses --- crates/prover/src/lib.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 4c6f494305..2e6af8381f 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -23,7 +23,11 @@ use std::{ env, num::NonZeroUsize, path::Path, - sync::{mpsc::sync_channel, Arc, Mutex, OnceLock}, + sync::{ + atomic::{AtomicUsize, Ordering}, + mpsc::sync_channel, + Arc, Mutex, OnceLock, + }, thread, }; @@ -116,7 +120,11 @@ pub struct SP1Prover { pub recursion_programs: Mutex>>>, + pub recursion_cache_misses: AtomicUsize, + pub compress_programs: Mutex>>>, + + pub compress_cache_misses: AtomicUsize, } impl SP1Prover { @@ -166,7 +174,9 @@ impl SP1Prover { shrink_prover, wrap_prover, recursion_programs: Mutex::new(LruCache::new(core_cache_size)), + recursion_cache_misses: AtomicUsize::new(0), compress_programs: Mutex::new(LruCache::new(compress_cache_size)), + compress_cache_misses: AtomicUsize::new(0), } } @@ -242,7 +252,8 @@ impl SP1Prover { let mut cache = self.recursion_programs.lock().unwrap(); cache .get_or_insert(input.shape(), || { - tracing::debug!("Core cache miss"); + let misses = self.recursion_cache_misses.fetch_add(1, Ordering::Relaxed); + tracing::debug!("Core cache miss, misses: {}", misses); // Get the operations. let builder_span = tracing::debug_span!("build recursion program").entered(); let mut builder = Builder::::default(); @@ -268,7 +279,8 @@ impl SP1Prover { let mut cache = self.compress_programs.lock().unwrap(); cache .get_or_insert(input.shape(), || { - tracing::debug!("Compress cache miss"); + let misses = self.compress_cache_misses.fetch_add(1, Ordering::Relaxed); + tracing::debug!("Compress cache miss, misses: {}", misses); // Get the operations. let builder_span = tracing::debug_span!("build compress program").entered(); let mut builder = Builder::::default(); From 3c8d3c6233c9d533c54e16cf40b502582e652c60 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 23:07:34 -0700 Subject: [PATCH 050/268] debug --- crates/stark/src/verifier.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/stark/src/verifier.rs b/crates/stark/src/verifier.rs index 43bbf61798..fcd1102284 100644 --- a/crates/stark/src/verifier.rs +++ b/crates/stark/src/verifier.rs @@ -141,19 +141,19 @@ impl>> Verifier { }) .collect::>(); - config - .pcs() - .verify( - vec![ - (vk.commit.clone(), preprocessed_domains_points_and_opens), - (main_commit.clone(), main_domains_points_and_opens), - (permutation_commit.clone(), perm_domains_points_and_opens), - (quotient_commit.clone(), quotient_domains_points_and_opens), - ], - opening_proof, - challenger, - ) - .map_err(|e| VerificationError::InvalidopeningArgument(e))?; + // config + // .pcs() + // .verify( + // vec![ + // (vk.commit.clone(), preprocessed_domains_points_and_opens), + // (main_commit.clone(), main_domains_points_and_opens), + // (permutation_commit.clone(), perm_domains_points_and_opens), + // (quotient_commit.clone(), quotient_domains_points_and_opens), + // ], + // opening_proof, + // challenger, + // ) + // .map_err(|e| VerificationError::InvalidopeningArgument(e))?; // Verify the constrtaint evaluations. for (chip, trace_domain, qc_domains, values) in From 1e445afaabc89ba6ee9016c6f3668f69fd1d7d98 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 23:12:57 -0700 Subject: [PATCH 051/268] verify --- crates/stark/src/verifier.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/stark/src/verifier.rs b/crates/stark/src/verifier.rs index fcd1102284..43bbf61798 100644 --- a/crates/stark/src/verifier.rs +++ b/crates/stark/src/verifier.rs @@ -141,19 +141,19 @@ impl>> Verifier { }) .collect::>(); - // config - // .pcs() - // .verify( - // vec![ - // (vk.commit.clone(), preprocessed_domains_points_and_opens), - // (main_commit.clone(), main_domains_points_and_opens), - // (permutation_commit.clone(), perm_domains_points_and_opens), - // (quotient_commit.clone(), quotient_domains_points_and_opens), - // ], - // opening_proof, - // challenger, - // ) - // .map_err(|e| VerificationError::InvalidopeningArgument(e))?; + config + .pcs() + .verify( + vec![ + (vk.commit.clone(), preprocessed_domains_points_and_opens), + (main_commit.clone(), main_domains_points_and_opens), + (permutation_commit.clone(), perm_domains_points_and_opens), + (quotient_commit.clone(), quotient_domains_points_and_opens), + ], + opening_proof, + challenger, + ) + .map_err(|e| VerificationError::InvalidopeningArgument(e))?; // Verify the constrtaint evaluations. for (chip, trace_domain, qc_domains, values) in From 9951e334ba36644c676380629de631504b34a018 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 23:32:16 -0700 Subject: [PATCH 052/268] merge dev and fix --- crates/recursion/circuit-v2/src/machine/compress.rs | 13 +++++++++++++ crates/recursion/circuit-v2/src/machine/core.rs | 5 +++++ crates/recursion/circuit-v2/src/machine/deferred.rs | 9 +++++++-- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 7ddec342a4..433c883068 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -111,6 +111,12 @@ where array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); let mut pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; let mut shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + + let compress_vk_digest: [Felt<_>; DIGEST_SIZE] = + array::from_fn(|_| builder.eval(C::F::zero())); + + let mut exit_code: Felt<_> = builder.uninit(); + let mut execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; let mut initial_reconstruct_challenger_values: ChallengerPublicValues> = unsafe { uninit_challenger_pv(builder) }; @@ -155,6 +161,9 @@ where let current_public_values: &RecursionPublicValues> = shard_proof.public_values.as_slice().borrow(); + // Set the exit code, it is already constrained to be zero in the previous proof. + exit_code = current_public_values.exit_code; + if i == 0 { // Initialize global and accumulated values. @@ -441,8 +450,12 @@ where compress_public_values.cumulative_sum = cumulative_sum; // Assign the `is_complete` flag. compress_public_values.is_complete = is_complete; + // Set the compress vk digest. + compress_public_values.compress_vk_digest = compress_vk_digest; // TODO: set the digest according to the previous values. compress_public_values.digest = array::from_fn(|_| builder.eval(C::F::zero())); + // Set the exit code. + compress_public_values.exit_code = exit_code; // // If the proof is complete, make completeness assertions and set the flag. Otherwise, check // // the flag is zero and set the public value to zero. diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 1c4a8ef2b9..715938b184 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -131,6 +131,10 @@ where let mut start_pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; let mut current_pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + // Set compress_vk_digest to be zero for now. + let compress_vk_digest: [Felt<_>; DIGEST_SIZE] = + array::from_fn(|_| builder.eval(C::F::zero())); + // Initialize memory initialization and finalization variables. let mut initial_previous_init_addr_bits: [Felt<_>; 32] = unsafe { MaybeUninit::zeroed().assume_init() }; @@ -544,6 +548,7 @@ where recursion_public_values.end_reconstruct_deferred_digest = end_deferred_digest; recursion_public_values.exit_code = exit_code; recursion_public_values.is_complete = is_complete; + recursion_public_values.compress_vk_digest = compress_vk_digest; // TODO: set the digest according to the previous values. recursion_public_values.digest = array::from_fn(|_| builder.eval(C::F::zero())); diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 607d24a0b0..c4822aa90d 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -7,6 +7,7 @@ use std::{ use p3_air::Air; use p3_baby_bear::BabyBear; use p3_commit::Mmcs; +use p3_field::AbstractField; use p3_matrix::dense::RowMajorMatrix; use sp1_primitives::consts::WORD_SIZE; @@ -107,11 +108,11 @@ where is_complete, } = input; - let mut deferred__public_values_stream: Vec> = (0..RECURSIVE_PROOF_NUM_PV_ELTS) + let mut deferred_public_values_stream: Vec> = (0..RECURSIVE_PROOF_NUM_PV_ELTS) .map(|_| unsafe { MaybeUninit::zeroed().assume_init() }) .collect(); let deferred_public_values: &mut RecursionPublicValues<_> = - deferred__public_values_stream.as_mut_slice().borrow_mut(); + deferred_public_values_stream.as_mut_slice().borrow_mut(); // Initialize the start of deferred digests. deferred_public_values.start_reconstruct_deferred_digest = @@ -189,6 +190,10 @@ where deferred_public_values.leaf_challenger = values; deferred_public_values.start_reconstruct_challenger = values; deferred_public_values.end_reconstruct_challenger = values; + // Set the exit code to be zero for now. + deferred_public_values.exit_code = builder.eval(C::F::zero()); + // Set the compress vk digest to be zero for now. + deferred_public_values.compress_vk_digest = array::from_fn(|_| builder.eval(C::F::zero())); // Assign the deffered proof digests. deferred_public_values.end_reconstruct_deferred_digest = reconstruct_deferred_digest; From a4a53d7407e9a18438eeca9b4dbe67f8afa11303 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 22 Aug 2024 23:33:19 -0700 Subject: [PATCH 053/268] typi --- crates/recursion/compiler/src/circuit/compiler.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 2d830e53b7..ee930b0a87 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -730,7 +730,7 @@ macro_rules! impl_reg_vaddr { }; } -// These three types have `.fp()` but they don't share a trait. +// These three types wrap a `u32` but they don't share a trait. impl_reg_vaddr!(Var); impl_reg_vaddr!(Felt); impl_reg_vaddr!(Ext); From 1e3728d3a519ca6bd9385b6c77c8ce96dd9e2f26 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 01:02:30 -0700 Subject: [PATCH 054/268] shrink --- crates/prover/src/build.rs | 309 +++++++++--------- crates/prover/src/lib.rs | 158 +++++---- .../recursion/circuit-v2/src/build_wrap_v2.rs | 11 +- crates/recursion/core-v2/src/machine.rs | 11 +- 4 files changed, 257 insertions(+), 232 deletions(-) diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index b3581da4b9..0b2af036ca 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -1,149 +1,162 @@ -// use std::{borrow::Borrow, path::PathBuf}; - -// use p3_baby_bear::BabyBear; -// use sp1_core_executor::SP1Context; -// use sp1_core_machine::io::SP1Stdin; -// pub use sp1_recursion_circuit::{stark::build_wrap_circuit, witness::Witnessable}; -// pub use sp1_recursion_compiler::ir::Witness; -// use sp1_recursion_compiler::{config::OuterConfig, constraints::Constraint}; -// use sp1_recursion_core::air::RecursionPublicValues; +use std::{borrow::Borrow, path::PathBuf}; + +use p3_baby_bear::BabyBear; +use sp1_core_executor::SP1Context; +use sp1_core_machine::io::SP1Stdin; +use sp1_recursion_compiler::{config::OuterConfig, constraints::Constraint}; + // pub use sp1_recursion_core::stark::utils::sp1_dev_mode; -// use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; -// use sp1_stark::{SP1ProverOpts, ShardProof, StarkVerifyingKey}; - -// use crate::{ -// utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, -// OuterSC, SP1Prover, -// }; - -// /// Tries to build the PLONK artifacts inside the development directory. -// pub fn try_build_plonk_bn254_artifacts_dev( -// template_vk: &StarkVerifyingKey, -// template_proof: &ShardProof, -// ) -> PathBuf { -// let build_dir = plonk_bn254_artifacts_dev_dir(); -// println!("[sp1] building plonk bn254 artifacts in development mode"); -// build_plonk_bn254_artifacts(template_vk, template_proof, &build_dir); -// build_dir -// } - -// /// Tries to build the groth16 bn254 artifacts in the current environment. -// pub fn try_build_groth16_bn254_artifacts_dev( -// template_vk: &StarkVerifyingKey, -// template_proof: &ShardProof, -// ) -> PathBuf { -// let build_dir = groth16_bn254_artifacts_dev_dir(); -// println!("[sp1] building groth16 bn254 artifacts in development mode"); -// build_groth16_bn254_artifacts(template_vk, template_proof, &build_dir); -// build_dir -// } - -// /// Gets the directory where the PLONK artifacts are installed in development mode. -// pub fn plonk_bn254_artifacts_dev_dir() -> PathBuf { -// dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") -// } - -// /// Gets the directory where the groth16 artifacts are installed in development mode. -// pub fn groth16_bn254_artifacts_dev_dir() -> PathBuf { -// dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") -// } - -// /// Build the plonk bn254 artifacts to the given directory for the given verification key and -// /// template proof. -// pub fn build_plonk_bn254_artifacts( -// template_vk: &StarkVerifyingKey, -// template_proof: &ShardProof, -// build_dir: impl Into, -// ) { -// let build_dir = build_dir.into(); -// std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); -// let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); -// PlonkBn254Prover::build(constraints, witness, build_dir); -// } - -// /// Build the groth16 bn254 artifacts to the given directory for the given verification key and -// /// template proof. -// pub fn build_groth16_bn254_artifacts( -// template_vk: &StarkVerifyingKey, -// template_proof: &ShardProof, -// build_dir: impl Into, -// ) { -// let build_dir = build_dir.into(); -// std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); -// let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); -// Groth16Bn254Prover::build(constraints, witness, build_dir); -// } - -// /// Builds the plonk bn254 artifacts to the given directory. -// /// -// /// This may take a while as it needs to first generate a dummy proof and then it needs to compile -// /// the circuit. -// pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { -// let (wrap_vk, wrapped_proof) = dummy_proof(); -// crate::build::build_plonk_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); -// } - -// /// Builds the groth16 bn254 artifacts to the given directory. -// /// -// /// This may take a while as it needs to first generate a dummy proof and then it needs to compile -// /// the circuit. -// pub fn build_groth16_bn254_artifacts_with_dummy(build_dir: impl Into) { -// let (wrap_vk, wrapped_proof) = dummy_proof(); -// crate::build::build_groth16_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); -// } - -// /// Build the verifier constraints and template witness for the circuit. -// pub fn build_constraints_and_witness( -// template_vk: &StarkVerifyingKey, -// template_proof: &ShardProof, -// ) -> (Vec, Witness) { -// tracing::info!("building verifier constraints"); -// let constraints = tracing::info_span!("wrap circuit") -// .in_scope(|| build_wrap_circuit(template_vk, template_proof.clone())); - -// let pv: &RecursionPublicValues = template_proof.public_values.as_slice().borrow(); -// let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); -// let committed_values_digest_bytes: [BabyBear; 32] = -// words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); -// let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); - -// tracing::info!("building template witness"); -// let mut witness = Witness::default(); -// template_proof.write(&mut witness); -// witness.write_commited_values_digest(committed_values_digest); -// witness.write_vkey_hash(vkey_hash); - -// (constraints, witness) -// } - -// /// Generate a dummy proof that we can use to build the circuit. We need this to know the shape of -// /// the proof. -// pub fn dummy_proof() -> (StarkVerifyingKey, ShardProof) { -// let elf = include_bytes!("../elf/riscv32im-succinct-zkvm-elf"); - -// tracing::info!("initializing prover"); -// let prover: SP1Prover = SP1Prover::new(); -// let opts = SP1ProverOpts::default(); -// let context = SP1Context::default(); - -// tracing::info!("setup elf"); -// let (pk, vk) = prover.setup(elf); - -// tracing::info!("prove core"); -// let mut stdin = SP1Stdin::new(); -// stdin.write(&500u32); -// let core_proof = prover.prove_core(&pk, &stdin, opts, context).unwrap(); - -// tracing::info!("compress"); -// let compressed_proof = prover.compress(&vk, core_proof, vec![], opts).unwrap(); - -// tracing::info!("shrink"); -// let shrink_proof = prover.shrink(compressed_proof, opts).unwrap(); - -// tracing::info!("wrap"); -// let wrapped_proof = prover.wrap_bn254(shrink_proof, opts).unwrap(); - -// (prover.wrap_keys.into_inner().unwrap().1, wrapped_proof.proof) -// } - -fn main() {} + +pub use sp1_recursion_circuit_v2::{ + build_wrap_v2::build_wrap_circuit_v2_with as build_wrap_circuit_with, + witness::{OuterWitness, Witnessable}, +}; + +use sp1_recursion_core_v2::air::RecursionPublicValues; + +use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; +use sp1_stark::{InnerVal, SP1ProverOpts, ShardProof, StarkVerifyingKey}; + +use crate::{ + utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, + OuterSC, SP1Prover, WrapAir, WRAP_DEGREE, +}; + +/// Tries to build the PLONK artifacts inside the development directory. +pub fn try_build_plonk_bn254_artifacts_dev( + template_vk: &StarkVerifyingKey, + template_proof: &ShardProof, +) -> PathBuf { + let build_dir = plonk_bn254_artifacts_dev_dir(); + println!("[sp1] building plonk bn254 artifacts in development mode"); + build_plonk_bn254_artifacts(template_vk, template_proof, &build_dir); + build_dir +} + +/// Tries to build the groth16 bn254 artifacts in the current environment. +pub fn try_build_groth16_bn254_artifacts_dev( + template_vk: &StarkVerifyingKey, + template_proof: &ShardProof, +) -> PathBuf { + let build_dir = groth16_bn254_artifacts_dev_dir(); + println!("[sp1] building groth16 bn254 artifacts in development mode"); + build_groth16_bn254_artifacts(template_vk, template_proof, &build_dir); + build_dir +} + +/// Gets the directory where the PLONK artifacts are installed in development mode. +pub fn plonk_bn254_artifacts_dev_dir() -> PathBuf { + dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") +} + +/// Gets the directory where the groth16 artifacts are installed in development mode. +pub fn groth16_bn254_artifacts_dev_dir() -> PathBuf { + dirs::home_dir().unwrap().join(".sp1").join("circuits").join("dev") +} + +/// Build the plonk bn254 artifacts to the given directory for the given verification key and +/// template proof. +pub fn build_plonk_bn254_artifacts( + template_vk: &StarkVerifyingKey, + template_proof: &ShardProof, + build_dir: impl Into, +) { + let build_dir = build_dir.into(); + std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); + let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); + PlonkBn254Prover::build(constraints, witness, build_dir); +} + +/// Build the groth16 bn254 artifacts to the given directory for the given verification key and +/// template proof. +pub fn build_groth16_bn254_artifacts( + template_vk: &StarkVerifyingKey, + template_proof: &ShardProof, + build_dir: impl Into, +) { + let build_dir = build_dir.into(); + std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); + let (constraints, witness) = build_constraints_and_witness(template_vk, template_proof); + Groth16Bn254Prover::build(constraints, witness, build_dir); +} + +/// Builds the plonk bn254 artifacts to the given directory. +/// +/// This may take a while as it needs to first generate a dummy proof and then it needs to compile +/// the circuit. +pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { + let (wrap_vk, wrapped_proof) = dummy_proof(); + crate::build::build_plonk_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); +} + +/// Builds the groth16 bn254 artifacts to the given directory. +/// +/// This may take a while as it needs to first generate a dummy proof and then it needs to compile +/// the circuit. +pub fn build_groth16_bn254_artifacts_with_dummy(build_dir: impl Into) { + let (wrap_vk, wrapped_proof) = dummy_proof(); + crate::build::build_groth16_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); +} + +/// Build the verifier constraints and template witness for the circuit. +pub fn build_constraints_and_witness( + template_vk: &StarkVerifyingKey, + template_proof: &ShardProof, +) -> (Vec, OuterWitness) { + tracing::info!("building verifier constraints"); + let constraints = tracing::info_span!("wrap circuit") + .in_scope(|| build_wrap_circuit(template_vk, template_proof)); + + // let pv: &RecursionPublicValues = template_proof.public_values.as_slice().borrow(); + // let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); + // let committed_values_digest_bytes: [BabyBear; 32] = + // words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); + // let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); + + tracing::info!("building template witness"); + let mut witness = OuterWitness::default(); + template_proof.write(&mut witness); + // witness.write_commited_values_digest(committed_values_digest); + // witness.write_vkey_hash(vkey_hash); + + (constraints, witness) +} + +/// Generate a dummy proof that we can use to build the circuit. We need this to know the shape of +/// the proof. +pub fn dummy_proof() -> (StarkVerifyingKey, ShardProof) { + let elf = include_bytes!("../elf/riscv32im-succinct-zkvm-elf"); + + tracing::info!("initializing prover"); + let prover: SP1Prover = SP1Prover::new(); + let opts = SP1ProverOpts::default(); + let context = SP1Context::default(); + + tracing::info!("setup elf"); + let (pk, vk) = prover.setup(elf); + + tracing::info!("prove core"); + let mut stdin = SP1Stdin::new(); + stdin.write(&500u32); + let core_proof = prover.prove_core(&pk, &stdin, opts, context).unwrap(); + + tracing::info!("compress"); + let compressed_proof = prover.compress(&vk, core_proof, vec![], opts).unwrap(); + + tracing::info!("shrink"); + let shrink_proof = prover.shrink(compressed_proof, opts).unwrap(); + + tracing::info!("wrap"); + let wrapped_proof = prover.wrap_bn254(shrink_proof, opts).unwrap(); + + (wrapped_proof.vk, wrapped_proof.proof) +} + +fn build_wrap_circuit( + template_vk: &StarkVerifyingKey, + template_proof: &ShardProof, +) -> Vec { + let machine = WrapAir::machine(OuterSC::default()); + + build_wrap_circuit_with::(template_vk, template_proof.clone(), machine) +} diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 2e6af8381f..0c22786b51 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -299,6 +299,26 @@ impl SP1Prover { .clone() } + pub fn shrink_program( + &self, + input: &SP1CompressWitnessValues, + ) -> Arc> { + // Get the operations. + let builder_span = tracing::debug_span!("build compress program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1CompressVerifier::verify(&mut builder, self.shrink_prover.machine(), input); + let operations = builder.operations; + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile compress program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program + } + // pub fn defered_program( // &self, // input: &SP1DeferredWitnessValues, @@ -766,50 +786,50 @@ impl SP1Prover { Ok(SP1ReduceProof { vk, proof }) } - // /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. - // #[instrument(name = "shrink", level = "info", skip_all)] - // pub fn shrink( - // &self, - // reduced_proof: SP1ReduceProof, - // opts: SP1ProverOpts, - // ) -> Result, SP1RecursionProverError> { - // // Make the compress proof. - // let input = SP1RootMemoryLayout { - // machine: self.compress_prover.machine(), - // proof: reduced_proof.proof, - // is_reduce: true, - // }; - - // // Run the compress program. - // let mut runtime = RecursionRuntime::, Challenge, _>::new( - // self.shrink_program(), - // self.shrink_prover.config().perm.clone(), - // ); + /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. + #[instrument(name = "shrink", level = "info", skip_all)] + pub fn shrink( + &self, + reduced_proof: SP1ReduceProof, + opts: SP1ProverOpts, + ) -> Result, SP1RecursionProverError> { + // Make the compress proof. + let SP1ReduceProof { vk: compressed_vk, proof: compressed_proof } = reduced_proof; + let input = SP1CompressWitnessValues { + vks_and_proofs: vec![(compressed_vk, compressed_proof)], + is_complete: true, + }; - // let mut witness_stream = Vec::new(); - // witness_stream.extend(input.write()); + let program = self.compress_program(&input); - // runtime.witness_stream = witness_stream.into(); + // Run the compress program. + let mut runtime = RecursionRuntime::, Challenge, _>::new( + program.clone(), + self.shrink_prover.config().perm.clone(), + ); - // runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; + let mut witness_stream = Vec::new(); + Witnessable::::write(&input, &mut witness_stream); - // runtime.print_stats(); - // tracing::debug!("Compress program executed successfully"); + runtime.witness_stream = witness_stream.into(); - // // Prove the compress program. - // let mut compress_challenger = self.shrink_prover.config().challenger(); - // let mut compress_proof = self - // .shrink_prover - // .prove( - // self.shrink_pk(), - // vec![runtime.record], - // &mut compress_challenger, - // opts.recursion_opts, - // ) - // .unwrap(); + runtime.run().map_err(|e| SP1RecursionProverError::RuntimeError(e.to_string()))?; - // Ok(SP1ReduceProof { proof: compress_proof.shard_proofs.pop().unwrap() }) - // } + runtime.print_stats(); + tracing::debug!("Shrink program executed successfully"); + + let (shrink_pk, shrink_vk) = + tracing::debug_span!("setup shrink").in_scope(|| self.shrink_prover.setup(&program)); + + // Prove the compress program. + let mut compress_challenger = self.shrink_prover.config().challenger(); + let mut compress_proof = self + .shrink_prover + .prove(&shrink_pk, vec![runtime.record], &mut compress_challenger, opts.recursion_opts) + .unwrap(); + + Ok(SP1ReduceProof { vk: shrink_vk, proof: compress_proof.shard_proofs.pop().unwrap() }) + } /// Wrap a reduce proof into a STARK proven over a SNARK-friendly field. #[instrument(name = "wrap_bn254", level = "info", skip_all)] @@ -824,7 +844,7 @@ impl SP1Prover { is_complete: true, }; - let program = self.compress_program(&input); + let program = self.shrink_program(&input); // Run the compress program. let mut runtime = RecursionRuntime::, Challenge, _>::new( @@ -869,34 +889,34 @@ impl SP1Prover { Ok(SP1ReduceProof { vk: wrap_vk, proof: wrap_proof.shard_proofs.pop().unwrap() }) } - // /// Wrap the STARK proven over a SNARK-friendly field into a PLONK proof. - // #[instrument(name = "wrap_plonk_bn254", level = "info", skip_all)] - // pub fn wrap_plonk_bn254( - // &self, - // proof: SP1ReduceProof, - // build_dir: &Path, - // ) -> PlonkBn254Proof { - // let vkey_digest = proof.sp1_vkey_digest_bn254(); - // let commited_values_digest = proof.sp1_commited_values_digest_bn254(); - - // let mut witness = Witness::default(); - // proof.proof.write(&mut witness); - // witness.write_commited_values_digest(commited_values_digest); - // witness.write_vkey_hash(vkey_digest); - - // let prover = PlonkBn254Prover::new(); - // let proof = prover.prove(witness, build_dir.to_path_buf()); - - // // Verify the proof. - // prover.verify( - // &proof, - // &vkey_digest.as_canonical_biguint(), - // &commited_values_digest.as_canonical_biguint(), - // build_dir, - // ); + /// Wrap the STARK proven over a SNARK-friendly field into a PLONK proof. + #[instrument(name = "wrap_plonk_bn254", level = "info", skip_all)] + pub fn wrap_plonk_bn254( + &self, + proof: SP1ReduceProof, + build_dir: &Path, + ) -> PlonkBn254Proof { + let vkey_digest = proof.sp1_vkey_digest_bn254(); + let commited_values_digest = proof.sp1_commited_values_digest_bn254(); + + let mut witness = Witness::default(); + proof.proof.write(&mut witness); + witness.write_commited_values_digest(commited_values_digest); + witness.write_vkey_hash(vkey_digest); + + let prover = PlonkBn254Prover::new(); + let proof = prover.prove(witness, build_dir.to_path_buf()); + + // Verify the proof. + prover.verify( + &proof, + &vkey_digest.as_canonical_biguint(), + &commited_values_digest.as_canonical_biguint(), + build_dir, + ); - // proof - // } + proof + } // /// Wrap the STARK proven over a SNARK-friendly field into a Groth16 proof. // #[instrument(name = "wrap_groth16_bn254", level = "info", skip_all)] @@ -1020,10 +1040,8 @@ pub mod tests { return Ok(()); } - // tracing::info!("shrink"); - // let shrink_proof = prover.shrink(compressed_proof, opts)?; - - let shrink_proof = compressed_proof; + tracing::info!("shrink"); + let shrink_proof = prover.shrink(compressed_proof, opts)?; tracing::info!("verify shrink"); prover.verify_shrink(&shrink_proof, &vk)?; diff --git a/crates/recursion/circuit-v2/src/build_wrap_v2.rs b/crates/recursion/circuit-v2/src/build_wrap_v2.rs index f5cc231baa..bfeeb6fdd4 100644 --- a/crates/recursion/circuit-v2/src/build_wrap_v2.rs +++ b/crates/recursion/circuit-v2/src/build_wrap_v2.rs @@ -41,7 +41,7 @@ type OuterDigestVariable = [Var<::N>; DIGEST_SIZE]; /// A function to build the circuit for the final wrap layer using the architecture of core-v2. /// /// For now, the witnessing logic is not implemented and we just witness via constant proof variables. -pub fn build_wrap_circuit_v2( +pub fn build_wrap_circuit_v2_with( wrap_vk: &StarkVerifyingKey, template_proof: ShardProof, outer_machine: StarkMachine>, @@ -340,7 +340,7 @@ pub mod tests { Digest, TwoAdicPcsMatsVariable, TwoAdicPcsRoundVariable, }; - use super::{build_wrap_circuit_v2, const_two_adic_pcs_proof}; + use super::{build_wrap_circuit_v2_with, const_two_adic_pcs_proof}; fn test_machine(machine_maker: F) where @@ -369,8 +369,11 @@ pub mod tests { let result = run_test_machine(vec![runtime.record], machine, pk, vk.clone()).unwrap(); let machine = machine_maker(); - let constraints = - build_wrap_circuit_v2::(&vk, result.shard_proofs[0].clone(), machine); + let constraints = build_wrap_circuit_v2_with::( + &vk, + result.shard_proofs[0].clone(), + machine, + ); let pv: &RecursionPublicValues<_> = result.shard_proofs[0].public_values.as_slice().borrow(); diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index 5208df3b14..e93d6dc27f 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -25,18 +25,13 @@ pub enum RecursionAir< const DEGREE: usize, const COL_PADDING: usize, > { - // Program(ProgramChip), MemoryConst(MemoryConstChip), MemoryVar(MemoryVarChip), BaseAlu(BaseAluChip), ExtAlu(ExtAluChip), - // Cpu(CpuChip), - // MemoryGlobal(MemoryGlobalChip), Poseidon2Skinny(Poseidon2SkinnyChip), Poseidon2Wide(Poseidon2WideChip), FriFold(FriFoldChip), - // RangeCheck(RangeCheckChip), - // Multi(MultiChip), ExpReverseBitsLen(ExpReverseBitsLenChip), PublicValues(PublicValuesChip), DummyWide(DummyChip), @@ -103,9 +98,7 @@ impl, const DEGREE: usize, const COL_P RecursionAir::BaseAlu(BaseAluChip::default()), RecursionAir::ExtAlu(ExtAluChip::default()), RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), - // RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - // RecursionAir::FriFold(FriFoldChip::::default()), RecursionAir::PublicValues(PublicValuesChip::default()), ] } @@ -117,16 +110,14 @@ impl, const DEGREE: usize, const COL_P RecursionAir::MemoryVar(MemoryVarChip::default()), RecursionAir::BaseAlu(BaseAluChip::default()), RecursionAir::ExtAlu(ExtAluChip::default()), - // RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - // RecursionAir::FriFold(FriFoldChip::::default()), RecursionAir::PublicValues(PublicValuesChip::default()), ] } pub fn get_all_with_padding( - fri_fold_padding: usize, + _fri_fold_padding: usize, poseidon2_padding: usize, erbl_padding: usize, ) -> Vec { From ef2c7ca19fcc876286bee0f51748aaf12e9adf6b Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 02:20:25 -0700 Subject: [PATCH 055/268] fix deferred --- crates/core/executor/src/io.rs | 3 +- crates/core/executor/src/state.rs | 8 +- crates/core/executor/src/subproof.rs | 3 + crates/core/executor/src/syscalls/verify.rs | 4 +- crates/core/machine/src/io.rs | 9 +- crates/core/machine/src/utils/prove.rs | 2 +- crates/prover/src/build.rs | 2 +- crates/prover/src/lib.rs | 303 ++++++++++-------- crates/prover/src/types.rs | 2 +- crates/prover/src/verify.rs | 41 +-- .../circuit-v2/src/machine/deferred.rs | 16 +- crates/sdk/src/proof.rs | 6 +- crates/sdk/src/provers/cpu.rs | 2 +- crates/sdk/src/provers/cuda.rs | 2 +- crates/sdk/src/provers/mod.rs | 2 +- 15 files changed, 221 insertions(+), 184 deletions(-) diff --git a/crates/core/executor/src/io.rs b/crates/core/executor/src/io.rs index 682a0b8354..8cd6ab49d3 100644 --- a/crates/core/executor/src/io.rs +++ b/crates/core/executor/src/io.rs @@ -35,10 +35,11 @@ impl<'a> Executor<'a> { /// Write a proof and verifying key to the proof stream. pub fn write_proof( &mut self, + reduce_vk: StarkVerifyingKey, proof: ShardProof, vk: StarkVerifyingKey, ) { - self.state.proof_stream.push((proof, vk)); + self.state.proof_stream.push((reduce_vk, proof, vk)); } /// Read a serializable public values from the public values stream. diff --git a/crates/core/executor/src/state.rs b/crates/core/executor/src/state.rs index b2174ad86e..91265b9358 100644 --- a/crates/core/executor/src/state.rs +++ b/crates/core/executor/src/state.rs @@ -58,8 +58,12 @@ pub struct ExecutionState { /// A ptr to the current position in the input stream incremented by HINT_READ opcode. pub input_stream_ptr: usize, - /// A stream of proofs inputted to the program. - pub proof_stream: Vec<(ShardProof, StarkVerifyingKey)>, + /// A stream of proofs (reduce vk, proof, verifying key) inputted to the program. + pub proof_stream: Vec<( + StarkVerifyingKey, + ShardProof, + StarkVerifyingKey, + )>, /// A ptr to the current position in the proof stream, incremented after verifying a proof. pub proof_stream_ptr: usize, diff --git a/crates/core/executor/src/subproof.rs b/crates/core/executor/src/subproof.rs index 09d7c57a77..6bd0f12852 100644 --- a/crates/core/executor/src/subproof.rs +++ b/crates/core/executor/src/subproof.rs @@ -16,6 +16,7 @@ pub trait SubproofVerifier: Sync + Send { /// Verify a deferred proof. fn verify_deferred_proof( &self, + reduce_vk: &StarkVerifyingKey, proof: &ShardProof, vk: &StarkVerifyingKey, vk_hash: [u32; 8], @@ -40,6 +41,7 @@ impl DefaultSubproofVerifier { impl SubproofVerifier for DefaultSubproofVerifier { fn verify_deferred_proof( &self, + _reduce_vk: &StarkVerifyingKey, _proof: &ShardProof, _vk: &StarkVerifyingKey, _vk_hash: [u32; 8], @@ -59,6 +61,7 @@ pub struct NoOpSubproofVerifier; impl SubproofVerifier for NoOpSubproofVerifier { fn verify_deferred_proof( &self, + _reduce_vk: &StarkVerifyingKey, _proof: &ShardProof, _vk: &StarkVerifyingKey, _vk_hash: [u32; 8], diff --git a/crates/core/executor/src/syscalls/verify.rs b/crates/core/executor/src/syscalls/verify.rs index cf314b1ad8..ba55350dd8 100644 --- a/crates/core/executor/src/syscalls/verify.rs +++ b/crates/core/executor/src/syscalls/verify.rs @@ -20,7 +20,7 @@ impl Syscall for VerifySyscall { if proof_index >= rt.state.proof_stream.len() { panic!("Not enough proofs were written to the runtime."); } - let (proof, proof_vk) = &rt.state.proof_stream[proof_index].clone(); + let (reduce_vk, proof, proof_vk) = &rt.state.proof_stream[proof_index].clone(); rt.state.proof_stream_ptr += 1; let vkey_bytes: [u32; 8] = vkey.try_into().unwrap(); @@ -28,7 +28,7 @@ impl Syscall for VerifySyscall { ctx.rt .subproof_verifier - .verify_deferred_proof(proof, proof_vk, vkey_bytes, pv_digest_bytes) + .verify_deferred_proof(reduce_vk, proof, proof_vk, vkey_bytes, pv_digest_bytes) .unwrap_or_else(|e| { panic!( "Failed to verify proof {proof_index} with digest {}: {}", diff --git a/crates/core/machine/src/io.rs b/crates/core/machine/src/io.rs index ee6c652f73..92c9ae22fe 100644 --- a/crates/core/machine/src/io.rs +++ b/crates/core/machine/src/io.rs @@ -11,7 +11,11 @@ pub struct SP1Stdin { /// a vec of bytes at a time. pub buffer: Vec>, pub ptr: usize, - pub proofs: Vec<(ShardProof, StarkVerifyingKey)>, + pub proofs: Vec<( + StarkVerifyingKey, + ShardProof, + StarkVerifyingKey, + )>, } /// Public values for the prover. @@ -63,10 +67,11 @@ impl SP1Stdin { pub fn write_proof( &mut self, + reduce_vk: StarkVerifyingKey, proof: ShardProof, vk: StarkVerifyingKey, ) { - self.proofs.push((proof, vk)); + self.proofs.push((reduce_vk, proof, vk)); } } diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 37fa9fdb19..3b30a03186 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -129,7 +129,7 @@ where let mut runtime = Executor::with_context(program.clone(), opts, context); runtime.write_vecs(&stdin.buffer); for proof in stdin.proofs.iter() { - runtime.write_proof(proof.0.clone(), proof.1.clone()); + runtime.write_proof(proof.0.clone(), proof.1.clone(), proof.2.clone()); } #[cfg(feature = "debug")] diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 0b2af036ca..f7c79fc64a 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -5,7 +5,7 @@ use sp1_core_executor::SP1Context; use sp1_core_machine::io::SP1Stdin; use sp1_recursion_compiler::{config::OuterConfig, constraints::Constraint}; -// pub use sp1_recursion_core::stark::utils::sp1_dev_mode; +pub use sp1_recursion_core_v2::stark::utils::sp1_dev_mode; pub use sp1_recursion_circuit_v2::{ build_wrap_v2::build_wrap_circuit_v2_with as build_wrap_circuit_with, diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 0c22786b51..d50f8a2d34 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -65,14 +65,15 @@ use sp1_stark::{ }; use sp1_recursion_core_v2::{ - machine::RecursionAir, runtime::ExecutionRecord, stark::config::BabyBearPoseidon2Outer, - RecursionProgram, Runtime as RecursionRuntime, + air::RecursionPublicValues, machine::RecursionAir, runtime::ExecutionRecord, + stark::config::BabyBearPoseidon2Outer, RecursionProgram, Runtime as RecursionRuntime, }; use sp1_recursion_circuit_v2::{ machine::{ - SP1CompressShape, SP1CompressVerifier, SP1CompressWitnessValues, SP1DeferredWitnessValues, - SP1RecursionShape, SP1RecursionWitnessValues, SP1RecursiveVerifier, + SP1CompressShape, SP1CompressVerifier, SP1CompressWitnessValues, SP1DeferredVerifier, + SP1DeferredWitnessValues, SP1RecursionShape, SP1RecursionWitnessValues, + SP1RecursiveVerifier, }, witness::Witnessable, }; @@ -131,9 +132,7 @@ impl SP1Prover { /// Initializes a new [SP1Prover]. #[instrument(name = "initialize prover", level = "debug", skip_all)] pub fn new() -> Self { - let prover = Self::uninitialized(); - - prover + Self::uninitialized() } /// Creates a new [SP1Prover] with lazily initialized components. @@ -207,8 +206,8 @@ impl SP1Prover { let opts = SP1CoreOpts::default(); let mut runtime = Executor::with_context(program, opts, context); runtime.write_vecs(&stdin.buffer); - for (proof, vkey) in stdin.proofs.iter() { - runtime.write_proof(proof.clone(), vkey.clone()); + for (reduce_vk, proof, vkey) in stdin.proofs.iter() { + runtime.write_proof(reduce_vk.clone(), proof.clone(), vkey.clone()); } runtime.run_untraced()?; Ok((SP1PublicValues::from(&runtime.state.public_values_stream), runtime.report)) @@ -274,7 +273,7 @@ impl SP1Prover { pub fn compress_program( &self, - input: &SP1CompressWitnessValues, + input: &SP1CompressWitnessValues, ) -> Arc> { let mut cache = self.compress_programs.lock().unwrap(); cache @@ -301,7 +300,14 @@ impl SP1Prover { pub fn shrink_program( &self, - input: &SP1CompressWitnessValues, + input: &SP1CompressWitnessValues, + ) -> Arc> { + self.compress_program(input) + } + + pub fn wrap_program( + &self, + input: &SP1CompressWitnessValues, ) -> Arc> { // Get the operations. let builder_span = tracing::debug_span!("build compress program").entered(); @@ -319,31 +325,31 @@ impl SP1Prover { program } - // pub fn defered_program( - // &self, - // input: &SP1DeferredWitnessValues, - // ) -> Arc> { - // // Compile the program. - - // // Get the operations. - // let operations_span = - // tracing::debug_span!("Get operations for the deferred program").entered(); - // let mut builder = Builder::::default(); - // let input_read_span = tracing::debug_span!("Read input values").entered(); - // let input = input.read(&mut builder); - // input_read_span.exit(); - // let verify_span = tracing::debug_span!("Verify deferred program").entered(); - // SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); - // verify_span.exit(); - // let operations = builder.operations; - // operations_span.exit(); - - // // Compile the program. - // tracing::debug_span!("Compile compress program").in_scope(|| { - // let mut compiler = AsmCompiler::::default(); - // Arc::new(compiler.compile(operations)) - // }) - // } + pub fn deferred_program( + &self, + input: &SP1DeferredWitnessValues, + ) -> Arc> { + // Compile the program. + + // Get the operations. + let operations_span = + tracing::debug_span!("Get operations for the deferred program").entered(); + let mut builder = Builder::::default(); + let input_read_span = tracing::debug_span!("Read input values").entered(); + let input = input.read(&mut builder); + input_read_span.exit(); + let verify_span = tracing::debug_span!("Verify deferred program").entered(); + SP1DeferredVerifier::verify(&mut builder, self.compress_prover.machine(), input); + verify_span.exit(); + let operations = builder.operations; + operations_span.exit(); + + // Compile the program. + tracing::debug_span!("Compile compress program").in_scope(|| { + let mut compiler = AsmCompiler::::default(); + Arc::new(compiler.compile(operations)) + }) + } pub fn get_recursion_core_inputs( &self, @@ -383,41 +389,41 @@ impl SP1Prover { core_inputs } - // pub fn get_recursion_deferred_inputs<'a>( - // &'a self, - // vk: &'a StarkVerifyingKey, - // leaf_challenger: &'a Challenger, - // last_proof_pv: &PublicValues, BabyBear>, - // deferred_proofs: &[ShardProof], - // batch_size: usize, - // ) -> Vec> { - // // Prepare the inputs for the deferred proofs recursive verification. - // let mut deferred_digest = [Val::::zero(); DIGEST_SIZE]; - // let mut deferred_inputs = Vec::new(); - - // for batch in deferred_proofs.chunks(batch_size) { - // let proofs = batch.to_vec(); - - // deferred_inputs.push(SP1DeferredMemoryLayout { - // proofs, - // start_reconstruct_deferred_digest: deferred_digest.to_vec(), - // is_complete: false, - // sp1_vk: vk, - // sp1_machine: self.core_prover.machine(), - // end_pc: Val::::zero(), - // end_shard: last_proof_pv.shard + BabyBear::one(), - // end_execution_shard: last_proof_pv.execution_shard, - // init_addr_bits: last_proof_pv.last_init_addr_bits, - // finalize_addr_bits: last_proof_pv.last_finalize_addr_bits, - // leaf_challenger: leaf_challenger.clone(), - // committed_value_digest: last_proof_pv.committed_value_digest.to_vec(), - // deferred_proofs_digest: last_proof_pv.deferred_proofs_digest.to_vec(), - // }); - - // deferred_digest = Self::hash_deferred_proofs(deferred_digest, batch); - // } - // deferred_inputs - // } + pub fn get_recursion_deferred_inputs<'a>( + &'a self, + vk: &'a StarkVerifyingKey, + leaf_challenger: &'a Challenger, + last_proof_pv: &PublicValues, BabyBear>, + deferred_proofs: &[SP1ReduceProof], + batch_size: usize, + ) -> Vec> { + // Prepare the inputs for the deferred proofs recursive verification. + let mut deferred_digest = [Val::::zero(); DIGEST_SIZE]; + let mut deferred_inputs = Vec::new(); + + for batch in deferred_proofs.chunks(batch_size) { + let vks_and_proofs = + batch.iter().cloned().map(|proof| (proof.vk, proof.proof)).collect::>(); + + deferred_inputs.push(SP1DeferredWitnessValues { + vks_and_proofs, + start_reconstruct_deferred_digest: deferred_digest, + is_complete: false, + sp1_vk: vk.clone(), + end_pc: Val::::zero(), + end_shard: last_proof_pv.shard + BabyBear::one(), + end_execution_shard: last_proof_pv.execution_shard, + init_addr_bits: last_proof_pv.last_init_addr_bits, + finalize_addr_bits: last_proof_pv.last_finalize_addr_bits, + leaf_challenger: leaf_challenger.clone(), + committed_value_digest: last_proof_pv.committed_value_digest, + deferred_proofs_digest: last_proof_pv.deferred_proofs_digest, + }); + + deferred_digest = Self::hash_deferred_proofs(deferred_digest, batch); + } + deferred_inputs + } /// Generate the inputs for the first layer of recursive proofs. #[allow(clippy::type_complexity)] @@ -426,7 +432,7 @@ impl SP1Prover { vk: &'a SP1VerifyingKey, leaf_challenger: &'a Challenger, shard_proofs: &[ShardProof], - deferred_proofs: &[ShardProof], + deferred_proofs: &[SP1ReduceProof], batch_size: usize, ) -> Vec { let is_complete = shard_proofs.len() == 1 && deferred_proofs.is_empty(); @@ -437,18 +443,18 @@ impl SP1Prover { batch_size, is_complete, ); - // let last_proof_pv = shard_proofs.last().unwrap().public_values.as_slice().borrow(); - // let deferred_inputs = self.get_recursion_deferred_inputs( - // &vk.vk, - // leaf_challenger, - // last_proof_pv, - // deferred_proofs, - // batch_size, - // ); + let last_proof_pv = shard_proofs.last().unwrap().public_values.as_slice().borrow(); + let deferred_inputs = self.get_recursion_deferred_inputs( + &vk.vk, + leaf_challenger, + last_proof_pv, + deferred_proofs, + batch_size, + ); let mut inputs = Vec::new(); inputs.extend(core_inputs.into_iter().map(SP1CircuitWitness::Core)); - // inputs.extend(deferred_inputs.into_iter().map(SP1CircuitWitness::Deferred)); + inputs.extend(deferred_inputs.into_iter().map(SP1CircuitWitness::Deferred)); inputs } @@ -458,7 +464,7 @@ impl SP1Prover { &self, vk: &SP1VerifyingKey, proof: SP1CoreProof, - deferred_proofs: Vec>, + deferred_proofs: Vec>, opts: SP1ProverOpts, ) -> Result, SP1RecursionProverError> { // Set the batch size for the reduction tree. @@ -547,11 +553,11 @@ impl SP1Prover { Witnessable::::write(&input, &mut witness_stream); (self.recursion_program(&input), witness_stream) } - // SP1CircuitWitness::Deferred(input) => { - // let mut witness_stream = Vec::new(); - // witness_stream.extend(input.write()); - // (self.deferred_program(), witness_stream) - // } + SP1CircuitWitness::Deferred(input) => { + let mut witness_stream = Vec::new(); + Witnessable::::write(&input, &mut witness_stream); + (self.deferred_program(&input), witness_stream) + } SP1CircuitWitness::Compress(input) => { let mut witness_stream = Vec::new(); Witnessable::::write(&input, &mut witness_stream); @@ -800,7 +806,7 @@ impl SP1Prover { is_complete: true, }; - let program = self.compress_program(&input); + let program = self.shrink_program(&input); // Run the compress program. let mut runtime = RecursionRuntime::, Challenge, _>::new( @@ -844,7 +850,7 @@ impl SP1Prover { is_complete: true, }; - let program = self.shrink_program(&input); + let program = self.wrap_program(&input); // Run the compress program. let mut runtime = RecursionRuntime::, Challenge, _>::new( @@ -901,8 +907,8 @@ impl SP1Prover { let mut witness = Witness::default(); proof.proof.write(&mut witness); - witness.write_commited_values_digest(commited_values_digest); - witness.write_vkey_hash(vkey_digest); + // witness.write_commited_values_digest(commited_values_digest); + // witness.write_vkey_hash(vkey_digest); let prover = PlonkBn254Prover::new(); let proof = prover.prove(witness, build_dir.to_path_buf()); @@ -918,52 +924,53 @@ impl SP1Prover { proof } - // /// Wrap the STARK proven over a SNARK-friendly field into a Groth16 proof. - // #[instrument(name = "wrap_groth16_bn254", level = "info", skip_all)] - // pub fn wrap_groth16_bn254( - // &self, - // proof: SP1ReduceProof, - // build_dir: &Path, - // ) -> Groth16Bn254Proof { - // let vkey_digest = proof.sp1_vkey_digest_bn254(); - // let commited_values_digest = proof.sp1_commited_values_digest_bn254(); - - // let mut witness = Witness::default(); - // proof.proof.write(&mut witness); - // witness.write_commited_values_digest(commited_values_digest); - // witness.write_vkey_hash(vkey_digest); - - // let prover = Groth16Bn254Prover::new(); - // let proof = prover.prove(witness, build_dir.to_path_buf()); - - // // Verify the proof. - // prover.verify( - // &proof, - // &vkey_digest.as_canonical_biguint(), - // &commited_values_digest.as_canonical_biguint(), - // build_dir, - // ); - - // proof - // } - - // /// Accumulate deferred proofs into a single digest. - // pub fn hash_deferred_proofs( - // prev_digest: [Val; DIGEST_SIZE], - // deferred_proofs: &[ShardProof], - // ) -> [Val; 8] { - // let mut digest = prev_digest; - // for proof in deferred_proofs.iter() { - // let pv: &RecursionPublicValues> = proof.public_values.as_slice().borrow(); - // let committed_values_digest = words_to_bytes(&pv.committed_value_digest); - // digest = hash_deferred_proof( - // &digest, - // &pv.sp1_vk_digest, - // &committed_values_digest.try_into().unwrap(), - // ); - // } - // digest - // } + /// Wrap the STARK proven over a SNARK-friendly field into a Groth16 proof. + #[instrument(name = "wrap_groth16_bn254", level = "info", skip_all)] + pub fn wrap_groth16_bn254( + &self, + proof: SP1ReduceProof, + build_dir: &Path, + ) -> Groth16Bn254Proof { + let vkey_digest = proof.sp1_vkey_digest_bn254(); + let commited_values_digest = proof.sp1_commited_values_digest_bn254(); + + let mut witness = Witness::default(); + proof.proof.write(&mut witness); + // witness.write_commited_values_digest(commited_values_digest); + // witness.write_vkey_hash(vkey_digest); + + let prover = Groth16Bn254Prover::new(); + let proof = prover.prove(witness, build_dir.to_path_buf()); + + // Verify the proof. + prover.verify( + &proof, + &vkey_digest.as_canonical_biguint(), + &commited_values_digest.as_canonical_biguint(), + build_dir, + ); + + proof + } + + /// Accumulate deferred proofs into a single digest. + pub fn hash_deferred_proofs( + prev_digest: [Val; DIGEST_SIZE], + deferred_proofs: &[SP1ReduceProof], + ) -> [Val; 8] { + let mut digest = prev_digest; + for proof in deferred_proofs.iter() { + let pv: &RecursionPublicValues> = + proof.proof.public_values.as_slice().borrow(); + let committed_values_digest = words_to_bytes(&pv.committed_value_digest); + digest = hash_deferred_proof( + &digest, + &pv.sp1_vk_digest, + &committed_values_digest.try_into().unwrap(), + ); + } + digest + } fn check_for_high_cycles(cycles: u64) { if cycles > 100_000_000 { @@ -985,7 +992,7 @@ pub mod tests { use super::*; use anyhow::Result; - // use build::{try_build_groth16_bn254_artifacts_dev, try_build_plonk_bn254_artifacts_dev}; + use build::{try_build_groth16_bn254_artifacts_dev, try_build_plonk_bn254_artifacts_dev}; use p3_field::PrimeField32; use sp1_recursion_core_v2::air::RecursionPublicValues; @@ -1154,9 +1161,21 @@ pub mod tests { .unwrap(); stdin.write(&vkey_digest); stdin.write(&vec![pv_1.clone(), pv_2.clone(), pv_2.clone()]); - stdin.write_proof(deferred_reduce_1.proof.clone(), keccak_vk.vk.clone()); - stdin.write_proof(deferred_reduce_2.proof.clone(), keccak_vk.vk.clone()); - stdin.write_proof(deferred_reduce_2.proof.clone(), keccak_vk.vk.clone()); + stdin.write_proof( + deferred_reduce_1.vk.clone(), + deferred_reduce_1.proof.clone(), + keccak_vk.vk.clone(), + ); + stdin.write_proof( + deferred_reduce_2.vk.clone(), + deferred_reduce_2.proof.clone(), + keccak_vk.vk.clone(), + ); + stdin.write_proof( + deferred_reduce_2.vk.clone(), + deferred_reduce_2.proof.clone(), + keccak_vk.vk.clone(), + ); tracing::info!("proving verify program (core)"); let verify_proof = prover.prove_core(&verify_pk, &stdin, opts, Default::default())?; @@ -1166,7 +1185,7 @@ pub mod tests { let verify_reduce = prover.compress( &verify_vk, verify_proof, - vec![deferred_reduce_1.proof, deferred_reduce_2.proof.clone(), deferred_reduce_2.proof], + vec![deferred_reduce_1, deferred_reduce_2.clone(), deferred_reduce_2], opts, )?; let reduce_pv: &RecursionPublicValues<_> = diff --git a/crates/prover/src/types.rs b/crates/prover/src/types.rs index 5a63f72320..941f4e0bc6 100644 --- a/crates/prover/src/types.rs +++ b/crates/prover/src/types.rs @@ -247,6 +247,6 @@ pub enum SP1RecursionProverError { #[allow(clippy::large_enum_variant)] pub enum SP1CircuitWitness { Core(SP1RecursionWitnessValues), - // Deferred(SP1DeferredWitnessValues), + Deferred(SP1DeferredWitnessValues), Compress(SP1CompressWitnessValues), } diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index 5bc70e81e9..d312936ccd 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -472,31 +472,32 @@ pub fn verify_groth16_bn254_public_inputs( impl SubproofVerifier for &SP1Prover { fn verify_deferred_proof( &self, + reduce_vk: &sp1_stark::StarkVerifyingKey, proof: &sp1_stark::ShardProof, vk: &sp1_stark::StarkVerifyingKey, vk_hash: [u32; 8], committed_value_digest: [u32; 8], ) -> Result<(), MachineVerificationError> { - // // Check that the vk hash matches the vk hash from the input. - // if vk.hash_u32() != vk_hash { - // return Err(MachineVerificationError::InvalidPublicValues( - // "vk hash from syscall does not match vkey from input", - // )); - // } - // // Check that proof is valid. - // self.verify_compressed( - // &SP1ReduceProof { proof: proof.clone() }, - // &SP1VerifyingKey { vk: vk.clone() }, - // )?; - // // Check that the committed value digest matches the one from syscall - // let public_values: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); - // for (i, word) in public_values.committed_value_digest.iter().enumerate() { - // if *word != committed_value_digest[i].into() { - // return Err(MachineVerificationError::InvalidPublicValues( - // "committed_value_digest does not match", - // )); - // } - // } + // Check that the vk hash matches the vk hash from the input. + if vk.hash_u32() != vk_hash { + return Err(MachineVerificationError::InvalidPublicValues( + "vk hash from syscall does not match vkey from input", + )); + } + // Check that proof is valid. + self.verify_compressed( + &SP1ReduceProof { vk: reduce_vk.clone(), proof: proof.clone() }, + &SP1VerifyingKey { vk: vk.clone() }, + )?; + // Check that the committed value digest matches the one from syscall + let public_values: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); + for (i, word) in public_values.committed_value_digest.iter().enumerate() { + if *word != committed_value_digest[i].into() { + return Err(MachineVerificationError::InvalidPublicValues( + "committed_value_digest does not match", + )); + } + } Ok(()) } } diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index c4822aa90d..bf5cba0067 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -1,7 +1,6 @@ use std::{ array, borrow::{Borrow, BorrowMut}, - mem::MaybeUninit, }; use p3_air::Air; @@ -108,9 +107,8 @@ where is_complete, } = input; - let mut deferred_public_values_stream: Vec> = (0..RECURSIVE_PROOF_NUM_PV_ELTS) - .map(|_| unsafe { MaybeUninit::zeroed().assume_init() }) - .collect(); + let mut deferred_public_values_stream: Vec> = + (0..RECURSIVE_PROOF_NUM_PV_ELTS).map(|_| builder.uninit()).collect(); let deferred_public_values: &mut RecursionPublicValues<_> = deferred_public_values_stream.as_mut_slice().borrow_mut(); @@ -120,9 +118,9 @@ where // Initialize the consistency check variable. let mut reconstruct_deferred_digest: [Felt; POSEIDON_NUM_WORDS] = - { unsafe { MaybeUninit::zeroed().assume_init() } }; + start_reconstruct_deferred_digest; - for (i, (vk, shard_proof)) in vks_and_proofs.into_iter().enumerate() { + for (vk, shard_proof) in vks_and_proofs { // Initialize a challenger. let mut challenger = machine.config().challenger_variable(builder); // Observe the vk and start pc. @@ -201,6 +199,12 @@ where // Set the is_complete flag. deferred_public_values.is_complete = is_complete; + // TODO: set the digest according to the previous values. + deferred_public_values.digest = array::from_fn(|_| builder.eval(C::F::zero())); + + // Set the cumulative sum to zero. + deferred_public_values.cumulative_sum = array::from_fn(|_| builder.eval(C::F::zero())); + commit_recursion_public_values(builder, *deferred_public_values); } } diff --git a/crates/sdk/src/proof.rs b/crates/sdk/src/proof.rs index d22621d7f1..6f6b6713b7 100644 --- a/crates/sdk/src/proof.rs +++ b/crates/sdk/src/proof.rs @@ -5,8 +5,8 @@ use serde::{Deserialize, Serialize}; use sp1_core_machine::io::{SP1PublicValues, SP1Stdin}; use strum_macros::{EnumDiscriminants, EnumTryAs}; -use sp1_prover::{CoreSC, Groth16Bn254Proof, InnerSC, PlonkBn254Proof}; -use sp1_stark::{MachineVerificationError, ShardProof}; +use sp1_prover::{CoreSC, Groth16Bn254Proof, InnerSC, PlonkBn254Proof, SP1ReduceProof}; +use sp1_stark::{MachineVerificationError, ShardProof, StarkVerifyingKey}; /// A proof generated with SP1 of a particular proof mode. #[derive(Debug, Clone, Serialize, Deserialize, EnumDiscriminants, EnumTryAs)] @@ -15,7 +15,7 @@ use sp1_stark::{MachineVerificationError, ShardProof}; pub enum SP1Proof { #[strum_discriminants(default)] Core(Vec>), - Compressed(ShardProof), + Compressed(SP1ReduceProof), Plonk(PlonkBn254Proof), Groth16(Groth16Bn254Proof), } diff --git a/crates/sdk/src/provers/cpu.rs b/crates/sdk/src/provers/cpu.rs index 03cc8843db..bc7ba444e3 100644 --- a/crates/sdk/src/provers/cpu.rs +++ b/crates/sdk/src/provers/cpu.rs @@ -67,7 +67,7 @@ impl Prover for CpuProver { self.prover.compress(&pk.vk, proof, deferred_proofs, opts.sp1_prover_opts)?; if kind == SP1ProofKind::Compressed { return Ok(SP1ProofWithPublicValues { - proof: SP1Proof::Compressed(reduce_proof.proof), + proof: SP1Proof::Compressed(reduce_proof), stdin, public_values, sp1_version: self.version().to_string(), diff --git a/crates/sdk/src/provers/cuda.rs b/crates/sdk/src/provers/cuda.rs index f271530a61..f7daf30e51 100644 --- a/crates/sdk/src/provers/cuda.rs +++ b/crates/sdk/src/provers/cuda.rs @@ -65,7 +65,7 @@ impl Prover for CudaProver { let reduce_proof = self.cuda_prover.compress(&pk.vk, proof, deferred_proofs)?; if kind == SP1ProofKind::Compressed { return Ok(SP1ProofWithPublicValues { - proof: SP1Proof::Compressed(reduce_proof.proof), + proof: SP1Proof::Compressed(reduce_proof), stdin, public_values, sp1_version: self.version().to_string(), diff --git a/crates/sdk/src/provers/mod.rs b/crates/sdk/src/provers/mod.rs index 34152d8460..880bd35bbe 100644 --- a/crates/sdk/src/provers/mod.rs +++ b/crates/sdk/src/provers/mod.rs @@ -96,7 +96,7 @@ pub trait Prover: Send + Sync { .map_err(SP1VerificationError::Core), SP1Proof::Compressed(proof) => self .sp1_prover() - .verify_compressed(&SP1ReduceProof { proof: proof.clone() }, vkey) + .verify_compressed(proof, vkey) .map_err(SP1VerificationError::Recursion), SP1Proof::Plonk(proof) => self .sp1_prover() From 4ac079f0fbe752ecdc345b08b31f7ef0589d2a8c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 02:25:48 -0700 Subject: [PATCH 056/268] clippy --- crates/prover/src/types.rs | 9 +++++++++ crates/recursion/circuit-v2/src/lib.rs | 2 +- crates/recursion/circuit-v2/src/machine/compress.rs | 2 +- crates/recursion/circuit-v2/src/machine/core.rs | 1 - .../recursion/core-v2/src/chips/poseidon2_wide/trace.rs | 1 - 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/crates/prover/src/types.rs b/crates/prover/src/types.rs index 941f4e0bc6..437cb725e6 100644 --- a/crates/prover/src/types.rs +++ b/crates/prover/src/types.rs @@ -250,3 +250,12 @@ pub enum SP1CircuitWitness { Deferred(SP1DeferredWitnessValues), Compress(SP1CompressWitnessValues), } + +impl std::fmt::Debug for SP1ReduceProof { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut debug_struct = f.debug_struct("SP1ReduceProof"); + debug_struct.field("vk", &self.vk); + debug_struct.field("proof", &self.proof); + debug_struct.finish() + } +} diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index a1bbee210a..7d9b4f11e9 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -356,7 +356,7 @@ impl BabyBearFriConfig for BabyBearPoseidon2Outer { self.pcs().fri_config() } - fn challenger_shape(challenger: &Self::FriChallenger) -> SpongeChallengerShape { + fn challenger_shape(_challenger: &Self::FriChallenger) -> SpongeChallengerShape { unimplemented!("Shape not supported for outer fri challenger"); // SpongeChallengerShape { // input_buffer_len: challenger.input_buffer.len(), diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 433c883068..5b65f168ab 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -222,7 +222,7 @@ where // Initialize the leaf challenger public values. leaf_challenger_values = current_public_values.leaf_challenger; // Initialize the reconstruct challenger public values. - reconstruct_challenger_values = current_public_values.start_reconstruct_challenger; + // Initialize the initial reconstruct challenger public values. initial_reconstruct_challenger_values = current_public_values.start_reconstruct_challenger; diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 715938b184..e8f26af169 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -191,7 +191,6 @@ where // Program counter. start_pc = public_values.start_pc; - current_pc = public_values.start_pc; // Memory initialization & finalization. for ((bit, pub_bit), first_bit) in current_init_addr_bits diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index a12b005ea6..35ae7a5b98 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -4,7 +4,6 @@ use itertools::Itertools; use p3_air::BaseAir; use p3_field::PrimeField32; use p3_matrix::{dense::RowMajorMatrix, Matrix}; -use p3_maybe_rayon::prelude::{ParallelIterator, ParallelSlice}; use sp1_core_machine::utils::{next_power_of_two, pad_rows_fixed, par_for_each_row}; use sp1_primitives::RC_16_30_U32; use sp1_stark::air::MachineAir; From 9a9d6da5513b343905c842a61045f237bc9afe87 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 02:39:35 -0700 Subject: [PATCH 057/268] checkpoint --- crates/prover/src/build.rs | 10 +-- crates/prover/src/lib.rs | 50 ++++++------ crates/prover/src/verify.rs | 140 ++++++++++++++++----------------- crates/sdk/src/provers/cpu.rs | 16 +++- crates/sdk/src/provers/cuda.rs | 14 +++- crates/sdk/src/provers/mod.rs | 2 +- 6 files changed, 123 insertions(+), 109 deletions(-) diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index f7c79fc64a..6057b8cd7c 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -1,6 +1,5 @@ -use std::{borrow::Borrow, path::PathBuf}; +use std::path::PathBuf; -use p3_baby_bear::BabyBear; use sp1_core_executor::SP1Context; use sp1_core_machine::io::SP1Stdin; use sp1_recursion_compiler::{config::OuterConfig, constraints::Constraint}; @@ -12,15 +11,10 @@ pub use sp1_recursion_circuit_v2::{ witness::{OuterWitness, Witnessable}, }; -use sp1_recursion_core_v2::air::RecursionPublicValues; - use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; use sp1_stark::{InnerVal, SP1ProverOpts, ShardProof, StarkVerifyingKey}; -use crate::{ - utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, - OuterSC, SP1Prover, WrapAir, WRAP_DEGREE, -}; +use crate::{OuterSC, SP1Prover, WrapAir, WRAP_DEGREE}; /// Tries to build the PLONK artifacts inside the development directory. pub fn try_build_plonk_bn254_artifacts_dev( diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index d50f8a2d34..d918da62a6 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -26,7 +26,7 @@ use std::{ sync::{ atomic::{AtomicUsize, Ordering}, mpsc::sync_channel, - Arc, Mutex, OnceLock, + Arc, Mutex, }, thread, }; @@ -60,8 +60,8 @@ use sp1_recursion_gnark_ffi::{groth16_bn254::Groth16Bn254Prover, plonk_bn254::Pl use sp1_stark::{ air::PublicValues, baby_bear_poseidon2::BabyBearPoseidon2, Challenge, Challenger, - MachineProver, MachineVerificationError, ProofShape, SP1CoreOpts, SP1ProverOpts, ShardProof, - StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, Val, Word, DIGEST_SIZE, + MachineProver, MachineVerificationError, SP1CoreOpts, SP1ProverOpts, ShardProof, + StarkGenericConfig, StarkVerifyingKey, Val, Word, DIGEST_SIZE, }; use sp1_recursion_core_v2::{ @@ -1079,30 +1079,34 @@ pub mod tests { return Ok(()); } - // tracing::info!("checking vkey hash babybear"); - // let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); - // assert_eq!(vk_digest_babybear, vk.hash_babybear()); + tracing::info!("checking vkey hash babybear"); + let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); + assert_eq!(vk_digest_babybear, vk.hash_babybear()); - // tracing::info!("checking vkey hash bn254"); - // let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); - // assert_eq!(vk_digest_bn254, vk.hash_bn254()); + tracing::info!("checking vkey hash bn254"); + let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); + assert_eq!(vk_digest_bn254, vk.hash_bn254()); - // tracing::info!("generate plonk bn254 proof"); - // let artifacts_dir = - // try_build_plonk_bn254_artifacts_dev(prover.wrap_vk(), &wrapped_bn254_proof.proof); - // let plonk_bn254_proof = - // prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); - // println!("{:?}", plonk_bn254_proof); + tracing::info!("generate plonk bn254 proof"); + let artifacts_dir = try_build_plonk_bn254_artifacts_dev( + &wrapped_bn254_proof.vk, + &wrapped_bn254_proof.proof, + ); + let plonk_bn254_proof = + prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); + println!("{:?}", plonk_bn254_proof); - // prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; + prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; - // tracing::info!("generate groth16 bn254 proof"); - // let artifacts_dir = - // try_build_groth16_bn254_artifacts_dev(prover.wrap_vk(), &wrapped_bn254_proof.proof); - // let groth16_bn254_proof = prover.wrap_groth16_bn254(wrapped_bn254_proof, &artifacts_dir); - // println!("{:?}", groth16_bn254_proof); + tracing::info!("generate groth16 bn254 proof"); + let artifacts_dir = try_build_groth16_bn254_artifacts_dev( + &wrapped_bn254_proof.vk, + &wrapped_bn254_proof.proof, + ); + let groth16_bn254_proof = prover.wrap_groth16_bn254(wrapped_bn254_proof, &artifacts_dir); + println!("{:?}", groth16_bn254_proof); - // prover.verify_groth16_bn254(&groth16_bn254_proof, &vk, &public_values, &artifacts_dir)?; + prover.verify_groth16_bn254(&groth16_bn254_proof, &vk, &public_values, &artifacts_dir)?; Ok(()) } @@ -1214,7 +1218,7 @@ pub mod tests { // TODO(mattstam): We should Test::Plonk here, but this uses the existing // docker image which has a different API than the current. So we need to wait until the // next release (v1.2.0+), and then switch it back. - test_e2e_prover::(elf, opts, Test::Wrap) + test_e2e_prover::(elf, opts, Test::Plonk) } /// Tests an end-to-end workflow of proving a program across the entire proof generation diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index d312936ccd..d095b90fb1 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -328,25 +328,25 @@ impl SP1Prover { proof: &SP1ReduceProof, vk: &SP1VerifyingKey, ) -> Result<(), MachineVerificationError> { - // let mut challenger = self.shrink_prover.config().challenger(); - // let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; - // self.shrink_prover.machine().verify(self.shrink_vk(), &machine_proof, &mut challenger)?; - - // // Validate public values - // let public_values: &RecursionPublicValues<_> = - // proof.proof.public_values.as_slice().borrow(); - - // // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully - // // reduced. - // if public_values.is_complete != BabyBear::one() { - // return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); - // } + let mut challenger = self.shrink_prover.config().challenger(); + let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; + self.shrink_prover.machine().verify(&proof.vk, &machine_proof, &mut challenger)?; - // // Verify that the proof is for the sp1 vkey we are expecting. - // let vkey_hash = vk.hash_babybear(); - // if public_values.sp1_vk_digest != vkey_hash { - // return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); - // } + // Validate public values + let public_values: &RecursionPublicValues<_> = + proof.proof.public_values.as_slice().borrow(); + + // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully + // reduced. + if public_values.is_complete != BabyBear::one() { + return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); + } + + // Verify that the proof is for the sp1 vkey we are expecting. + let vkey_hash = vk.hash_babybear(); + if public_values.sp1_vk_digest != vkey_hash { + return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); + } Ok(()) } @@ -357,25 +357,25 @@ impl SP1Prover { proof: &SP1ReduceProof, vk: &SP1VerifyingKey, ) -> Result<(), MachineVerificationError> { - // let mut challenger = self.wrap_prover.config().challenger(); - // let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; - // self.wrap_prover.machine().verify(self.wrap_vk(), &machine_proof, &mut challenger)?; - - // // Validate public values - // let public_values: &RecursionPublicValues<_> = - // proof.proof.public_values.as_slice().borrow(); - - // // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully - // // reduced. - // if public_values.is_complete != BabyBear::one() { - // return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); - // } + let mut challenger = self.wrap_prover.config().challenger(); + let machine_proof = MachineProof { shard_proofs: vec![proof.proof.clone()] }; + self.wrap_prover.machine().verify(&proof.vk, &machine_proof, &mut challenger)?; - // // Verify that the proof is for the sp1 vkey we are expecting. - // let vkey_hash = vk.hash_babybear(); - // if public_values.sp1_vk_digest != vkey_hash { - // return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); - // } + // Validate public values + let public_values: &RecursionPublicValues<_> = + proof.proof.public_values.as_slice().borrow(); + + // `is_complete` should be 1. In the reduce program, this ensures that the proof is fully + // reduced. + if public_values.is_complete != BabyBear::one() { + return Err(MachineVerificationError::InvalidPublicValues("is_complete is not 1")); + } + + // Verify that the proof is for the sp1 vkey we are expecting. + let vkey_hash = vk.hash_babybear(); + if public_values.sp1_vk_digest != vkey_hash { + return Err(MachineVerificationError::InvalidPublicValues("sp1 vk hash mismatch")); + } Ok(()) } @@ -388,15 +388,15 @@ impl SP1Prover { public_values: &SP1PublicValues, build_dir: &Path, ) -> Result<()> { - // let prover = PlonkBn254Prover::new(); + let prover = PlonkBn254Prover::new(); - // let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; - // let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; + let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; + let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; - // // Verify the proof with the corresponding public inputs. - // prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); + // Verify the proof with the corresponding public inputs. + prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); - // verify_plonk_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; + verify_plonk_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; Ok(()) } @@ -409,15 +409,15 @@ impl SP1Prover { public_values: &SP1PublicValues, build_dir: &Path, ) -> Result<()> { - // let prover = Groth16Bn254Prover::new(); + let prover = Groth16Bn254Prover::new(); - // let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; - // let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; + let vkey_hash = BigUint::from_str(&proof.public_inputs[0])?; + let committed_values_digest = BigUint::from_str(&proof.public_inputs[1])?; - // // Verify the proof with the corresponding public inputs. - // prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); + // Verify the proof with the corresponding public inputs. + prover.verify(proof, &vkey_hash, &committed_values_digest, build_dir); - // verify_groth16_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; + verify_groth16_bn254_public_inputs(vk, public_values, &proof.public_inputs)?; Ok(()) } @@ -430,18 +430,18 @@ pub fn verify_plonk_bn254_public_inputs( public_values: &SP1PublicValues, plonk_bn254_public_inputs: &[String], ) -> Result<()> { - // let expected_vk_hash = BigUint::from_str(&plonk_bn254_public_inputs[0])?; - // let expected_public_values_hash = BigUint::from_str(&plonk_bn254_public_inputs[1])?; + let expected_vk_hash = BigUint::from_str(&plonk_bn254_public_inputs[0])?; + let expected_public_values_hash = BigUint::from_str(&plonk_bn254_public_inputs[1])?; - // let vk_hash = vk.hash_bn254().as_canonical_biguint(); - // if vk_hash != expected_vk_hash { - // return Err(PlonkVerificationError::InvalidVerificationKey.into()); - // } + let vk_hash = vk.hash_bn254().as_canonical_biguint(); + if vk_hash != expected_vk_hash { + return Err(PlonkVerificationError::InvalidVerificationKey.into()); + } - // let public_values_hash = public_values.hash(); - // if public_values_hash != expected_public_values_hash { - // return Err(PlonkVerificationError::InvalidPublicValues.into()); - // } + let public_values_hash = public_values.hash(); + if public_values_hash != expected_public_values_hash { + return Err(PlonkVerificationError::InvalidPublicValues.into()); + } Ok(()) } @@ -453,18 +453,18 @@ pub fn verify_groth16_bn254_public_inputs( public_values: &SP1PublicValues, groth16_bn254_public_inputs: &[String], ) -> Result<()> { - // let expected_vk_hash = BigUint::from_str(&groth16_bn254_public_inputs[0])?; - // let expected_public_values_hash = BigUint::from_str(&groth16_bn254_public_inputs[1])?; - - // let vk_hash = vk.hash_bn254().as_canonical_biguint(); - // if vk_hash != expected_vk_hash { - // return Err(Groth16VerificationError::InvalidVerificationKey.into()); - // } - - // let public_values_hash = public_values.hash(); - // if public_values_hash != expected_public_values_hash { - // return Err(Groth16VerificationError::InvalidPublicValues.into()); - // } + let expected_vk_hash = BigUint::from_str(&groth16_bn254_public_inputs[0])?; + let expected_public_values_hash = BigUint::from_str(&groth16_bn254_public_inputs[1])?; + + let vk_hash = vk.hash_bn254().as_canonical_biguint(); + if vk_hash != expected_vk_hash { + return Err(Groth16VerificationError::InvalidVerificationKey.into()); + } + + let public_values_hash = public_values.hash(); + if public_values_hash != expected_public_values_hash { + return Err(Groth16VerificationError::InvalidPublicValues.into()); + } Ok(()) } diff --git a/crates/sdk/src/provers/cpu.rs b/crates/sdk/src/provers/cpu.rs index bc7ba444e3..704487e96f 100644 --- a/crates/sdk/src/provers/cpu.rs +++ b/crates/sdk/src/provers/cpu.rs @@ -1,6 +1,7 @@ use anyhow::Result; use sp1_core_executor::SP1Context; -use sp1_prover::{components::DefaultProverComponents, SP1Prover, SP1Stdin}; +use sp1_core_machine::io::SP1Stdin; +use sp1_prover::{components::DefaultProverComponents, SP1Prover, SP1ReduceProof}; use crate::{ install::try_install_circuit_artifacts, provers::ProofOpts, Prover, SP1Proof, SP1ProofKind, @@ -59,7 +60,14 @@ impl Prover for CpuProver { }); } - let deferred_proofs = stdin.proofs.iter().map(|p| p.0.clone()).collect(); + let deferred_proofs = stdin + .proofs + .iter() + .map(|(reduce_vk, reduce_proof, _)| SP1ReduceProof { + vk: reduce_vk.clone(), + proof: reduce_proof.clone(), + }) + .collect(); let public_values = proof.public_values.clone(); // Generate the compressed proof. @@ -83,7 +91,7 @@ impl Prover for CpuProver { if kind == SP1ProofKind::Plonk { let plonk_bn254_aritfacts = if sp1_prover::build::sp1_dev_mode() { sp1_prover::build::try_build_plonk_bn254_artifacts_dev( - self.prover.wrap_vk(), + &outer_proof.vk, &outer_proof.proof, ) } else { @@ -100,7 +108,7 @@ impl Prover for CpuProver { } else if kind == SP1ProofKind::Groth16 { let groth16_bn254_artifacts = if sp1_prover::build::sp1_dev_mode() { sp1_prover::build::try_build_groth16_bn254_artifacts_dev( - self.prover.wrap_vk(), + &outer_proof.vk, &outer_proof.proof, ) } else { diff --git a/crates/sdk/src/provers/cuda.rs b/crates/sdk/src/provers/cuda.rs index f7daf30e51..99f7441459 100644 --- a/crates/sdk/src/provers/cuda.rs +++ b/crates/sdk/src/provers/cuda.rs @@ -1,6 +1,7 @@ use anyhow::Result; +use sp1_core_machine::io::SP1Stdin; use sp1_cuda::SP1CudaProver; -use sp1_prover::{components::DefaultProverComponents, SP1Prover, SP1Stdin}; +use sp1_prover::{components::DefaultProverComponents, SP1Prover, SP1ReduceProof}; use super::ProverType; use crate::{ @@ -58,7 +59,14 @@ impl Prover for CudaProver { }); } - let deferred_proofs = stdin.proofs.iter().map(|p| p.0.clone()).collect(); + let deferred_proofs = stdin + .proofs + .iter() + .map(|(reduce_vk, reduce_proof, _)| SP1ReduceProof { + vk: reduce_vk.clone(), + proof: reduce_proof.clone(), + }) + .collect(); let public_values = proof.public_values.clone(); // Generate the compressed proof. @@ -80,7 +88,7 @@ impl Prover for CudaProver { let plonk_bn254_aritfacts = if sp1_prover::build::sp1_dev_mode() { sp1_prover::build::try_build_plonk_bn254_artifacts_dev( - self.prover.wrap_vk(), + &outer_proof.vk, &outer_proof.proof, ) } else { diff --git a/crates/sdk/src/provers/mod.rs b/crates/sdk/src/provers/mod.rs index 880bd35bbe..9e449f71b1 100644 --- a/crates/sdk/src/provers/mod.rs +++ b/crates/sdk/src/provers/mod.rs @@ -13,7 +13,7 @@ use sp1_core_executor::SP1Context; use sp1_core_machine::{io::SP1Stdin, SP1_CIRCUIT_VERSION}; use sp1_prover::{ components::SP1ProverComponents, CoreSC, InnerSC, SP1CoreProofData, SP1Prover, SP1ProvingKey, - SP1ReduceProof, SP1VerifyingKey, + SP1VerifyingKey, }; use sp1_stark::{MachineVerificationError, SP1ProverOpts}; use std::time::Duration; From f43907285fbeabff9cb3464d5b4490952f537c3a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 10:28:45 -0700 Subject: [PATCH 058/268] wrap works --- crates/prover/src/build.rs | 52 ++++++++++--------- .../circuit-v2/src/machine/compress.rs | 2 +- .../circuit-v2/src/machine/witness.rs | 44 ++++++++++++---- 3 files changed, 63 insertions(+), 35 deletions(-) diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 6057b8cd7c..a0ea9cfbec 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -2,19 +2,21 @@ use std::path::PathBuf; use sp1_core_executor::SP1Context; use sp1_core_machine::io::SP1Stdin; -use sp1_recursion_compiler::{config::OuterConfig, constraints::Constraint}; +use sp1_recursion_circuit_v2::machine::{SP1CompressVerifier, SP1CompressWitnessValues}; +use sp1_recursion_compiler::{ + config::OuterConfig, + constraints::{Constraint, ConstraintCompiler}, + ir::Builder, +}; pub use sp1_recursion_core_v2::stark::utils::sp1_dev_mode; -pub use sp1_recursion_circuit_v2::{ - build_wrap_v2::build_wrap_circuit_v2_with as build_wrap_circuit_with, - witness::{OuterWitness, Witnessable}, -}; +pub use sp1_recursion_circuit_v2::witness::{OuterWitness, Witnessable}; use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; -use sp1_stark::{InnerVal, SP1ProverOpts, ShardProof, StarkVerifyingKey}; +use sp1_stark::{SP1ProverOpts, ShardProof, StarkVerifyingKey}; -use crate::{OuterSC, SP1Prover, WrapAir, WRAP_DEGREE}; +use crate::{OuterSC, SP1Prover, WrapAir}; /// Tries to build the PLONK artifacts inside the development directory. pub fn try_build_plonk_bn254_artifacts_dev( @@ -98,20 +100,16 @@ pub fn build_constraints_and_witness( template_proof: &ShardProof, ) -> (Vec, OuterWitness) { tracing::info!("building verifier constraints"); - let constraints = tracing::info_span!("wrap circuit") - .in_scope(|| build_wrap_circuit(template_vk, template_proof)); - - // let pv: &RecursionPublicValues = template_proof.public_values.as_slice().borrow(); - // let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); - // let committed_values_digest_bytes: [BabyBear; 32] = - // words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); - // let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); + let template_input = SP1CompressWitnessValues { + vks_and_proofs: vec![(template_vk.clone(), template_proof.clone())], + is_complete: true, + }; + let constraints = + tracing::info_span!("wrap circuit").in_scope(|| build_outer_circuit(&template_input)); tracing::info!("building template witness"); let mut witness = OuterWitness::default(); - template_proof.write(&mut witness); - // witness.write_commited_values_digest(committed_values_digest); - // witness.write_vkey_hash(vkey_hash); + template_input.write(&mut witness); (constraints, witness) } @@ -146,11 +144,17 @@ pub fn dummy_proof() -> (StarkVerifyingKey, ShardProof) { (wrapped_proof.vk, wrapped_proof.proof) } -fn build_wrap_circuit( - template_vk: &StarkVerifyingKey, - template_proof: &ShardProof, -) -> Vec { - let machine = WrapAir::machine(OuterSC::default()); +fn build_outer_circuit(template_input: &SP1CompressWitnessValues) -> Vec { + let wrap_machine = WrapAir::machine(OuterSC::default()); + + let wrap_span = tracing::debug_span!("build wrap circuit").entered(); + let mut builder = Builder::::default(); + let input = template_input.read(&mut builder); + SP1CompressVerifier::verify(&mut builder, &wrap_machine, input); + + let mut backend = ConstraintCompiler::::default(); + let operations = backend.emit(builder.operations); + wrap_span.exit(); - build_wrap_circuit_with::(template_vk, template_proof.clone(), machine) + operations } diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 5b65f168ab..e77d28e720 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -65,7 +65,7 @@ pub struct SP1CompressShape { impl SP1CompressVerifier where SC: BabyBearFriConfigVariable, - C: CircuitConfig>, + C: CircuitConfig, >::ProverData>: Clone, A: MachineAir + for<'a> Air>, { diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index 5c6ef9e33c..b8f4bcf750 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -6,16 +6,17 @@ use p3_symmetric::Hash; use p3_field::AbstractField; use sp1_recursion_compiler::ir::Builder; use sp1_stark::{ - baby_bear_poseidon2::BabyBearPoseidon2, InnerChallenge, InnerPerm, InnerVal, StarkVerifyingKey, - Word, + baby_bear_poseidon2::BabyBearPoseidon2, Com, InnerChallenge, InnerPerm, InnerVal, OpeningProof, + StarkVerifyingKey, Word, }; use sp1_recursion_compiler::ir::Felt; use crate::{ challenger::DuplexChallengerVariable, + hash::FieldHasherVariable, witness::{WitnessWriter, Witnessable}, - CircuitConfig, VerifyingKeyVariable, + BabyBearFriConfigVariable, CircuitConfig, TwoAdicPcsProofVariable, VerifyingKeyVariable, }; use super::{ @@ -73,11 +74,13 @@ where } } -impl Witnessable for StarkVerifyingKey +impl, SC: BabyBearFriConfigVariable> + Witnessable for StarkVerifyingKey where - C: CircuitConfig>, + Com: Witnessable>::Digest>, + OpeningProof: Witnessable>, { - type WitnessVariable = VerifyingKeyVariable; + type WitnessVariable = VerifyingKeyVariable; fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { let commitment = self.commit.read(builder); @@ -123,11 +126,32 @@ where } } -impl Witnessable for SP1CompressWitnessValues +// impl Witnessable for SP1CompressWitnessValues +// where +// C: CircuitConfig>, +// { +// type WitnessVariable = SP1CompressWitnessVariable; + +// fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { +// let vks_and_proofs = self.vks_and_proofs.read(builder); +// let is_complete = InnerVal::from_bool(self.is_complete).read(builder); + +// SP1CompressWitnessVariable { vks_and_proofs, is_complete } +// } + +// fn write(&self, witness: &mut impl WitnessWriter) { +// self.vks_and_proofs.write(witness); +// self.is_complete.write(witness); +// } +// } + +impl, SC: BabyBearFriConfigVariable> + Witnessable for SP1CompressWitnessValues where - C: CircuitConfig>, + Com: Witnessable>::Digest>, + OpeningProof: Witnessable>, { - type WitnessVariable = SP1CompressWitnessVariable; + type WitnessVariable = SP1CompressWitnessVariable; fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { let vks_and_proofs = self.vks_and_proofs.read(builder); @@ -138,7 +162,7 @@ where fn write(&self, witness: &mut impl WitnessWriter) { self.vks_and_proofs.write(witness); - self.is_complete.write(witness); + InnerVal::from_bool(self.is_complete).write(witness); } } From 1e5f308a427adc5add7bec39cce71b81bc8138bf Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 10:30:43 -0700 Subject: [PATCH 059/268] cleanup --- .../recursion/circuit-v2/src/build_wrap_v2.rs | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/crates/recursion/circuit-v2/src/build_wrap_v2.rs b/crates/recursion/circuit-v2/src/build_wrap_v2.rs index bfeeb6fdd4..7de92d943f 100644 --- a/crates/recursion/circuit-v2/src/build_wrap_v2.rs +++ b/crates/recursion/circuit-v2/src/build_wrap_v2.rs @@ -68,21 +68,8 @@ where let vkey_hash = builder.constant(::N::zero()); builder.commit_vkey_hash_circuit(vkey_hash); - // Validate public values - // let mut pv_elements = Vec::new(); - // for i in 0..PROOF_MAX_NUM_PVS { - // let element = builder.get(&proof.public_values, i); - // pv_elements.push(element); - // } - let pv: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); - // TODO: Add back. - // let one_felt: Felt<_> = builder.constant(BabyBear::one()); - // // Proof must be complete. In the reduce program, this will ensure that the SP1 proof has - // // been fully accumulated. - // builder.assert_felt_eq(pv.is_complete, one_felt); - // Convert pv.sp1_vk_digest into Bn254 let pv_vkey_hash = felts_to_bn254_var(&mut builder, &pv.sp1_vk_digest); // Vkey hash must match the witnessed commited_values_digest that we are committing to. @@ -131,15 +118,6 @@ where } builder.assert_ext_eq(cumulative_sum, zero_ext); - // TODO: Add back. - // Verify the public values digest. - // let calculated_digest = - // builder.p2_circuit_babybear_hash(&proof.public_values[0..NUM_PV_ELMS_TO_HASH]); - // let expected_digest = pv.digest; - // for (calculated_elm, expected_elm) in calculated_digest.iter().zip(expected_digest.iter()) { - // builder.assert_felt_eq(*expected_elm, *calculated_elm); - // } - let mut backend = ConstraintCompiler::::default(); backend.emit(builder.operations) } From a6ce5539ea1cd1204c00522d67d1c76a3ad152be Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 11:19:21 -0700 Subject: [PATCH 060/268] try is_complete not in shape --- crates/recursion/circuit-v2/src/machine/compress.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index e77d28e720..c5087803be 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -59,7 +59,7 @@ pub struct SP1CompressWitnessValues { #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SP1CompressShape { pub proof_shapes: Vec, - pub is_complete: bool, + // pub is_complete: bool, } impl SP1CompressVerifier @@ -477,6 +477,6 @@ where impl SP1CompressWitnessValues { pub fn shape(&self) -> SP1CompressShape { let proof_shapes = self.vks_and_proofs.iter().map(|(_, proof)| proof.shape()).collect(); - SP1CompressShape { proof_shapes, is_complete: self.is_complete } + SP1CompressShape { proof_shapes } } } From 2c4c3e086e85fcd06fe42e57d0f6f63305b639b9 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 11:24:06 -0700 Subject: [PATCH 061/268] cleanup --- crates/recursion/circuit-v2/src/machine/compress.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index c5087803be..d255debeae 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -58,8 +58,7 @@ pub struct SP1CompressWitnessValues { #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SP1CompressShape { - pub proof_shapes: Vec, - // pub is_complete: bool, + proof_shapes: Vec, } impl SP1CompressVerifier From 63199b2b19be7095fab3a06258320daff873487b Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 11:28:04 -0700 Subject: [PATCH 062/268] opts in deferred test --- crates/prover/src/lib.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index d918da62a6..9d7aa639bb 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1111,7 +1111,9 @@ pub mod tests { Ok(()) } - pub fn test_e2e_with_deferred_proofs_prover() -> Result<()> { + pub fn test_e2e_with_deferred_proofs_prover( + opts: SP1ProverOpts, + ) -> Result<()> { // Test program which proves the Keccak-256 hash of various inputs. let keccak_elf = include_bytes!("../../../tests/keccak256/elf/riscv32im-succinct-zkvm-elf"); @@ -1121,7 +1123,6 @@ pub mod tests { tracing::info!("initializing prover"); let prover: SP1Prover = SP1Prover::new(); - let opts = SP1ProverOpts::default(); tracing::info!("setup keccak elf"); let (keccak_pk, keccak_vk) = prover.setup(keccak_elf); @@ -1227,6 +1228,6 @@ pub mod tests { #[serial] fn test_e2e_with_deferred_proofs() -> Result<()> { setup_logger(); - test_e2e_with_deferred_proofs_prover::() + test_e2e_with_deferred_proofs_prover::(SP1ProverOpts::default()) } } From e0800e7666f2eb08e31674530d9ba8c7becc5758 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 11:34:24 -0700 Subject: [PATCH 063/268] sp1 prover in deferred test --- crates/prover/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 9d7aa639bb..cdca03f1c1 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1122,7 +1122,7 @@ pub mod tests { include_bytes!("../../../tests/verify-proof/elf/riscv32im-succinct-zkvm-elf"); tracing::info!("initializing prover"); - let prover: SP1Prover = SP1Prover::new(); + let prover = SP1Prover::::new(); tracing::info!("setup keccak elf"); let (keccak_pk, keccak_vk) = prover.setup(keccak_elf); From dacaf9eaff453efc3af864b95f6db604d594a0a5 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 12:16:13 -0700 Subject: [PATCH 064/268] checkpoint --- crates/cuda/src/lib.rs | 5 ++- crates/sdk/src/proof.rs | 4 +-- crates/sdk/src/provers/cpu.rs | 2 +- crates/sdk/src/provers/cuda.rs | 2 +- crates/sdk/src/provers/mock.rs | 57 +++++++++++++++++++++------------- 5 files changed, 42 insertions(+), 28 deletions(-) diff --git a/crates/cuda/src/lib.rs b/crates/cuda/src/lib.rs index 06bf49b4a8..e5aabfcaca 100644 --- a/crates/cuda/src/lib.rs +++ b/crates/cuda/src/lib.rs @@ -23,7 +23,6 @@ use sp1_prover::{ types::SP1ProvingKey, InnerSC, OuterSC, SP1CoreProof, SP1RecursionProverError, SP1ReduceProof, SP1VerifyingKey, }; -use sp1_stark::ShardProof; use tokio::task::block_in_place; use twirp::{url::Url, Client}; @@ -62,7 +61,7 @@ pub struct CompressRequestPayload { /// The core proof. pub proof: SP1CoreProof, /// The deferred proofs. - pub deferred_proofs: Vec>, + pub deferred_proofs: Vec>, } /// The payload for the [sp1_prover::SP1Prover::shrink] method. @@ -208,7 +207,7 @@ impl SP1CudaProver { &self, vk: &SP1VerifyingKey, proof: SP1CoreProof, - deferred_proofs: Vec>, + deferred_proofs: Vec>, ) -> Result, SP1RecursionProverError> { let payload = CompressRequestPayload { vk: vk.clone(), proof, deferred_proofs }; let request = diff --git a/crates/sdk/src/proof.rs b/crates/sdk/src/proof.rs index 6f6b6713b7..57a6732b4c 100644 --- a/crates/sdk/src/proof.rs +++ b/crates/sdk/src/proof.rs @@ -6,7 +6,7 @@ use sp1_core_machine::io::{SP1PublicValues, SP1Stdin}; use strum_macros::{EnumDiscriminants, EnumTryAs}; use sp1_prover::{CoreSC, Groth16Bn254Proof, InnerSC, PlonkBn254Proof, SP1ReduceProof}; -use sp1_stark::{MachineVerificationError, ShardProof, StarkVerifyingKey}; +use sp1_stark::{MachineVerificationError, ShardProof}; /// A proof generated with SP1 of a particular proof mode. #[derive(Debug, Clone, Serialize, Deserialize, EnumDiscriminants, EnumTryAs)] @@ -15,7 +15,7 @@ use sp1_stark::{MachineVerificationError, ShardProof, StarkVerifyingKey}; pub enum SP1Proof { #[strum_discriminants(default)] Core(Vec>), - Compressed(SP1ReduceProof), + Compressed(Box>), Plonk(PlonkBn254Proof), Groth16(Groth16Bn254Proof), } diff --git a/crates/sdk/src/provers/cpu.rs b/crates/sdk/src/provers/cpu.rs index 704487e96f..a50fe74823 100644 --- a/crates/sdk/src/provers/cpu.rs +++ b/crates/sdk/src/provers/cpu.rs @@ -75,7 +75,7 @@ impl Prover for CpuProver { self.prover.compress(&pk.vk, proof, deferred_proofs, opts.sp1_prover_opts)?; if kind == SP1ProofKind::Compressed { return Ok(SP1ProofWithPublicValues { - proof: SP1Proof::Compressed(reduce_proof), + proof: SP1Proof::Compressed(Box::new(reduce_proof)), stdin, public_values, sp1_version: self.version().to_string(), diff --git a/crates/sdk/src/provers/cuda.rs b/crates/sdk/src/provers/cuda.rs index 99f7441459..04558794fc 100644 --- a/crates/sdk/src/provers/cuda.rs +++ b/crates/sdk/src/provers/cuda.rs @@ -73,7 +73,7 @@ impl Prover for CudaProver { let reduce_proof = self.cuda_prover.compress(&pk.vk, proof, deferred_proofs)?; if kind == SP1ProofKind::Compressed { return Ok(SP1ProofWithPublicValues { - proof: SP1Proof::Compressed(reduce_proof), + proof: SP1Proof::Compressed(Box::new(reduce_proof)), stdin, public_values, sp1_version: self.version().to_string(), diff --git a/crates/sdk/src/provers/mock.rs b/crates/sdk/src/provers/mock.rs index d4d2467045..27edb37977 100644 --- a/crates/sdk/src/provers/mock.rs +++ b/crates/sdk/src/provers/mock.rs @@ -2,7 +2,7 @@ use hashbrown::HashMap; use sp1_core_executor::SP1Context; use sp1_core_machine::io::SP1Stdin; -use sp1_stark::{ShardCommitment, ShardOpenedValues, ShardProof}; +use sp1_stark::{ShardCommitment, ShardOpenedValues, ShardProof, StarkVerifyingKey}; use crate::{ Prover, SP1Proof, SP1ProofKind, SP1ProofWithPublicValues, SP1ProvingKey, SP1VerificationError, @@ -15,7 +15,7 @@ use p3_fri::{FriProof, TwoAdicFriPcsProof}; use sp1_prover::{ components::DefaultProverComponents, verify::{verify_groth16_bn254_public_inputs, verify_plonk_bn254_public_inputs}, - Groth16Bn254Proof, HashableKey, PlonkBn254Proof, SP1Prover, + Groth16Bn254Proof, HashableKey, PlonkBn254Proof, SP1Prover, SP1ReduceProof, }; use super::{ProofOpts, ProverType}; @@ -66,26 +66,41 @@ impl Prover for MockProver { } SP1ProofKind::Compressed => { let (public_values, _) = self.prover.execute(&pk.elf, &stdin, context)?; - Ok(SP1ProofWithPublicValues { - proof: SP1Proof::Compressed(ShardProof { - commitment: ShardCommitment { - main_commit: [BabyBear::zero(); 8].into(), - permutation_commit: [BabyBear::zero(); 8].into(), - quotient_commit: [BabyBear::zero(); 8].into(), - }, - opened_values: ShardOpenedValues { chips: vec![] }, - opening_proof: TwoAdicFriPcsProof { - fri_proof: FriProof { - commit_phase_commits: vec![], - query_proofs: vec![], - final_poly: Default::default(), - pow_witness: BabyBear::zero(), - }, - query_openings: vec![], + + let shard_proof = ShardProof { + commitment: ShardCommitment { + main_commit: [BabyBear::zero(); 8].into(), + permutation_commit: [BabyBear::zero(); 8].into(), + quotient_commit: [BabyBear::zero(); 8].into(), + }, + opened_values: ShardOpenedValues { chips: vec![] }, + opening_proof: TwoAdicFriPcsProof { + fri_proof: FriProof { + commit_phase_commits: vec![], + query_proofs: vec![], + final_poly: Default::default(), + pow_witness: BabyBear::zero(), }, - chip_ordering: HashMap::new(), - public_values: vec![], - }), + query_openings: vec![], + }, + chip_ordering: HashMap::new(), + public_values: vec![], + }; + + let reduce_vk = StarkVerifyingKey { + commit: [BabyBear::zero(); 8].into(), + pc_start: BabyBear::zero(), + chip_information: vec![], + chip_ordering: HashMap::new(), + }; + + let proof = SP1Proof::Compressed(Box::new(SP1ReduceProof { + vk: reduce_vk, + proof: shard_proof, + })); + + Ok(SP1ProofWithPublicValues { + proof, stdin, public_values, sp1_version: self.version().to_string(), From 92d0c32f00f8896989d132a74e522e0b77b7473c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 13:00:52 -0700 Subject: [PATCH 065/268] wrap plonk --- crates/prover/src/lib.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index cdca03f1c1..f7fbabfd91 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -902,13 +902,15 @@ impl SP1Prover { proof: SP1ReduceProof, build_dir: &Path, ) -> PlonkBn254Proof { + let input = SP1CompressWitnessValues { + vks_and_proofs: vec![(proof.vk.clone(), proof.proof.clone())], + is_complete: true, + }; let vkey_digest = proof.sp1_vkey_digest_bn254(); let commited_values_digest = proof.sp1_commited_values_digest_bn254(); let mut witness = Witness::default(); - proof.proof.write(&mut witness); - // witness.write_commited_values_digest(commited_values_digest); - // witness.write_vkey_hash(vkey_digest); + input.write(&mut witness); let prover = PlonkBn254Prover::new(); let proof = prover.prove(witness, build_dir.to_path_buf()); From cd8fbf695e8bd88fc36abdb273918ab068fc396f Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 13:01:30 -0700 Subject: [PATCH 066/268] fix witness --- crates/prover/src/lib.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index f7fbabfd91..55af2087be 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -933,13 +933,15 @@ impl SP1Prover { proof: SP1ReduceProof, build_dir: &Path, ) -> Groth16Bn254Proof { + let input = SP1CompressWitnessValues { + vks_and_proofs: vec![(proof.vk.clone(), proof.proof.clone())], + is_complete: true, + }; let vkey_digest = proof.sp1_vkey_digest_bn254(); let commited_values_digest = proof.sp1_commited_values_digest_bn254(); let mut witness = Witness::default(); - proof.proof.write(&mut witness); - // witness.write_commited_values_digest(commited_values_digest); - // witness.write_vkey_hash(vkey_digest); + input.write(&mut witness); let prover = Groth16Bn254Prover::new(); let proof = prover.prove(witness, build_dir.to_path_buf()); From 88f8ffefdad14c926fd527a1a67093ce9b472f9b Mon Sep 17 00:00:00 2001 From: John Guibas Date: Fri, 23 Aug 2024 14:00:49 -0700 Subject: [PATCH 067/268] opt --- crates/core/executor/src/executor.rs | 10 ++-- crates/core/executor/src/record.rs | 36 +++++++-------- crates/core/machine/src/utils/prove.rs | 1 + .../circuit-v2/src/machine/compress.rs | 46 +++++++++---------- 4 files changed, 47 insertions(+), 46 deletions(-) diff --git a/crates/core/executor/src/executor.rs b/crates/core/executor/src/executor.rs index 267259f8ad..3ac459ae94 100644 --- a/crates/core/executor/src/executor.rs +++ b/crates/core/executor/src/executor.rs @@ -1229,11 +1229,6 @@ impl<'a> Executor<'a> { // Get the final public values. let public_values = self.record.public_values; - // Push the remaining execution record, if there are any CPU events. - if !self.record.cpu_events.is_empty() { - self.bump_record(); - } - if done { self.postprocess(); @@ -1241,6 +1236,11 @@ impl<'a> Executor<'a> { self.bump_record(); } + // Push the remaining execution record, if there are any CPU events. + if !self.record.cpu_events.is_empty() { + self.bump_record(); + } + // Set the global public values for all shards. let mut last_next_pc = 0; let mut last_exit_code = 0; diff --git a/crates/core/executor/src/record.rs b/crates/core/executor/src/record.rs index fe2fab16de..e3133a4698 100644 --- a/crates/core/executor/src/record.rs +++ b/crates/core/executor/src/record.rs @@ -148,26 +148,26 @@ impl ExecutionRecord { #[must_use] pub fn defer(&mut self) -> ExecutionRecord { ExecutionRecord { - keccak_permute_events: std::mem::take(&mut self.keccak_permute_events), + // keccak_permute_events: std::mem::take(&mut self.keccak_permute_events), secp256k1_add_events: std::mem::take(&mut self.secp256k1_add_events), secp256k1_double_events: std::mem::take(&mut self.secp256k1_double_events), - bn254_fp_events: std::mem::take(&mut self.bn254_fp_events), - bn254_fp2_addsub_events: std::mem::take(&mut self.bn254_fp2_addsub_events), - bn254_fp2_mul_events: std::mem::take(&mut self.bn254_fp2_mul_events), - bn254_add_events: std::mem::take(&mut self.bn254_add_events), - bn254_double_events: std::mem::take(&mut self.bn254_double_events), - bls12381_add_events: std::mem::take(&mut self.bls12381_add_events), - bls12381_double_events: std::mem::take(&mut self.bls12381_double_events), - sha_extend_events: std::mem::take(&mut self.sha_extend_events), - sha_compress_events: std::mem::take(&mut self.sha_compress_events), - ed_add_events: std::mem::take(&mut self.ed_add_events), - ed_decompress_events: std::mem::take(&mut self.ed_decompress_events), - k256_decompress_events: std::mem::take(&mut self.k256_decompress_events), - uint256_mul_events: std::mem::take(&mut self.uint256_mul_events), - bls12381_fp_events: std::mem::take(&mut self.bls12381_fp_events), - bls12381_fp2_addsub_events: std::mem::take(&mut self.bls12381_fp2_addsub_events), - bls12381_fp2_mul_events: std::mem::take(&mut self.bls12381_fp2_mul_events), - bls12381_decompress_events: std::mem::take(&mut self.bls12381_decompress_events), + // bn254_fp_events: std::mem::take(&mut self.bn254_fp_events), + // bn254_fp2_addsub_events: std::mem::take(&mut self.bn254_fp2_addsub_events), + // bn254_fp2_mul_events: std::mem::take(&mut self.bn254_fp2_mul_events), + // bn254_add_events: std::mem::take(&mut self.bn254_add_events), + // bn254_double_events: std::mem::take(&mut self.bn254_double_events), + // bls12381_add_events: std::mem::take(&mut self.bls12381_add_events), + // bls12381_double_events: std::mem::take(&mut self.bls12381_double_events), + // sha_extend_events: std::mem::take(&mut self.sha_extend_events), + // sha_compress_events: std::mem::take(&mut self.sha_compress_events), + // ed_add_events: std::mem::take(&mut self.ed_add_events), + // ed_decompress_events: std::mem::take(&mut self.ed_decompress_events), + // k256_decompress_events: std::mem::take(&mut self.k256_decompress_events), + // uint256_mul_events: std::mem::take(&mut self.uint256_mul_events), + // bls12381_fp_events: std::mem::take(&mut self.bls12381_fp_events), + // bls12381_fp2_addsub_events: std::mem::take(&mut self.bls12381_fp2_addsub_events), + // bls12381_fp2_mul_events: std::mem::take(&mut self.bls12381_fp2_mul_events), + // bls12381_decompress_events: std::mem::take(&mut self.bls12381_decompress_events), memory_initialize_events: std::mem::take(&mut self.memory_initialize_events), memory_finalize_events: std::mem::take(&mut self.memory_finalize_events), ..Default::default() diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 3b30a03186..e5cc29c810 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -235,6 +235,7 @@ where // "cpu events". let mut state = state.lock().unwrap(); for record in records.iter_mut() { + println!("record: {:?}", record.stats()); state.shard += 1; state.execution_shard = record.public_values.execution_shard; state.start_pc = record.public_values.start_pc; diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index d255debeae..a4f5c3e957 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -258,35 +258,35 @@ where // // Consistency checks for all accumulated values. // Assert that the sp1_vk digest is always the same. - for (digest, current) in sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { - builder.assert_felt_eq(*digest, current); - } + // for (digest, current) in sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { + // builder.assert_felt_eq(*digest, current); + // } - // Assert that the start pc is equal to the current pc. - builder.assert_felt_eq(pc, current_public_values.start_pc); + // // Assert that the start pc is equal to the current pc. + // builder.assert_felt_eq(pc, current_public_values.start_pc); - // Verify that the shard is equal to the current shard. - builder.assert_felt_eq(shard, current_public_values.start_shard); + // // Verify that the shard is equal to the current shard. + // builder.assert_felt_eq(shard, current_public_values.start_shard); - // Verfiy that the exeuction shard is equal to the current execution shard. - builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + // // Verfiy that the exeuction shard is equal to the current execution shard. + // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); - // Assert that the leaf challenger is always the same. + // // Assert that the leaf challenger is always the same. - // Assert that the MemoryInitialize address bits are the same. - for (bit, current_bit) in - init_addr_bits.iter().zip(current_public_values.previous_init_addr_bits.iter()) - { - builder.assert_felt_eq(*bit, *current_bit); - } + // // Assert that the MemoryInitialize address bits are the same. + // for (bit, current_bit) in + // init_addr_bits.iter().zip(current_public_values.previous_init_addr_bits.iter()) + // { + // builder.assert_felt_eq(*bit, *current_bit); + // } - // Assert that the MemoryFinalize address bits are the same. - for (bit, current_bit) in finalize_addr_bits - .iter() - .zip(current_public_values.previous_finalize_addr_bits.iter()) - { - builder.assert_felt_eq(*bit, *current_bit); - } + // // Assert that the MemoryFinalize address bits are the same. + // for (bit, current_bit) in finalize_addr_bits + // .iter() + // .zip(current_public_values.previous_finalize_addr_bits.iter()) + // { + // builder.assert_felt_eq(*bit, *current_bit); + // } // Assert that the leaf challenger is always the same. From 358951294f6d4579a46c46293603afea455b6765 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 14:23:21 -0700 Subject: [PATCH 068/268] change width constants --- crates/recursion/core-v2/src/chips/alu_base.rs | 2 +- crates/recursion/core-v2/src/chips/mem/constant.rs | 2 +- crates/recursion/core-v2/src/chips/mem/variable.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/recursion/core-v2/src/chips/alu_base.rs b/crates/recursion/core-v2/src/chips/alu_base.rs index 5d96efbf46..3c7b76e917 100644 --- a/crates/recursion/core-v2/src/chips/alu_base.rs +++ b/crates/recursion/core-v2/src/chips/alu_base.rs @@ -10,7 +10,7 @@ use std::{borrow::BorrowMut, iter::zip}; use crate::{builder::SP1RecursionAirBuilder, *}; -pub const NUM_BASE_ALU_ENTRIES_PER_ROW: usize = 8; +pub const NUM_BASE_ALU_ENTRIES_PER_ROW: usize = 4; #[derive(Default)] pub struct BaseAluChip {} diff --git a/crates/recursion/core-v2/src/chips/mem/constant.rs b/crates/recursion/core-v2/src/chips/mem/constant.rs index 1b3654a1e0..bb210e7ed5 100644 --- a/crates/recursion/core-v2/src/chips/mem/constant.rs +++ b/crates/recursion/core-v2/src/chips/mem/constant.rs @@ -12,7 +12,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; use super::MemoryAccessCols; -pub const NUM_MEM_ENTRIES_PER_ROW: usize = 16; +pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { diff --git a/crates/recursion/core-v2/src/chips/mem/variable.rs b/crates/recursion/core-v2/src/chips/mem/variable.rs index 090f244277..065a3a4d72 100644 --- a/crates/recursion/core-v2/src/chips/mem/variable.rs +++ b/crates/recursion/core-v2/src/chips/mem/variable.rs @@ -13,7 +13,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; use super::MemoryAccessCols; -pub const NUM_MEM_ENTRIES_PER_ROW: usize = 16; +pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { From 709edb07a8debdba23e7c8e20d3abaa4b33070bc Mon Sep 17 00:00:00 2001 From: John Guibas Date: Fri, 23 Aug 2024 15:44:25 -0700 Subject: [PATCH 069/268] changes --- crates/prover/src/lib.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 55af2087be..222f4be568 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1091,16 +1091,16 @@ pub mod tests { let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); assert_eq!(vk_digest_bn254, vk.hash_bn254()); - tracing::info!("generate plonk bn254 proof"); - let artifacts_dir = try_build_plonk_bn254_artifacts_dev( - &wrapped_bn254_proof.vk, - &wrapped_bn254_proof.proof, - ); - let plonk_bn254_proof = - prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); - println!("{:?}", plonk_bn254_proof); - - prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; + // tracing::info!("generate plonk bn254 proof"); + // let artifacts_dir = try_build_plonk_bn254_artifacts_dev( + // &wrapped_bn254_proof.vk, + // &wrapped_bn254_proof.proof, + // ); + // let plonk_bn254_proof = + // prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); + // println!("{:?}", plonk_bn254_proof); + + // prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; tracing::info!("generate groth16 bn254 proof"); let artifacts_dir = try_build_groth16_bn254_artifacts_dev( From 0acfceb2ba1ec26ca0941677643c5e34bae11789 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 15:51:08 -0700 Subject: [PATCH 070/268] commit to pv --- crates/recursion/circuit-v2/src/lib.rs | 32 ++++++++++++++++--- .../circuit-v2/src/machine/compress.rs | 4 +-- .../recursion/circuit-v2/src/machine/core.rs | 3 +- .../circuit-v2/src/machine/deferred.rs | 3 +- crates/recursion/circuit-v2/src/utils.rs | 18 ++--------- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 7d9b4f11e9..5f5675425d 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -43,11 +43,13 @@ use p3_commit::{ExtensionMmcs, Mmcs}; use p3_dft::Radix2DitParallel; use p3_fri::{FriConfig, TwoAdicFriPcs}; use sp1_recursion_core_v2::{ + air::RecursionPublicValues, stark::config::{BabyBearPoseidon2Outer, OuterValMmcs}, D, }; use p3_baby_bear::BabyBear; +use utils::{felt_bytes_to_bn254_var, felts_to_bn254_var, words_to_bytes}; type EF = ::Challenge; @@ -99,6 +101,11 @@ pub trait BabyBearFriConfigVariable>: /// Get a new challenger corresponding to the given config. fn challenger_variable(&self, builder: &mut Builder) -> Self::FriChallengerVariable; + + fn commit_recursion_public_values( + builder: &mut Builder, + public_values: RecursionPublicValues>, + ); } pub trait CircuitConfig: Config { @@ -358,10 +365,6 @@ impl BabyBearFriConfig for BabyBearPoseidon2Outer { fn challenger_shape(_challenger: &Self::FriChallenger) -> SpongeChallengerShape { unimplemented!("Shape not supported for outer fri challenger"); - // SpongeChallengerShape { - // input_buffer_len: challenger.input_buffer.len(), - // output_buffer_len: challenger.output_buffer.len(), - // } } } @@ -373,6 +376,13 @@ impl>> BabyBearFriConfigVari fn challenger_variable(&self, builder: &mut Builder) -> Self::FriChallengerVariable { DuplexChallengerVariable::new(builder) } + + fn commit_recursion_public_values( + builder: &mut Builder, + public_values: RecursionPublicValues::F>>, + ) { + builder.commit_public_values_v2(public_values); + } } impl>> BabyBearFriConfigVariable @@ -383,6 +393,20 @@ impl>> BabyBearFr fn challenger_variable(&self, builder: &mut Builder) -> Self::FriChallengerVariable { MultiField32ChallengerVariable::new(builder) } + + fn commit_recursion_public_values( + builder: &mut Builder, + public_values: RecursionPublicValues::F>>, + ) { + let committed_values_digest_bytes_felts: [Felt<_>; 32] = + words_to_bytes(&public_values.committed_value_digest).try_into().unwrap(); + let committed_values_digest_bytes: Var<_> = + felt_bytes_to_bn254_var(builder, &committed_values_digest_bytes_felts); + builder.commit_commited_values_digest_circuit(committed_values_digest_bytes); + + let vkey_hash = felts_to_bn254_var(builder, &public_values.sp1_vk_digest); + builder.commit_vkey_hash_circuit(vkey_hash); + } } pub fn select_chain<'a, C, R, S>( diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index d255debeae..ec74e4956b 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -30,7 +30,7 @@ use crate::{ challenger::CanObserveVariable, constraints::RecursiveVerifierConstraintFolder, stark::{ShardProofVariable, StarkVerifier}, - utils::{commit_recursion_public_values, uninit_challenger_pv}, + utils::uninit_challenger_pv, BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, }; @@ -469,7 +469,7 @@ where // }, // ); - commit_recursion_public_values(builder, *compress_public_values); + SC::commit_recursion_public_values(builder, *compress_public_values); } } diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index e8f26af169..6465b6b7b6 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -33,7 +33,6 @@ use sp1_recursion_core_v2::{ use crate::{ challenger::{CanObserveVariable, DuplexChallengerVariable, SpongeChallengerShape}, stark::{ShardProofVariable, StarkVerifier}, - utils::commit_recursion_public_values, BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, }; @@ -560,7 +559,7 @@ where // assert_complete(builder, recursion_public_values, &reconstruct_challenger) // }); - commit_recursion_public_values(builder, *recursion_public_values); + SC::commit_recursion_public_values(builder, *recursion_public_values); } } } diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index bf5cba0067..368bd166c2 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -26,7 +26,6 @@ use crate::{ challenger::{CanObserveVariable, DuplexChallengerVariable}, constraints::RecursiveVerifierConstraintFolder, stark::{ShardProofVariable, StarkVerifier}, - utils::commit_recursion_public_values, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, }; @@ -205,6 +204,6 @@ where // Set the cumulative sum to zero. deferred_public_values.cumulative_sum = array::from_fn(|_| builder.eval(C::F::zero())); - commit_recursion_public_values(builder, *deferred_public_values); + SC::commit_recursion_public_values(builder, *deferred_public_values); } } diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index 4b38ec2b56..d6c26d59f3 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -5,24 +5,10 @@ use p3_bn254_fr::Bn254Fr; use p3_field::AbstractField; use p3_field::PrimeField32; -use sp1_recursion_compiler::{ - circuit::CircuitV2Builder, - ir::{Builder, Config, Felt, Var}, -}; -use sp1_recursion_core_v2::{ - air::{ChallengerPublicValues, RecursionPublicValues}, - DIGEST_SIZE, -}; +use sp1_recursion_compiler::ir::{Builder, Config, Felt, Var}; +use sp1_recursion_core_v2::{air::ChallengerPublicValues, DIGEST_SIZE}; use sp1_stark::Word; -/// Register and commits the recursion public values. -pub fn commit_recursion_public_values( - builder: &mut Builder, - public_values: RecursionPublicValues>, -) { - builder.commit_public_values_v2(public_values); -} - pub(crate) unsafe fn uninit_challenger_pv( _builder: &mut Builder, ) -> ChallengerPublicValues> { From 7dc973c392e04cca55336db5aed96723c2560554 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 16:11:09 -0700 Subject: [PATCH 071/268] public values --- crates/prover/src/build.rs | 17 +++++++++++++++-- crates/prover/src/lib.rs | 20 ++++++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index a0ea9cfbec..3582fa402e 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -1,5 +1,6 @@ -use std::path::PathBuf; +use std::{borrow::Borrow, path::PathBuf}; +use p3_baby_bear::BabyBear; use sp1_core_executor::SP1Context; use sp1_core_machine::io::SP1Stdin; use sp1_recursion_circuit_v2::machine::{SP1CompressVerifier, SP1CompressWitnessValues}; @@ -9,6 +10,7 @@ use sp1_recursion_compiler::{ ir::Builder, }; +use sp1_recursion_core_v2::air::RecursionPublicValues; pub use sp1_recursion_core_v2::stark::utils::sp1_dev_mode; pub use sp1_recursion_circuit_v2::witness::{OuterWitness, Witnessable}; @@ -16,7 +18,10 @@ pub use sp1_recursion_circuit_v2::witness::{OuterWitness, Witnessable}; use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; use sp1_stark::{SP1ProverOpts, ShardProof, StarkVerifyingKey}; -use crate::{OuterSC, SP1Prover, WrapAir}; +use crate::{ + utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, + OuterSC, SP1Prover, WrapAir, +}; /// Tries to build the PLONK artifacts inside the development directory. pub fn try_build_plonk_bn254_artifacts_dev( @@ -107,9 +112,17 @@ pub fn build_constraints_and_witness( let constraints = tracing::info_span!("wrap circuit").in_scope(|| build_outer_circuit(&template_input)); + let pv: &RecursionPublicValues = template_proof.public_values.as_slice().borrow(); + let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); + let committed_values_digest_bytes: [BabyBear; 32] = + words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); + let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); + tracing::info!("building template witness"); let mut witness = OuterWitness::default(); template_input.write(&mut witness); + witness.write_commited_values_digest(committed_values_digest); + witness.write_vkey_hash(vkey_hash); (constraints, witness) } diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 55af2087be..085e69f985 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -906,11 +906,13 @@ impl SP1Prover { vks_and_proofs: vec![(proof.vk.clone(), proof.proof.clone())], is_complete: true, }; - let vkey_digest = proof.sp1_vkey_digest_bn254(); - let commited_values_digest = proof.sp1_commited_values_digest_bn254(); + let vkey_hash = proof.sp1_vkey_digest_bn254(); + let committed_values_digest = proof.sp1_commited_values_digest_bn254(); let mut witness = Witness::default(); input.write(&mut witness); + witness.write_commited_values_digest(committed_values_digest); + witness.write_vkey_hash(vkey_hash); let prover = PlonkBn254Prover::new(); let proof = prover.prove(witness, build_dir.to_path_buf()); @@ -918,8 +920,8 @@ impl SP1Prover { // Verify the proof. prover.verify( &proof, - &vkey_digest.as_canonical_biguint(), - &commited_values_digest.as_canonical_biguint(), + &vkey_hash.as_canonical_biguint(), + &committed_values_digest.as_canonical_biguint(), build_dir, ); @@ -937,11 +939,13 @@ impl SP1Prover { vks_and_proofs: vec![(proof.vk.clone(), proof.proof.clone())], is_complete: true, }; - let vkey_digest = proof.sp1_vkey_digest_bn254(); - let commited_values_digest = proof.sp1_commited_values_digest_bn254(); + let vkey_hash = proof.sp1_vkey_digest_bn254(); + let committed_values_digest = proof.sp1_commited_values_digest_bn254(); let mut witness = Witness::default(); input.write(&mut witness); + witness.write_commited_values_digest(committed_values_digest); + witness.write_vkey_hash(vkey_hash); let prover = Groth16Bn254Prover::new(); let proof = prover.prove(witness, build_dir.to_path_buf()); @@ -949,8 +953,8 @@ impl SP1Prover { // Verify the proof. prover.verify( &proof, - &vkey_digest.as_canonical_biguint(), - &commited_values_digest.as_canonical_biguint(), + &vkey_hash.as_canonical_biguint(), + &committed_values_digest.as_canonical_biguint(), build_dir, ); From fc201618dcec258f80e0b5a56fadd7ca0b14e208 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 23 Aug 2024 18:23:35 -0700 Subject: [PATCH 072/268] cleanup --- crates/prover/src/build.rs | 2 +- crates/prover/src/lib.rs | 6 +- .../recursion/circuit-v2/src/build_wrap_v2.rs | 498 ------------------ crates/recursion/circuit-v2/src/lib.rs | 1 - crates/recursion/circuit-v2/src/utils.rs | 2 +- .../compiler/src/circuit/compiler.rs | 6 +- crates/recursion/compiler/src/circuit/mod.rs | 2 +- .../core-v2/src/chips/mem/constant.rs | 2 +- .../core-v2/src/chips/poseidon2_skinny/mod.rs | 2 +- .../core-v2/src/chips/poseidon2_wide/mod.rs | 4 +- crates/recursion/core-v2/src/machine.rs | 319 +++++++---- 11 files changed, 220 insertions(+), 624 deletions(-) delete mode 100644 crates/recursion/circuit-v2/src/build_wrap_v2.rs diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 3582fa402e..63ad7c34c3 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -158,7 +158,7 @@ pub fn dummy_proof() -> (StarkVerifyingKey, ShardProof) { } fn build_outer_circuit(template_input: &SP1CompressWitnessValues) -> Vec { - let wrap_machine = WrapAir::machine(OuterSC::default()); + let wrap_machine = WrapAir::wrap_machine(OuterSC::default()); let wrap_span = tracing::debug_span!("build wrap circuit").entered(); let mut builder = Builder::::default(); diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 085e69f985..a7c8d1c9c5 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -141,14 +141,14 @@ impl SP1Prover { let core_machine = RiscvAir::machine(CoreSC::default()); let core_prover = C::CoreProver::new(core_machine); - let compress_machine = CompressAir::machine_wide(InnerSC::default()); + let compress_machine = CompressAir::compress_machine(InnerSC::default()); let compress_prover = C::CompressProver::new(compress_machine); // TODO: Put the correct shrink and wrap machines here. - let shrink_machine = ShrinkAir::machine(InnerSC::compressed()); + let shrink_machine = ShrinkAir::shrink_machine(InnerSC::compressed()); let shrink_prover = C::ShrinkProver::new(shrink_machine); - let wrap_machine = WrapAir::machine(OuterSC::default()); + let wrap_machine = WrapAir::wrap_machine(OuterSC::default()); let wrap_prover = C::WrapProver::new(wrap_machine); let core_cache_size = NonZeroUsize::new( diff --git a/crates/recursion/circuit-v2/src/build_wrap_v2.rs b/crates/recursion/circuit-v2/src/build_wrap_v2.rs deleted file mode 100644 index 7de92d943f..0000000000 --- a/crates/recursion/circuit-v2/src/build_wrap_v2.rs +++ /dev/null @@ -1,498 +0,0 @@ -use std::borrow::Borrow; - -use itertools::Itertools; -use p3_baby_bear::BabyBear; -use p3_bn254_fr::Bn254Fr; -use p3_field::AbstractField; -use p3_fri::TwoAdicFriPcsProof; -use sp1_recursion_compiler::{ - config::OuterConfig, - constraints::{Constraint, ConstraintCompiler}, - ir::{Builder, Config, Ext, Felt, SymbolicExt, Var}, -}; -use sp1_recursion_core_v2::{ - air::RecursionPublicValues, - machine::RecursionAir, - stark::config::{ - BabyBearPoseidon2Outer, OuterChallenge, OuterChallengeMmcs, OuterFriProof, OuterVal, - OuterValMmcs, - }, -}; -use sp1_stark::{ - AirOpenedValues, ChipOpenedValues, ShardCommitment, ShardOpenedValues, ShardProof, - StarkMachine, StarkVerifyingKey, -}; - -use crate::{ - challenger::{CanObserveVariable, MultiField32ChallengerVariable}, - stark::{ShardProofVariable, StarkVerifier}, - utils::{felt_bytes_to_bn254_var, felts_to_bn254_var, words_to_bytes}, - witness::Witnessable, - BatchOpeningVariable, FriCommitPhaseProofStepVariable, FriProofVariable, FriQueryProofVariable, - TwoAdicPcsProofVariable, VerifyingKeyVariable, -}; - -pub const DIGEST_SIZE: usize = 1; - -type OuterSC = BabyBearPoseidon2Outer; -type OuterC = OuterConfig; -type OuterDigestVariable = [Var<::N>; DIGEST_SIZE]; - -/// A function to build the circuit for the final wrap layer using the architecture of core-v2. -/// -/// For now, the witnessing logic is not implemented and we just witness via constant proof variables. -pub fn build_wrap_circuit_v2_with( - wrap_vk: &StarkVerifyingKey, - template_proof: ShardProof, - outer_machine: StarkMachine>, -) -> Vec -where -{ - let mut builder = Builder::::default(); - let mut challenger = MultiField32ChallengerVariable::new(&mut builder); - - let preprocessed_commit_val: [Bn254Fr; 1] = wrap_vk.commit.into(); - let preprocessed_commit: OuterDigestVariable = [builder.eval(preprocessed_commit_val[0])]; - challenger.observe_commitment(&mut builder, preprocessed_commit); - let pc_start = builder.eval(wrap_vk.pc_start); - challenger.observe(&mut builder, pc_start); - - // let mut witness = OuterWitness::default(); - // template_proof.write(&mut witness); - - let proof = template_proof.read(&mut builder); - // let proof = const_shard_proof(&mut builder, &template_proof); - - let commited_values_digest = builder.constant(::N::zero()); - builder.commit_commited_values_digest_circuit(commited_values_digest); - let vkey_hash = builder.constant(::N::zero()); - builder.commit_vkey_hash_circuit(vkey_hash); - - let pv: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); - - // Convert pv.sp1_vk_digest into Bn254 - let pv_vkey_hash = felts_to_bn254_var(&mut builder, &pv.sp1_vk_digest); - // Vkey hash must match the witnessed commited_values_digest that we are committing to. - builder.assert_var_eq(pv_vkey_hash, vkey_hash); - - // Convert pv.committed_value_digest into Bn254 - let pv_committed_values_digest_bytes: [Felt<_>; 32] = - words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); - let pv_committed_values_digest: Var<_> = - felt_bytes_to_bn254_var(&mut builder, &pv_committed_values_digest_bytes); - - // // Committed values digest must match the witnessed one that we are committing to. - builder.assert_var_eq(pv_committed_values_digest, commited_values_digest); - - let ShardCommitment { main_commit, .. } = &proof.commitment; - challenger.observe_commitment(&mut builder, *main_commit); - - challenger.observe_slice(&mut builder, proof.clone().public_values); - - let StarkVerifyingKey { commit, pc_start, chip_information, chip_ordering } = wrap_vk; - - let wrap_vk = VerifyingKeyVariable { - commitment: commit - .into_iter() - .map(|elem| builder.eval(elem)) - .collect_vec() - .try_into() - .unwrap(), - pc_start: builder.eval(*pc_start), - chip_information: chip_information.clone(), - chip_ordering: chip_ordering.clone(), - }; - - StarkVerifier::::verify_shard( - &mut builder, - &wrap_vk, - &outer_machine, - &mut challenger.clone(), - &proof, - ); - - let zero_ext: Ext<_, _> = builder.constant(::EF::zero()); - let cumulative_sum: Ext<_, _> = builder.eval(zero_ext); - for chip in proof.opened_values.chips { - builder.assign(cumulative_sum, cumulative_sum + chip.cumulative_sum); - } - builder.assert_ext_eq(cumulative_sum, zero_ext); - - let mut backend = ConstraintCompiler::::default(); - backend.emit(builder.operations) -} - -/// A utility function to convert a `ShardProof` into a `ShardProofVariable`. Should be replaced by -/// more refined witness generation. -pub fn const_shard_proof( - builder: &mut Builder, - proof: &ShardProof, -) -> ShardProofVariable { - let opening_proof = const_two_adic_pcs_proof(builder, proof.opening_proof.clone()); - let opened_values = proof - .opened_values - .chips - .iter() - .map(|chip| { - let ChipOpenedValues { - preprocessed, - main, - permutation, - quotient, - cumulative_sum, - log_degree, - } = chip; - let AirOpenedValues { local: prepr_local, next: prepr_next } = preprocessed; - let AirOpenedValues { local: main_local, next: main_next } = main; - let AirOpenedValues { local: perm_local, next: perm_next } = permutation; - - let quotient = - quotient.iter().map(|q| q.iter().map(|x| builder.constant(*x)).collect()).collect(); - let cumulative_sum = builder.constant(*cumulative_sum); - - let preprocessed = AirOpenedValues { - local: prepr_local.iter().map(|x| builder.constant(*x)).collect(), - next: prepr_next.iter().map(|x| builder.constant(*x)).collect(), - }; - - let main = AirOpenedValues { - local: main_local.iter().map(|x| builder.constant(*x)).collect(), - next: main_next.iter().map(|x| builder.constant(*x)).collect(), - }; - - let permutation = AirOpenedValues { - local: perm_local.iter().map(|x| builder.constant(*x)).collect(), - next: perm_next.iter().map(|x| builder.constant(*x)).collect(), - }; - - ChipOpenedValues { - preprocessed, - main, - permutation, - quotient, - cumulative_sum, - log_degree: *log_degree, - } - }) - .collect(); - let opened_values = ShardOpenedValues { chips: opened_values }; - let ShardCommitment { main_commit, permutation_commit, quotient_commit } = proof.commitment; - let main_commit: [Bn254Fr; 1] = main_commit.into(); - let permutation_commit: [Bn254Fr; 1] = permutation_commit.into(); - let quotient_commit: [Bn254Fr; 1] = quotient_commit.into(); - - let main_commit = core::array::from_fn(|i| builder.eval(main_commit[i])); - let permutation_commit = core::array::from_fn(|i| builder.eval(permutation_commit[i])); - let quotient_commit = core::array::from_fn(|i| builder.eval(quotient_commit[i])); - - let commitment = ShardCommitment { main_commit, permutation_commit, quotient_commit }; - ShardProofVariable { - commitment, - public_values: proof.public_values.iter().map(|x| builder.constant(*x)).collect(), - opened_values, - opening_proof, - chip_ordering: proof.chip_ordering.clone(), - } -} - -type C = OuterConfig; -type SC = BabyBearPoseidon2Outer; -type N = ::N; - -// Copy-paste from InnerCircuit implementation, changing generic parameters. -fn const_fri_proof( - builder: &mut Builder, - fri_proof: OuterFriProof, -) -> FriProofVariable { - // Set the commit phase commits. - let commit_phase_commits = fri_proof - .commit_phase_commits - .iter() - .map(|commit| { - let commit: [N; DIGEST_SIZE] = (*commit).into(); - commit.map(|x| builder.eval(x)) - }) - .collect::>(); - - // Set the query proofs. - let query_proofs = fri_proof - .query_proofs - .iter() - .map(|query_proof| { - let commit_phase_openings = query_proof - .commit_phase_openings - .iter() - .map(|commit_phase_opening| { - let sibling_value = - builder.eval(SymbolicExt::from_f(commit_phase_opening.sibling_value)); - let opening_proof = commit_phase_opening - .opening_proof - .iter() - .map(|sibling| sibling.map(|x| builder.eval(x))) - .collect::>(); - FriCommitPhaseProofStepVariable { sibling_value, opening_proof } - }) - .collect::>(); - FriQueryProofVariable { commit_phase_openings } - }) - .collect::>(); - - // Initialize the FRI proof variable. - FriProofVariable { - commit_phase_commits, - query_proofs, - final_poly: builder.eval(SymbolicExt::from_f(fri_proof.final_poly)), - pow_witness: builder.eval(fri_proof.pow_witness), - } -} - -pub fn const_two_adic_pcs_proof( - builder: &mut Builder, - proof: TwoAdicFriPcsProof, -) -> TwoAdicPcsProofVariable { - let fri_proof = const_fri_proof(builder, proof.fri_proof); - let query_openings = proof - .query_openings - .iter() - .map(|query_opening| { - query_opening - .iter() - .map(|opening| BatchOpeningVariable { - opened_values: opening - .opened_values - .iter() - .map(|opened_value| { - opened_value - .iter() - .map(|value| vec![builder.eval::, _>(*value)]) - .collect::>() - }) - .collect::>(), - opening_proof: opening - .opening_proof - .iter() - .map(|opening_proof| opening_proof.map(|x| builder.eval(x))) - .collect::>(), - }) - .collect::>() - }) - .collect::>(); - TwoAdicPcsProofVariable { fri_proof, query_openings } -} -#[cfg(test)] -pub mod tests { - - use std::{borrow::Borrow, iter::once, sync::Arc}; - - use p3_baby_bear::{BabyBear, DiffusionMatrixBabyBear}; - use p3_challenger::{CanObserve, FieldChallenger}; - use p3_commit::{Pcs, TwoAdicMultiplicativeCoset}; - use p3_field::{extension::BinomialExtensionField, AbstractField}; - use p3_matrix::dense::RowMajorMatrix; - use rand::{rngs::StdRng, SeedableRng}; - use sp1_core_machine::utils::{log2_strict_usize, run_test_machine, setup_logger}; - use sp1_recursion_compiler::{ - config::OuterConfig, - constraints::ConstraintCompiler, - ir::{Builder, Config, Ext, SymbolicExt}, - }; - use sp1_recursion_core_v2::{ - air::RecursionPublicValues, - instruction as instr, - machine::RecursionAir, - stark::config::{ - outer_fri_config, outer_perm, BabyBearPoseidon2Outer, OuterChallenge, OuterChallenger, - OuterCompress, OuterDft, OuterHash, OuterPcs, OuterVal, OuterValMmcs, - }, - BaseAluOpcode, MemAccessKind, RecursionProgram, Runtime, - }; - use sp1_recursion_gnark_ffi::{Groth16Bn254Prover, PlonkBn254Prover}; - use sp1_stark::{BabyBearPoseidon2Inner, StarkMachine}; - - use crate::{ - challenger::CanObserveVariable, - fri::verify_two_adic_pcs, - hash::BN254_DIGEST_SIZE, - utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes}, - witness::{OuterWitness, Witnessable}, - Digest, TwoAdicPcsMatsVariable, TwoAdicPcsRoundVariable, - }; - - use super::{build_wrap_circuit_v2_with, const_two_adic_pcs_proof}; - - fn test_machine(machine_maker: F) - where - F: Fn() -> StarkMachine>, - { - setup_logger(); - let n = 10; - // Fibonacci(n) - let instructions = once(instr::mem(MemAccessKind::Write, 1, 0, 0)) - .chain(once(instr::mem(MemAccessKind::Write, 2, 1, 1))) - .chain((2..=n).map(|i| instr::base_alu(BaseAluOpcode::AddF, 2, i, i - 2, i - 1))) - .chain(once(instr::mem(MemAccessKind::Read, 1, n - 1, 34))) - .chain(once(instr::mem(MemAccessKind::Read, 2, n, 55))) - .collect::>(); - - let machine = machine_maker(); - let program = RecursionProgram { instructions, ..Default::default() }; - let mut runtime = - Runtime::, DiffusionMatrixBabyBear>::new( - Arc::new(program.clone()), - BabyBearPoseidon2Inner::new().perm, - ); - runtime.run().unwrap(); - - let (pk, vk) = machine.setup(&program); - let result = run_test_machine(vec![runtime.record], machine, pk, vk.clone()).unwrap(); - - let machine = machine_maker(); - let constraints = build_wrap_circuit_v2_with::( - &vk, - result.shard_proofs[0].clone(), - machine, - ); - - let pv: &RecursionPublicValues<_> = - result.shard_proofs[0].public_values.as_slice().borrow(); - let vkey_hash = babybears_to_bn254(&pv.sp1_vk_digest); - let committed_values_digest_bytes: [BabyBear; 32] = - words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); - let committed_values_digest = babybear_bytes_to_bn254(&committed_values_digest_bytes); - - // Build the witness. - let mut witness = OuterWitness::default(); - result.shard_proofs[0].write(&mut witness); - witness.write_commited_values_digest(committed_values_digest); - witness.write_vkey_hash(vkey_hash); - - PlonkBn254Prover::test::(constraints.clone(), witness.clone()); - Groth16Bn254Prover::test::(constraints, witness); - } - - pub fn machine_with_all_chips( - log_erbl_rows: usize, - log_p2_rows: usize, - log_frifold_rows: usize, - ) -> StarkMachine> { - let config = SC::new_with_log_blowup(log2_strict_usize(DEGREE - 1)); - RecursionAir::::machine_with_padding( - config, - log_frifold_rows, - log_p2_rows, - log_erbl_rows, - ) - } - - #[test] - fn test_build_wrap() { - let machine_maker = || machine_with_all_chips::<17>(3, 3, 3); - test_machine(machine_maker); - } - type C = OuterConfig; - type SC = BabyBearPoseidon2Outer; - - #[allow(clippy::type_complexity)] - pub fn const_two_adic_pcs_rounds( - builder: &mut Builder, - commit: [::N; BN254_DIGEST_SIZE], - os: Vec<(TwoAdicMultiplicativeCoset, Vec<(OuterChallenge, Vec)>)>, - ) -> (Digest, Vec>) { - let commit: Digest = commit.map(|x| builder.eval(x)); - - let mut domains_points_and_opens = Vec::new(); - for (domain, poly) in os.into_iter() { - let points: Vec> = - poly.iter().map(|(p, _)| builder.eval(SymbolicExt::from_f(*p))).collect::>(); - let values: Vec>> = poly - .iter() - .map(|(_, v)| { - v.clone() - .iter() - .map(|t| builder.eval(SymbolicExt::from_f(*t))) - .collect::>() - }) - .collect::>(); - let domain_points_and_values = TwoAdicPcsMatsVariable { domain, points, values }; - domains_points_and_opens.push(domain_points_and_values); - } - - (commit, vec![TwoAdicPcsRoundVariable { batch_commit: commit, domains_points_and_opens }]) - } - - #[test] - fn test_verify_two_adic_pcs_outer() { - let mut rng = StdRng::seed_from_u64(0xDEADBEEF); - let log_degrees = &[19, 19]; - let perm = outer_perm(); - let mut fri_config = outer_fri_config(); - - // Lower blowup factor for testing. - fri_config.log_blowup = 2; - let hash = OuterHash::new(perm.clone()).unwrap(); - let compress = OuterCompress::new(perm.clone()); - let val_mmcs = OuterValMmcs::new(hash, compress); - let dft = OuterDft {}; - let pcs: OuterPcs = - OuterPcs::new(log_degrees.iter().copied().max().unwrap(), dft, val_mmcs, fri_config); - - // Generate proof. - let domains_and_polys = log_degrees - .iter() - .map(|&d| { - ( - >::natural_domain_for_degree( - &pcs, - 1 << d, - ), - RowMajorMatrix::::rand(&mut rng, 1 << d, 100), - ) - }) - .collect::>(); - let (commit, data) = >::commit( - &pcs, - domains_and_polys.clone(), - ); - let mut challenger = OuterChallenger::new(perm.clone()).unwrap(); - challenger.observe(commit); - let zeta = challenger.sample_ext_element::(); - let points = domains_and_polys.iter().map(|_| vec![zeta]).collect::>(); - let (opening, proof) = pcs.open(vec![(&data, points)], &mut challenger); - - // Verify proof. - let mut challenger = OuterChallenger::new(perm.clone()).unwrap(); - challenger.observe(commit); - let x1 = challenger.sample_ext_element::(); - let os = domains_and_polys - .iter() - .zip(&opening[0]) - .map(|((domain, _), mat_openings)| (*domain, vec![(zeta, mat_openings[0].clone())])) - .collect::>(); - pcs.verify(vec![(commit, os.clone())], &proof, &mut challenger).unwrap(); - - // Define circuit. - let mut builder = Builder::::default(); - let mut config = outer_fri_config(); - - // Lower blowup factor for testing. - config.log_blowup = 2; - let proof = const_two_adic_pcs_proof(&mut builder, proof); - let (commit, rounds) = const_two_adic_pcs_rounds(&mut builder, commit.into(), os); - let mut challenger = crate::challenger::MultiField32ChallengerVariable::new(&mut builder); - challenger.observe_slice(&mut builder, commit); - let x2 = challenger.sample_ext(&mut builder); - let x1: Ext<_, _> = builder.constant(x1); - builder.assert_ext_eq(x1, x2); - verify_two_adic_pcs::<_, BabyBearPoseidon2Outer>( - &mut builder, - &config, - &proof, - &mut challenger, - rounds, - ); - let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); - let witness = OuterWitness::default(); - PlonkBn254Prover::test::(constraints, witness); - } -} diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 5f5675425d..6ef75b1c35 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -21,7 +21,6 @@ use sp1_recursion_compiler::{ mod types; -pub mod build_wrap_v2; pub mod challenger; pub mod constraints; pub mod domain; diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index d6c26d59f3..8feb69d78d 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -140,7 +140,7 @@ pub(crate) mod tests { // Run with the poseidon2 wide chip. let proof_wide_span = tracing::debug_span!("Run test with wide machine").entered(); - let wide_machine = RecursionAir::<_, 3, 0>::machine_wide(SC::default()); + let wide_machine = RecursionAir::<_, 3, 0>::compress_machine(SC::default()); let (pk, vk) = wide_machine.setup(&program); let result = run_test_machine_with_prover::<_, _, P>(records.clone(), wide_machine, pk, vk); proof_wide_span.exit(); diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index ee930b0a87..07e7c7caf4 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -812,7 +812,8 @@ mod tests { let record = run(program.clone()); // Run with the poseidon2 wide chip. - let wide_machine = RecursionAir::<_, 3, 0>::machine_wide(BabyBearPoseidon2::default()); + let wide_machine = + RecursionAir::<_, 3, 0>::machine_wide_with_all_chips(BabyBearPoseidon2::default()); let (pk, vk) = wide_machine.setup(&program); let result = run_test_machine(vec![record.clone()], wide_machine, pk, vk); if let Err(e) = result { @@ -820,7 +821,8 @@ mod tests { } // Run with the poseidon2 skinny chip. - let skinny_machine = RecursionAir::<_, 9, 0>::machine(BabyBearPoseidon2::compressed()); + let skinny_machine = + RecursionAir::<_, 9, 0>::machine_skinny_with_all_chips(BabyBearPoseidon2::compressed()); let (pk, vk) = skinny_machine.setup(&program); let result = run_test_machine(vec![record.clone()], skinny_machine, pk, vk); if let Err(e) = result { diff --git a/crates/recursion/compiler/src/circuit/mod.rs b/crates/recursion/compiler/src/circuit/mod.rs index 1fbe681c70..f9f3e26e3e 100644 --- a/crates/recursion/compiler/src/circuit/mod.rs +++ b/crates/recursion/compiler/src/circuit/mod.rs @@ -163,7 +163,7 @@ mod tests { .into(); runtime.run().unwrap(); - let machine = A::machine_wide(SC::new()); + let machine = A::compress_machine(SC::new()); let (pk, vk) = machine.setup(&program); let result = diff --git a/crates/recursion/core-v2/src/chips/mem/constant.rs b/crates/recursion/core-v2/src/chips/mem/constant.rs index bb210e7ed5..4ee1759d13 100644 --- a/crates/recursion/core-v2/src/chips/mem/constant.rs +++ b/crates/recursion/core-v2/src/chips/mem/constant.rs @@ -169,7 +169,7 @@ mod tests { runtime.run().unwrap(); let config = SC::new(); - let machine = A::machine_wide(config); + let machine = A::compress_machine(config); let (pk, vk) = machine.setup(&program); let result = run_test_machine(vec![runtime.record], machine, pk, vk); if let Err(e) = result { diff --git a/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs b/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs index 332075143f..b93e17e484 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs @@ -141,7 +141,7 @@ pub(crate) mod tests { runtime.run().unwrap(); let config = SC::new(); - let machine_deg_9 = B::machine(config); + let machine_deg_9 = B::wrap_machine(config); let (pk_9, vk_9) = machine_deg_9.setup(&program); let result_deg_9 = run_test_machine(vec![runtime.record], machine_deg_9, pk_9, vk_9); if let Err(e) = result_deg_9 { diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs index bf976e1e4d..edb89587d8 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs @@ -172,7 +172,7 @@ pub(crate) mod tests { runtime.run().unwrap(); let config = SC::new(); - let machine_deg_3 = A::machine_wide(config); + let machine_deg_3 = A::compress_machine(config); let (pk_3, vk_3) = machine_deg_3.setup(&program); let result_deg_3 = run_test_machine(vec![runtime.record.clone()], machine_deg_3, pk_3, vk_3); @@ -181,7 +181,7 @@ pub(crate) mod tests { } let config = SC::new(); - let machine_deg_9 = B::machine_wide(config); + let machine_deg_9 = B::compress_machine(config); let (pk_9, vk_9) = machine_deg_9.setup(&program); let result_deg_9 = run_test_machine(vec![runtime.record], machine_deg_9, pk_9, vk_9); if let Err(e) = result_deg_9 { diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index e93d6dc27f..2a88d93317 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -40,72 +40,49 @@ pub enum RecursionAir< impl, const DEGREE: usize, const COL_PADDING: usize> RecursionAir { - /// A recursion machine that can have dynamic trace sizes. - pub fn machine>(config: SC) -> StarkMachine { - let chips = Self::get_all().into_iter().map(Chip::new).collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - } - - /// A recursion machine that can have dynamic trace sizes, and uses the wide variant of - /// Poseidon2. - pub fn machine_wide>(config: SC) -> StarkMachine { - let chips = Self::get_all_wide().into_iter().map(Chip::new).collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - } - - pub fn machine_with_padding>( + /// Get a machine with all chips, except the dummy chip. + pub fn machine_wide_with_all_chips>( config: SC, - fri_fold_padding: usize, - poseidon2_padding: usize, - erbl_padding: usize, ) -> StarkMachine { - let chips = Self::get_all_with_padding(fri_fold_padding, poseidon2_padding, erbl_padding) - .into_iter() - .map(Chip::new) - .collect::>(); + let chips = [ + RecursionAir::MemoryConst(MemoryConstChip::default()), + RecursionAir::MemoryVar(MemoryVarChip::default()), + RecursionAir::BaseAlu(BaseAluChip::default()), + RecursionAir::ExtAlu(ExtAluChip::default()), + RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), + RecursionAir::FriFold(FriFoldChip::::default()), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), + RecursionAir::PublicValues(PublicValuesChip::default()), + ] + .map(Chip::new) + .into_iter() + .collect::>(); StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) } - pub fn dummy_machine>( + /// Get a machine with all chips, except the dummy chip. + pub fn machine_skinny_with_all_chips>( config: SC, - log_height: usize, ) -> StarkMachine { - let chips = vec![RecursionAir::DummyWide(DummyChip::new(log_height))]; - StarkMachine::new(config, chips.into_iter().map(Chip::new).collect(), PROOF_MAX_NUM_PVS) - } - // /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. - // pub fn wrap_machine>(config: SC) -> StarkMachine { - // let chips = Self::get_wrap_all() - // .into_iter() - // .map(Chip::new) - // .collect::>(); - // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - // } - - // /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. - // pub fn wrap_machine_dyn>(config: SC) -> StarkMachine { let chips = Self::get_wrap_dyn_all() - // .into_iter() - // .map(Chip::new) - // .collect::>(); - // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - // } - - pub fn get_all() -> Vec { - vec![ + let chips = [ RecursionAir::MemoryConst(MemoryConstChip::default()), RecursionAir::MemoryVar(MemoryVarChip::default()), RecursionAir::BaseAlu(BaseAluChip::default()), RecursionAir::ExtAlu(ExtAluChip::default()), RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), + RecursionAir::FriFold(FriFoldChip::::default()), RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), RecursionAir::PublicValues(PublicValuesChip::default()), ] + .map(Chip::new) + .into_iter() + .collect::>(); + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) } - pub fn get_all_wide() -> Vec { - vec![ - // RecursionAir::Program(ProgramChip::default()), + /// A machine with dyunamic chip sizes that includes the wide variant of the Poseidon2 chip. + pub fn compress_machine>(config: SC) -> StarkMachine { + let chips = [ RecursionAir::MemoryConst(MemoryConstChip::default()), RecursionAir::MemoryVar(MemoryVarChip::default()), RecursionAir::BaseAlu(BaseAluChip::default()), @@ -114,79 +91,195 @@ impl, const DEGREE: usize, const COL_P RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), RecursionAir::PublicValues(PublicValuesChip::default()), ] + .map(Chip::new) + .into_iter() + .collect::>(); + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + } + + /// A machine with fixed chip sizes to standartize the verification key. + pub fn shrink_machine>(config: SC) -> StarkMachine { + let chips = [ + RecursionAir::MemoryConst(MemoryConstChip::default()), + RecursionAir::MemoryVar(MemoryVarChip::default()), + RecursionAir::BaseAlu(BaseAluChip::default()), + RecursionAir::ExtAlu(ExtAluChip::default()), + RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), + RecursionAir::PublicValues(PublicValuesChip::default()), + ] + .map(Chip::new) + .into_iter() + .collect::>(); + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) } - pub fn get_all_with_padding( - _fri_fold_padding: usize, - poseidon2_padding: usize, - erbl_padding: usize, - ) -> Vec { - vec![ - // RecursionAir::Program(ProgramChip::default()), + /// A machine with dynamic chip sizes that includes the skinny variant of the Poseidon2 chip. + /// + /// This machine assumes that the `shrink` stage has a fixed shape, so there is no need to + /// fix the trace sizes. + pub fn wrap_machine>(config: SC) -> StarkMachine { + let chips = [ RecursionAir::MemoryConst(MemoryConstChip::default()), RecursionAir::MemoryVar(MemoryVarChip::default()), RecursionAir::BaseAlu(BaseAluChip::default()), RecursionAir::ExtAlu(ExtAluChip::default()), - // RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), - RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip:: { - fixed_log2_rows: Some(poseidon2_padding), - pad: true, - }), - RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { - fixed_log2_rows: Some(erbl_padding), - pad: true, - }), - // RecursionAir::FriFold(FriFoldChip:: { - // fixed_log2_rows: Some(fri_fold_padding), - // pad: true, - // }), + RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), RecursionAir::PublicValues(PublicValuesChip::default()), ] + .map(Chip::new) + .into_iter() + .collect::>(); + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) } - // pub fn get_wrap_dyn_all() -> Vec { - // once(RecursionAir::Program(ProgramChip)) - // .chain(once(RecursionAir::Cpu(CpuChip { - // fixed_log2_rows: None, - // _phantom: PhantomData, - // }))) - // .chain(once(RecursionAir::MemoryGlobal(MemoryGlobalChip { - // fixed_log2_rows: None, - // }))) - // .chain(once(RecursionAir::Multi(MultiChip { - // fixed_log2_rows: None, - // }))) - // .chain(once(RecursionAir::RangeCheck(RangeCheckChip::default()))) - // .chain(once(RecursionAir::ExpReverseBitsLen( - // ExpReverseBitsLenChip:: { - // fixed_log2_rows: None, - // pad: true, - // }, - // ))) - // .collect() + // /// A recursion machine that can have dynamic trace sizes. + // pub fn machine>(config: SC) -> StarkMachine { + // let chips = Self::get_all().into_iter().map(Chip::new).collect::>(); + // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + // } + + // /// A recursion machine that can have dynamic trace sizes, and uses the wide variant of + // /// Poseidon2. + // pub fn machine_wide>(config: SC) -> StarkMachine { + // let chips = Self::get_all_wide().into_iter().map(Chip::new).collect::>(); + // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) // } - // pub fn get_wrap_all() -> Vec { - // once(RecursionAir::Program(ProgramChip)) - // .chain(once(RecursionAir::Cpu(CpuChip { - // fixed_log2_rows: Some(19), - // _phantom: PhantomData, - // }))) - // .chain(once(RecursionAir::MemoryGlobal(MemoryGlobalChip { - // fixed_log2_rows: Some(20), - // }))) - // .chain(once(RecursionAir::Multi(MultiChip { - // fixed_log2_rows: Some(17), - // }))) - // .chain(once(RecursionAir::RangeCheck(RangeCheckChip::default()))) - // .chain(once(RecursionAir::ExpReverseBitsLen( - // ExpReverseBitsLenChip:: { - // fixed_log2_rows: None, - // pad: true, - // }, - // ))) - // .collect() + // pub fn machine_with_padding>( + // config: SC, + // fri_fold_padding: usize, + // poseidon2_padding: usize, + // erbl_padding: usize, + // ) -> StarkMachine { + // let chips = Self::get_all_with_padding(fri_fold_padding, poseidon2_padding, erbl_padding) + // .into_iter() + // .map(Chip::new) + // .collect::>(); + // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) // } + + // pub fn dummy_machine>( + // config: SC, + // log_height: usize, + // ) -> StarkMachine { + // let chips = vec![RecursionAir::DummyWide(DummyChip::new(log_height))]; + // StarkMachine::new(config, chips.into_iter().map(Chip::new).collect(), PROOF_MAX_NUM_PVS) + // } + // // /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. + // // pub fn wrap_machine>(config: SC) -> StarkMachine { + // // let chips = Self::get_wrap_all() + // // .into_iter() + // // .map(Chip::new) + // // .collect::>(); + // // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + // // } + + // // /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. + // // pub fn wrap_machine_dyn>(config: SC) -> StarkMachine { let chips = Self::get_wrap_dyn_all() + // // .into_iter() + // // .map(Chip::new) + // // .collect::>(); + // // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + // // } + + // pub fn get_all() -> Vec { + // vec![ + // RecursionAir::MemoryConst(MemoryConstChip::default()), + // RecursionAir::MemoryVar(MemoryVarChip::default()), + // RecursionAir::BaseAlu(BaseAluChip::default()), + // RecursionAir::ExtAlu(ExtAluChip::default()), + // RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), + // RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), + // RecursionAir::PublicValues(PublicValuesChip::default()), + // ] + // } + + // pub fn get_all_wide() -> Vec { + // vec![ + // // RecursionAir::Program(ProgramChip::default()), + // RecursionAir::MemoryConst(MemoryConstChip::default()), + // RecursionAir::MemoryVar(MemoryVarChip::default()), + // RecursionAir::BaseAlu(BaseAluChip::default()), + // RecursionAir::ExtAlu(ExtAluChip::default()), + // RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), + // RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), + // RecursionAir::PublicValues(PublicValuesChip::default()), + // ] + // } + + // pub fn get_all_with_padding( + // _fri_fold_padding: usize, + // poseidon2_padding: usize, + // erbl_padding: usize, + // ) -> Vec { + // vec![ + // RecursionAir::MemoryConst(MemoryConstChip::default()), + // RecursionAir::MemoryVar(MemoryVarChip::default()), + // RecursionAir::BaseAlu(BaseAluChip::default()), + // RecursionAir::ExtAlu(ExtAluChip::default()), + // // RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), + // RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip:: { + // fixed_log2_rows: Some(poseidon2_padding), + // pad: true, + // }), + // RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { + // fixed_log2_rows: Some(erbl_padding), + // pad: true, + // }), + // // RecursionAir::FriFold(FriFoldChip:: { + // // fixed_log2_rows: Some(fri_fold_padding), + // // pad: true, + // // }), + // RecursionAir::PublicValues(PublicValuesChip::default()), + // ] + // } + + // // pub fn get_wrap_dyn_all() -> Vec { + // // once(RecursionAir::Program(ProgramChip)) + // // .chain(once(RecursionAir::Cpu(CpuChip { + // // fixed_log2_rows: None, + // // _phantom: PhantomData, + // // }))) + // // .chain(once(RecursionAir::MemoryGlobal(MemoryGlobalChip { + // // fixed_log2_rows: None, + // // }))) + // // .chain(once(RecursionAir::Multi(MultiChip { + // // fixed_log2_rows: None, + // // }))) + // // .chain(once(RecursionAir::RangeCheck(RangeCheckChip::default()))) + // // .chain(once(RecursionAir::ExpReverseBitsLen( + // // ExpReverseBitsLenChip:: { + // // fixed_log2_rows: None, + // // pad: true, + // // }, + // // ))) + // // .collect() + // // } + + // // pub fn get_wrap_all() -> Vec { + // // once(RecursionAir::Program(ProgramChip)) + // // .chain(once(RecursionAir::Cpu(CpuChip { + // // fixed_log2_rows: Some(19), + // // _phantom: PhantomData, + // // }))) + // // .chain(once(RecursionAir::MemoryGlobal(MemoryGlobalChip { + // // fixed_log2_rows: Some(20), + // // }))) + // // .chain(once(RecursionAir::Multi(MultiChip { + // // fixed_log2_rows: Some(17), + // // }))) + // // .chain(once(RecursionAir::RangeCheck(RangeCheckChip::default()))) + // // .chain(once(RecursionAir::ExpReverseBitsLen( + // // ExpReverseBitsLenChip:: { + // // fixed_log2_rows: None, + // // pad: true, + // // }, + // // ))) + // // .collect() + // // } } #[cfg(test)] @@ -221,15 +314,15 @@ pub mod tests { runtime.run().unwrap(); // Run with the poseidon2 wide chip. - let wide_machine = A::machine_wide(BabyBearPoseidon2::default()); - let (pk, vk) = wide_machine.setup(&program); - let result = run_test_machine(vec![runtime.record.clone()], wide_machine, pk, vk); + let machine = A::machine_wide_with_all_chips(BabyBearPoseidon2::default()); + let (pk, vk) = machine.setup(&program); + let result = run_test_machine(vec![runtime.record.clone()], machine, pk, vk); if let Err(e) = result { panic!("Verification failed: {:?}", e); } // Run with the poseidon2 skinny chip. - let skinny_machine = B::machine(BabyBearPoseidon2::compressed()); + let skinny_machine = B::machine_skinny_with_all_chips(BabyBearPoseidon2::compressed()); let (pk, vk) = skinny_machine.setup(&program); let result = run_test_machine(vec![runtime.record], skinny_machine, pk, vk); if let Err(e) = result { From 737d75949cfe1c4002d4b44772c579b74be98d52 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Sat, 24 Aug 2024 09:19:54 -0700 Subject: [PATCH 073/268] cleanup --- crates/recursion/core-v2/src/machine.rs | 147 ------------------------ 1 file changed, 147 deletions(-) diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index 2a88d93317..7847c2c282 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -133,153 +133,6 @@ impl, const DEGREE: usize, const COL_P .collect::>(); StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) } - - // /// A recursion machine that can have dynamic trace sizes. - // pub fn machine>(config: SC) -> StarkMachine { - // let chips = Self::get_all().into_iter().map(Chip::new).collect::>(); - // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - // } - - // /// A recursion machine that can have dynamic trace sizes, and uses the wide variant of - // /// Poseidon2. - // pub fn machine_wide>(config: SC) -> StarkMachine { - // let chips = Self::get_all_wide().into_iter().map(Chip::new).collect::>(); - // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - // } - - // pub fn machine_with_padding>( - // config: SC, - // fri_fold_padding: usize, - // poseidon2_padding: usize, - // erbl_padding: usize, - // ) -> StarkMachine { - // let chips = Self::get_all_with_padding(fri_fold_padding, poseidon2_padding, erbl_padding) - // .into_iter() - // .map(Chip::new) - // .collect::>(); - // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - // } - - // pub fn dummy_machine>( - // config: SC, - // log_height: usize, - // ) -> StarkMachine { - // let chips = vec![RecursionAir::DummyWide(DummyChip::new(log_height))]; - // StarkMachine::new(config, chips.into_iter().map(Chip::new).collect(), PROOF_MAX_NUM_PVS) - // } - // // /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. - // // pub fn wrap_machine>(config: SC) -> StarkMachine { - // // let chips = Self::get_wrap_all() - // // .into_iter() - // // .map(Chip::new) - // // .collect::>(); - // // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - // // } - - // // /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. - // // pub fn wrap_machine_dyn>(config: SC) -> StarkMachine { let chips = Self::get_wrap_dyn_all() - // // .into_iter() - // // .map(Chip::new) - // // .collect::>(); - // // StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) - // // } - - // pub fn get_all() -> Vec { - // vec![ - // RecursionAir::MemoryConst(MemoryConstChip::default()), - // RecursionAir::MemoryVar(MemoryVarChip::default()), - // RecursionAir::BaseAlu(BaseAluChip::default()), - // RecursionAir::ExtAlu(ExtAluChip::default()), - // RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), - // RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - // RecursionAir::PublicValues(PublicValuesChip::default()), - // ] - // } - - // pub fn get_all_wide() -> Vec { - // vec![ - // // RecursionAir::Program(ProgramChip::default()), - // RecursionAir::MemoryConst(MemoryConstChip::default()), - // RecursionAir::MemoryVar(MemoryVarChip::default()), - // RecursionAir::BaseAlu(BaseAluChip::default()), - // RecursionAir::ExtAlu(ExtAluChip::default()), - // RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), - // RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - // RecursionAir::PublicValues(PublicValuesChip::default()), - // ] - // } - - // pub fn get_all_with_padding( - // _fri_fold_padding: usize, - // poseidon2_padding: usize, - // erbl_padding: usize, - // ) -> Vec { - // vec![ - // RecursionAir::MemoryConst(MemoryConstChip::default()), - // RecursionAir::MemoryVar(MemoryVarChip::default()), - // RecursionAir::BaseAlu(BaseAluChip::default()), - // RecursionAir::ExtAlu(ExtAluChip::default()), - // // RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), - // RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip:: { - // fixed_log2_rows: Some(poseidon2_padding), - // pad: true, - // }), - // RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { - // fixed_log2_rows: Some(erbl_padding), - // pad: true, - // }), - // // RecursionAir::FriFold(FriFoldChip:: { - // // fixed_log2_rows: Some(fri_fold_padding), - // // pad: true, - // // }), - // RecursionAir::PublicValues(PublicValuesChip::default()), - // ] - // } - - // // pub fn get_wrap_dyn_all() -> Vec { - // // once(RecursionAir::Program(ProgramChip)) - // // .chain(once(RecursionAir::Cpu(CpuChip { - // // fixed_log2_rows: None, - // // _phantom: PhantomData, - // // }))) - // // .chain(once(RecursionAir::MemoryGlobal(MemoryGlobalChip { - // // fixed_log2_rows: None, - // // }))) - // // .chain(once(RecursionAir::Multi(MultiChip { - // // fixed_log2_rows: None, - // // }))) - // // .chain(once(RecursionAir::RangeCheck(RangeCheckChip::default()))) - // // .chain(once(RecursionAir::ExpReverseBitsLen( - // // ExpReverseBitsLenChip:: { - // // fixed_log2_rows: None, - // // pad: true, - // // }, - // // ))) - // // .collect() - // // } - - // // pub fn get_wrap_all() -> Vec { - // // once(RecursionAir::Program(ProgramChip)) - // // .chain(once(RecursionAir::Cpu(CpuChip { - // // fixed_log2_rows: Some(19), - // // _phantom: PhantomData, - // // }))) - // // .chain(once(RecursionAir::MemoryGlobal(MemoryGlobalChip { - // // fixed_log2_rows: Some(20), - // // }))) - // // .chain(once(RecursionAir::Multi(MultiChip { - // // fixed_log2_rows: Some(17), - // // }))) - // // .chain(once(RecursionAir::RangeCheck(RangeCheckChip::default()))) - // // .chain(once(RecursionAir::ExpReverseBitsLen( - // // ExpReverseBitsLenChip:: { - // // fixed_log2_rows: None, - // // pad: true, - // // }, - // // ))) - // // .collect() - // // } } #[cfg(test)] From 221a77785d87b2ade63d264d4c3ff2dff0a53983 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Sat, 24 Aug 2024 18:50:25 -0700 Subject: [PATCH 074/268] fix traces --- crates/recursion/core-v2/src/chips/alu_base.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/recursion/core-v2/src/chips/alu_base.rs b/crates/recursion/core-v2/src/chips/alu_base.rs index 3c7b76e917..87952a2341 100644 --- a/crates/recursion/core-v2/src/chips/alu_base.rs +++ b/crates/recursion/core-v2/src/chips/alu_base.rs @@ -13,7 +13,9 @@ use crate::{builder::SP1RecursionAirBuilder, *}; pub const NUM_BASE_ALU_ENTRIES_PER_ROW: usize = 4; #[derive(Default)] -pub struct BaseAluChip {} +pub struct BaseAluChip { + pub fixed_log2_rows: Option, +} pub const NUM_BASE_ALU_COLS: usize = core::mem::size_of::>(); From 7f45eb13a9e9d9bd20d6243eb6cbc270af085c0a Mon Sep 17 00:00:00 2001 From: John Guibas Date: Sun, 25 Aug 2024 17:22:47 -0700 Subject: [PATCH 075/268] optimizations --- crates/core/executor/src/record.rs | 36 +++++++++---------- crates/prover/src/lib.rs | 4 +-- .../recursion/core-v2/src/chips/alu_base.rs | 2 +- .../core-v2/src/chips/mem/constant.rs | 2 +- .../core-v2/src/chips/mem/variable.rs | 2 +- .../core-v2/src/chips/public_values.rs | 5 +-- 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/crates/core/executor/src/record.rs b/crates/core/executor/src/record.rs index e3133a4698..fe2fab16de 100644 --- a/crates/core/executor/src/record.rs +++ b/crates/core/executor/src/record.rs @@ -148,26 +148,26 @@ impl ExecutionRecord { #[must_use] pub fn defer(&mut self) -> ExecutionRecord { ExecutionRecord { - // keccak_permute_events: std::mem::take(&mut self.keccak_permute_events), + keccak_permute_events: std::mem::take(&mut self.keccak_permute_events), secp256k1_add_events: std::mem::take(&mut self.secp256k1_add_events), secp256k1_double_events: std::mem::take(&mut self.secp256k1_double_events), - // bn254_fp_events: std::mem::take(&mut self.bn254_fp_events), - // bn254_fp2_addsub_events: std::mem::take(&mut self.bn254_fp2_addsub_events), - // bn254_fp2_mul_events: std::mem::take(&mut self.bn254_fp2_mul_events), - // bn254_add_events: std::mem::take(&mut self.bn254_add_events), - // bn254_double_events: std::mem::take(&mut self.bn254_double_events), - // bls12381_add_events: std::mem::take(&mut self.bls12381_add_events), - // bls12381_double_events: std::mem::take(&mut self.bls12381_double_events), - // sha_extend_events: std::mem::take(&mut self.sha_extend_events), - // sha_compress_events: std::mem::take(&mut self.sha_compress_events), - // ed_add_events: std::mem::take(&mut self.ed_add_events), - // ed_decompress_events: std::mem::take(&mut self.ed_decompress_events), - // k256_decompress_events: std::mem::take(&mut self.k256_decompress_events), - // uint256_mul_events: std::mem::take(&mut self.uint256_mul_events), - // bls12381_fp_events: std::mem::take(&mut self.bls12381_fp_events), - // bls12381_fp2_addsub_events: std::mem::take(&mut self.bls12381_fp2_addsub_events), - // bls12381_fp2_mul_events: std::mem::take(&mut self.bls12381_fp2_mul_events), - // bls12381_decompress_events: std::mem::take(&mut self.bls12381_decompress_events), + bn254_fp_events: std::mem::take(&mut self.bn254_fp_events), + bn254_fp2_addsub_events: std::mem::take(&mut self.bn254_fp2_addsub_events), + bn254_fp2_mul_events: std::mem::take(&mut self.bn254_fp2_mul_events), + bn254_add_events: std::mem::take(&mut self.bn254_add_events), + bn254_double_events: std::mem::take(&mut self.bn254_double_events), + bls12381_add_events: std::mem::take(&mut self.bls12381_add_events), + bls12381_double_events: std::mem::take(&mut self.bls12381_double_events), + sha_extend_events: std::mem::take(&mut self.sha_extend_events), + sha_compress_events: std::mem::take(&mut self.sha_compress_events), + ed_add_events: std::mem::take(&mut self.ed_add_events), + ed_decompress_events: std::mem::take(&mut self.ed_decompress_events), + k256_decompress_events: std::mem::take(&mut self.k256_decompress_events), + uint256_mul_events: std::mem::take(&mut self.uint256_mul_events), + bls12381_fp_events: std::mem::take(&mut self.bls12381_fp_events), + bls12381_fp2_addsub_events: std::mem::take(&mut self.bls12381_fp2_addsub_events), + bls12381_fp2_mul_events: std::mem::take(&mut self.bls12381_fp2_mul_events), + bls12381_decompress_events: std::mem::take(&mut self.bls12381_decompress_events), memory_initialize_events: std::mem::take(&mut self.memory_initialize_events), memory_finalize_events: std::mem::take(&mut self.memory_finalize_events), ..Default::default() diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 222f4be568..5de2ec18ff 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -996,7 +996,7 @@ pub mod tests { use super::*; use anyhow::Result; - use build::{try_build_groth16_bn254_artifacts_dev, try_build_plonk_bn254_artifacts_dev}; + use build::try_build_groth16_bn254_artifacts_dev; use p3_field::PrimeField32; use sp1_recursion_core_v2::air::RecursionPublicValues; @@ -1017,6 +1017,7 @@ pub mod tests { pub fn test_e2e_prover( elf: &[u8], + stdin: SP1Stdin, opts: SP1ProverOpts, test_kind: Test, ) -> Result<()> { @@ -1028,7 +1029,6 @@ pub mod tests { let (pk, vk) = prover.setup(elf); tracing::info!("prove core"); - let stdin = SP1Stdin::new(); let core_proof = prover.prove_core(&pk, &stdin, opts, context)?; let public_values = core_proof.public_values.clone(); diff --git a/crates/recursion/core-v2/src/chips/alu_base.rs b/crates/recursion/core-v2/src/chips/alu_base.rs index 5d96efbf46..eacb8d5414 100644 --- a/crates/recursion/core-v2/src/chips/alu_base.rs +++ b/crates/recursion/core-v2/src/chips/alu_base.rs @@ -10,7 +10,7 @@ use std::{borrow::BorrowMut, iter::zip}; use crate::{builder::SP1RecursionAirBuilder, *}; -pub const NUM_BASE_ALU_ENTRIES_PER_ROW: usize = 8; +pub const NUM_BASE_ALU_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct BaseAluChip {} diff --git a/crates/recursion/core-v2/src/chips/mem/constant.rs b/crates/recursion/core-v2/src/chips/mem/constant.rs index 1b3654a1e0..5565c967b3 100644 --- a/crates/recursion/core-v2/src/chips/mem/constant.rs +++ b/crates/recursion/core-v2/src/chips/mem/constant.rs @@ -12,7 +12,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; use super::MemoryAccessCols; -pub const NUM_MEM_ENTRIES_PER_ROW: usize = 16; +pub const NUM_MEM_ENTRIES_PER_ROW: usize = 4; #[derive(Default)] pub struct MemoryChip { diff --git a/crates/recursion/core-v2/src/chips/mem/variable.rs b/crates/recursion/core-v2/src/chips/mem/variable.rs index 090f244277..065a3a4d72 100644 --- a/crates/recursion/core-v2/src/chips/mem/variable.rs +++ b/crates/recursion/core-v2/src/chips/mem/variable.rs @@ -13,7 +13,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; use super::MemoryAccessCols; -pub const NUM_MEM_ENTRIES_PER_ROW: usize = 16; +pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { diff --git a/crates/recursion/core-v2/src/chips/public_values.rs b/crates/recursion/core-v2/src/chips/public_values.rs index b461cee328..fb003f1532 100644 --- a/crates/recursion/core-v2/src/chips/public_values.rs +++ b/crates/recursion/core-v2/src/chips/public_values.rs @@ -94,7 +94,8 @@ impl MachineAir for PublicValuesChip { } // Pad the preprocessed rows to 8 rows. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_PUBLIC_VALUES_PREPROCESSED_COLS], Some(3)); + // gpu code breaks for small traces + pad_rows_fixed(&mut rows, || [F::zero(); NUM_PUBLIC_VALUES_PREPROCESSED_COLS], Some(4)); let trace = RowMajorMatrix::new( rows.into_iter().flatten().collect(), @@ -127,7 +128,7 @@ impl MachineAir for PublicValuesChip { } // Pad the trace to 8 rows. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_PUBLIC_VALUES_COLS], Some(3)); + pad_rows_fixed(&mut rows, || [F::zero(); NUM_PUBLIC_VALUES_COLS], Some(4)); // Convert the trace to a row major matrix. RowMajorMatrix::new(rows.into_iter().flatten().collect(), NUM_PUBLIC_VALUES_COLS) From f971d900d86ac506ad20d6e01df59d264a03efed Mon Sep 17 00:00:00 2001 From: John Guibas Date: Sun, 25 Aug 2024 17:35:05 -0700 Subject: [PATCH 076/268] feat: standardized shrink shape --- .../recursion/core-v2/src/chips/alu_base.rs | 12 +++++-- crates/recursion/core-v2/src/chips/alu_ext.rs | 16 ++++++++-- .../core-v2/src/chips/exp_reverse_bits.rs | 27 +++++++--------- .../core-v2/src/chips/mem/constant.rs | 32 ++++++++++--------- .../core-v2/src/chips/mem/variable.rs | 24 +++++++------- .../core-v2/src/chips/poseidon2_skinny/mod.rs | 3 +- .../src/chips/poseidon2_skinny/trace.rs | 25 +++++++-------- crates/recursion/core-v2/src/machine.rs | 24 ++++++++++---- 8 files changed, 94 insertions(+), 69 deletions(-) diff --git a/crates/recursion/core-v2/src/chips/alu_base.rs b/crates/recursion/core-v2/src/chips/alu_base.rs index c28efb2ad4..64bd5cb31a 100644 --- a/crates/recursion/core-v2/src/chips/alu_base.rs +++ b/crates/recursion/core-v2/src/chips/alu_base.rs @@ -86,8 +86,12 @@ impl MachineAir for BaseAluChip { .collect::>(); let nb_rows = instrs.len().div_ceil(NUM_BASE_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = next_power_of_two(nb_rows, None); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(nb_rows, None), + }; let mut values = vec![F::zero(); padded_nb_rows * NUM_BASE_ALU_PREPROCESSED_COLS]; + // Generate the trace rows & corresponding records for each chunk of events in parallel. let populate_len = instrs.len() * NUM_BASE_ALU_ACCESS_COLS; values[..populate_len].par_chunks_mut(NUM_BASE_ALU_ACCESS_COLS).zip_eq(instrs).for_each( @@ -123,8 +127,12 @@ impl MachineAir for BaseAluChip { fn generate_trace(&self, input: &Self::Record, _: &mut Self::Record) -> RowMajorMatrix { let events = &input.base_alu_events; let nb_rows = events.len().div_ceil(NUM_BASE_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = next_power_of_two(nb_rows, None); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(nb_rows, None), + }; let mut values = vec![F::zero(); padded_nb_rows * NUM_BASE_ALU_COLS]; + // Generate the trace rows & corresponding records for each chunk of events in parallel. let populate_len = events.len() * NUM_BASE_ALU_VALUE_COLS; values[..populate_len].par_chunks_mut(NUM_BASE_ALU_VALUE_COLS).zip_eq(events).for_each( diff --git a/crates/recursion/core-v2/src/chips/alu_ext.rs b/crates/recursion/core-v2/src/chips/alu_ext.rs index 39a92c7f8a..813d8e6786 100644 --- a/crates/recursion/core-v2/src/chips/alu_ext.rs +++ b/crates/recursion/core-v2/src/chips/alu_ext.rs @@ -13,7 +13,9 @@ use crate::{builder::SP1RecursionAirBuilder, *}; pub const NUM_EXT_ALU_ENTRIES_PER_ROW: usize = 4; #[derive(Default)] -pub struct ExtAluChip {} +pub struct ExtAluChip { + pub fixed_log2_rows: Option, +} pub const NUM_EXT_ALU_COLS: usize = core::mem::size_of::>(); @@ -82,8 +84,12 @@ impl> MachineAir for ExtAluChip { .collect::>(); let nb_rows = instrs.len().div_ceil(NUM_EXT_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = next_power_of_two(nb_rows, None); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(nb_rows, None), + }; let mut values = vec![F::zero(); padded_nb_rows * NUM_EXT_ALU_PREPROCESSED_COLS]; + // Generate the trace rows & corresponding records for each chunk of events in parallel. let populate_len = instrs.len() * NUM_EXT_ALU_ACCESS_COLS; values[..populate_len].par_chunks_mut(NUM_EXT_ALU_ACCESS_COLS).zip_eq(instrs).for_each( @@ -119,8 +125,12 @@ impl> MachineAir for ExtAluChip { fn generate_trace(&self, input: &Self::Record, _: &mut Self::Record) -> RowMajorMatrix { let events = &input.ext_alu_events; let nb_rows = events.len().div_ceil(NUM_EXT_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = next_power_of_two(nb_rows, None); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(nb_rows, None), + }; let mut values = vec![F::zero(); padded_nb_rows * NUM_EXT_ALU_COLS]; + // Generate the trace rows & corresponding records for each chunk of events in parallel. let populate_len = events.len() * NUM_EXT_ALU_VALUE_COLS; values[..populate_len].par_chunks_mut(NUM_EXT_ALU_VALUE_COLS).zip_eq(events).for_each( diff --git a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs index 0cbfeaa982..db4206cea6 100644 --- a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs +++ b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs @@ -24,11 +24,10 @@ pub const NUM_EXP_REVERSE_BITS_LEN_PREPROCESSED_COLS: usize = pub struct ExpReverseBitsLenChip { pub fixed_log2_rows: Option, - pub pad: bool, } impl Default for ExpReverseBitsLenChip { fn default() -> Self { - Self { fixed_log2_rows: None, pad: true } + Self { fixed_log2_rows: None } } } @@ -126,13 +125,11 @@ impl MachineAir for ExpReverseBitsLenCh }); // Pad the trace to a power of two. - if self.pad { - pad_rows_fixed( - &mut rows, - || [F::zero(); NUM_EXP_REVERSE_BITS_LEN_PREPROCESSED_COLS], - self.fixed_log2_rows, - ); - } + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_EXP_REVERSE_BITS_LEN_PREPROCESSED_COLS], + self.fixed_log2_rows, + ); let trace = RowMajorMatrix::new( rows.into_iter().flatten().collect(), @@ -178,13 +175,11 @@ impl MachineAir for ExpReverseBitsLenCh }); // Pad the trace to a power of two. - if self.pad { - pad_rows_fixed( - &mut overall_rows, - || [F::zero(); NUM_EXP_REVERSE_BITS_LEN_COLS].to_vec(), - self.fixed_log2_rows, - ); - } + pad_rows_fixed( + &mut overall_rows, + || [F::zero(); NUM_EXP_REVERSE_BITS_LEN_COLS].to_vec(), + self.fixed_log2_rows, + ); // Convert the trace to a row major matrix. let trace = RowMajorMatrix::new( diff --git a/crates/recursion/core-v2/src/chips/mem/constant.rs b/crates/recursion/core-v2/src/chips/mem/constant.rs index 4ee1759d13..36d374e2c6 100644 --- a/crates/recursion/core-v2/src/chips/mem/constant.rs +++ b/crates/recursion/core-v2/src/chips/mem/constant.rs @@ -3,7 +3,7 @@ use itertools::Itertools; use p3_air::{Air, BaseAir, PairBuilder}; use p3_field::PrimeField32; use p3_matrix::{dense::RowMajorMatrix, Matrix}; -use sp1_core_machine::utils::pad_to_power_of_two; +use sp1_core_machine::utils::pad_rows_fixed; use sp1_derive::AlignedBorrow; use sp1_stark::air::MachineAir; use std::{borrow::BorrowMut, iter::zip, marker::PhantomData}; @@ -16,7 +16,8 @@ pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { - _data: PhantomData, + pub fixed_log2_rows: Option, + pub _data: PhantomData, } pub const NUM_MEM_INIT_COLS: usize = core::mem::size_of::>(); @@ -55,7 +56,7 @@ impl MachineAir for MemoryChip { } fn generate_preprocessed_trace(&self, program: &Self::Program) -> Option> { - let rows = program + let mut rows = program .instructions .iter() .filter_map(|instruction| match instruction { @@ -82,15 +83,19 @@ impl MachineAir for MemoryChip { }) .collect::>(); + // Pad the rows to the next power of two. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_MEM_PREPROCESSED_INIT_COLS], + self.fixed_log2_rows, + ); + // Convert the trace to a row major matrix. - let mut trace = RowMajorMatrix::new( + let trace = RowMajorMatrix::new( rows.into_iter().flatten().collect::>(), NUM_MEM_PREPROCESSED_INIT_COLS, ); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - Some(trace) } @@ -105,17 +110,14 @@ impl MachineAir for MemoryChip { .checked_sub(1) .map(|x| x / NUM_MEM_ENTRIES_PER_ROW + 1) .unwrap_or_default(); - let rows = + let mut rows = std::iter::repeat([F::zero(); NUM_MEM_INIT_COLS]).take(num_rows).collect::>(); - // Convert the trace to a row major matrix. - let mut trace = - RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MEM_INIT_COLS); - - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); + // Pad the rows to the next power of two. + pad_rows_fixed(&mut rows, || [F::zero(); NUM_MEM_INIT_COLS], self.fixed_log2_rows); - trace + // Convert the trace to a row major matrix. + RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MEM_INIT_COLS) } fn included(&self, _record: &Self::Record) -> bool { diff --git a/crates/recursion/core-v2/src/chips/mem/variable.rs b/crates/recursion/core-v2/src/chips/mem/variable.rs index 99f39b933e..35793de3e7 100644 --- a/crates/recursion/core-v2/src/chips/mem/variable.rs +++ b/crates/recursion/core-v2/src/chips/mem/variable.rs @@ -4,7 +4,7 @@ use p3_air::{Air, BaseAir, PairBuilder}; use p3_field::PrimeField32; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::*; -use sp1_core_machine::utils::{next_power_of_two, pad_to_power_of_two}; +use sp1_core_machine::utils::{next_power_of_two, pad_rows_fixed}; use sp1_derive::AlignedBorrow; use sp1_stark::air::MachineAir; use std::{borrow::BorrowMut, iter::zip, marker::PhantomData}; @@ -17,7 +17,8 @@ pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { - _data: PhantomData, + pub fixed_log2_rows: Option, + pub _data: PhantomData, } pub const NUM_MEM_INIT_COLS: usize = core::mem::size_of::>(); @@ -75,8 +76,12 @@ impl MachineAir for MemoryChip { .collect::>(); let nb_rows = accesses.len().div_ceil(NUM_MEM_ENTRIES_PER_ROW); - let padded_nb_rows = next_power_of_two(nb_rows, None); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(nb_rows, None), + }; let mut values = vec![F::zero(); padded_nb_rows * NUM_MEM_PREPROCESSED_INIT_COLS]; + // Generate the trace rows & corresponding records for each chunk of events in parallel. let populate_len = accesses.len() * NUM_MEM_ACCESS_COLS; values[..populate_len] @@ -93,7 +98,7 @@ impl MachineAir for MemoryChip { fn generate_trace(&self, input: &Self::Record, _: &mut Self::Record) -> RowMajorMatrix { // Generate the trace rows & corresponding records for each chunk of events in parallel. - let rows = input + let mut rows = input .mem_var_events .chunks(NUM_MEM_ENTRIES_PER_ROW) .map(|row_events| { @@ -106,14 +111,11 @@ impl MachineAir for MemoryChip { }) .collect::>(); - // Convert the trace to a row major matrix. - let mut trace = - RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MEM_INIT_COLS); + // Pad the rows to the next power of two. + pad_rows_fixed(&mut rows, || [F::zero(); NUM_MEM_INIT_COLS], self.fixed_log2_rows); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - - trace + // Convert the trace to a row major matrix. + RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MEM_INIT_COLS) } fn included(&self, _record: &Self::Record) -> bool { diff --git a/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs b/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs index b93e17e484..11c3e796d7 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs @@ -19,14 +19,13 @@ pub const NUM_ROUNDS: usize = NUM_EXTERNAL_ROUNDS + NUM_INTERNAL_ROUNDS; /// row and one row for all internal rounds). pub struct Poseidon2SkinnyChip { pub fixed_log2_rows: Option, - pub pad: bool, } impl Default for Poseidon2SkinnyChip { fn default() -> Self { // We only support machines with degree 9. assert!(DEGREE >= 9); - Self { fixed_log2_rows: None, pad: true } + Self { fixed_log2_rows: None } } } pub fn apply_m_4(x: &mut [AF]) diff --git a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs index cddde880a1..359de4fa9e 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs @@ -96,11 +96,9 @@ impl MachineAir for Poseidon2SkinnyChip rows.extend(row_add.into_iter()); } - if self.pad { - // Pad the trace to a power of two. - // This will need to be adjusted when the AIR constraints are implemented. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_POSEIDON2_COLS], self.fixed_log2_rows); - } + // Pad the trace to a power of two. + // This will need to be adjusted when the AIR constraints are implemented. + pad_rows_fixed(&mut rows, || [F::zero(); NUM_POSEIDON2_COLS], self.fixed_log2_rows); // Convert the trace to a row major matrix. let trace = @@ -190,15 +188,14 @@ impl MachineAir for Poseidon2SkinnyChip }); }, ); - if self.pad { - // Pad the trace to a power of two. - // This may need to be adjusted when the AIR constraints are implemented. - pad_rows_fixed( - &mut rows, - || [F::zero(); PREPROCESSED_POSEIDON2_WIDTH], - self.fixed_log2_rows, - ); - } + + // Pad the trace to a power of two. + // This may need to be adjusted when the AIR constraints are implemented. + pad_rows_fixed( + &mut rows, + || [F::zero(); PREPROCESSED_POSEIDON2_WIDTH], + self.fixed_log2_rows, + ); let trace_rows = rows.into_iter().flatten().collect::>(); Some(RowMajorMatrix::new(trace_rows, PREPROCESSED_POSEIDON2_WIDTH)) } diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index 7847c2c282..f152d8e1e9 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -1,3 +1,5 @@ +use std::marker::PhantomData; + use p3_field::{extension::BinomiallyExtendable, PrimeField32}; use sp1_recursion_core::runtime::D; use sp1_stark::{Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS}; @@ -100,12 +102,22 @@ impl, const DEGREE: usize, const COL_P /// A machine with fixed chip sizes to standartize the verification key. pub fn shrink_machine>(config: SC) -> StarkMachine { let chips = [ - RecursionAir::MemoryConst(MemoryConstChip::default()), - RecursionAir::MemoryVar(MemoryVarChip::default()), - RecursionAir::BaseAlu(BaseAluChip::default()), - RecursionAir::ExtAlu(ExtAluChip::default()), - RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), - RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), + RecursionAir::MemoryConst(MemoryConstChip { + fixed_log2_rows: Some(16), + _data: PhantomData, + }), + RecursionAir::MemoryVar(MemoryVarChip { + fixed_log2_rows: Some(20), + _data: PhantomData, + }), + RecursionAir::BaseAlu(BaseAluChip { fixed_log2_rows: Some(20) }), + RecursionAir::ExtAlu(ExtAluChip { fixed_log2_rows: Some(22) }), + RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip:: { + fixed_log2_rows: Some(19), + }), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { + fixed_log2_rows: Some(16), + }), RecursionAir::PublicValues(PublicValuesChip::default()), ] .map(Chip::new) From ed82784ea6cb37d1dd0f7e196ad8d421299b6c06 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Sun, 25 Aug 2024 17:47:36 -0700 Subject: [PATCH 077/268] feat: make challenger fixed shape --- crates/core/machine/src/utils/prove.rs | 4 ++++ crates/prover/src/lib.rs | 3 +++ crates/recursion/circuit-v2/src/machine/compress.rs | 4 ++++ crates/stark/src/air/public_values.rs | 5 +++++ crates/stark/src/machine.rs | 6 ++++++ 5 files changed, 22 insertions(+) diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 3b30a03186..45ea3c5d62 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -10,6 +10,7 @@ use web_time::Instant; use crate::riscv::RiscvAir; use p3_challenger::CanObserve; +use p3_field::AbstractField; use p3_maybe_rayon::prelude::*; use serde::{de::DeserializeOwned, Serialize}; use size::Size; @@ -324,6 +325,9 @@ where let mut challenger = prover.config().challenger(); challenger.observe(pk.commit.clone()); challenger.observe(pk.pc_start); + for _ in 0..7 { + challenger.observe(Val::::zero()); + } // Spawn the phase 1 prover thread. let phase_1_prover_span = tracing::Span::current().clone(); diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index a7c8d1c9c5..66dc92889c 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -374,6 +374,9 @@ impl SP1Prover { initial_reconstruct_challenger: reconstruct_challenger.clone(), is_complete, }); + assert_eq!(reconstruct_challenger.input_buffer.len(), 0); + assert_eq!(reconstruct_challenger.sponge_state.len(), 16); + assert_eq!(reconstruct_challenger.output_buffer.len(), 16); for proof in batch.iter() { reconstruct_challenger.observe(proof.commitment.main_commit); diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index ec74e4956b..8883776c19 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -147,6 +147,10 @@ where // Observe the vk and start pc. challenger.observe(builder, vk.commitment); challenger.observe(builder, vk.pc_start); + let zero: Felt<_> = builder.eval(C::F::zero()); + for _ in 0..7 { + challenger.observe(builder, zero); + } // Observe the main commitment and public values. challenger.observe(builder, shard_proof.commitment.main_commit); diff --git a/crates/stark/src/air/public_values.rs b/crates/stark/src/air/public_values.rs index dd3965001d..843cf6ba6a 100644 --- a/crates/stark/src/air/public_values.rs +++ b/crates/stark/src/air/public_values.rs @@ -54,6 +54,9 @@ pub struct PublicValues { /// The bits of the largest address that is witnessed for finalization in the current shard. pub last_finalize_addr_bits: [T; 32], + + /// This field is here to ensure that the size of the public values struct is a multiple of 8. + pub empty: [T; 3], } impl PublicValues { @@ -133,6 +136,7 @@ impl From> for PublicValues, F> last_init_addr_bits, previous_finalize_addr_bits, last_finalize_addr_bits, + .. } = value; let committed_value_digest: [_; PV_DIGEST_NUM_WORDS] = @@ -163,6 +167,7 @@ impl From> for PublicValues, F> last_init_addr_bits, previous_finalize_addr_bits, last_finalize_addr_bits, + empty: [F::zero(), F::zero(), F::zero()], } } } diff --git a/crates/stark/src/machine.rs b/crates/stark/src/machine.rs index 882bd2a04d..4f983b7e1f 100644 --- a/crates/stark/src/machine.rs +++ b/crates/stark/src/machine.rs @@ -65,6 +65,9 @@ impl StarkProvingKey { pub fn observe_into(&self, challenger: &mut SC::Challenger) { challenger.observe(self.commit.clone()); challenger.observe(self.pc_start); + for _ in 0..7 { + challenger.observe(Val::::zero()); + } } } @@ -88,6 +91,9 @@ impl StarkVerifyingKey { pub fn observe_into(&self, challenger: &mut SC::Challenger) { challenger.observe(self.commit.clone()); challenger.observe(self.pc_start); + for _ in 0..7 { + challenger.observe(Val::::zero()); + } } } From 56e6f4c9717e4909c426b9f00eb540ef639dab05 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Sun, 25 Aug 2024 17:50:46 -0700 Subject: [PATCH 078/268] fix cargo check errors --- crates/recursion/compiler/src/circuit/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/recursion/compiler/src/circuit/mod.rs b/crates/recursion/compiler/src/circuit/mod.rs index f9f3e26e3e..d3f9211ea9 100644 --- a/crates/recursion/compiler/src/circuit/mod.rs +++ b/crates/recursion/compiler/src/circuit/mod.rs @@ -108,7 +108,6 @@ mod tests { }), A::ExpReverseBitsLen(ExpReverseBitsLenChip:: { fixed_log2_rows: Some(((EXP_REVERSE_BITS_LEN_OPERATIONS - 1).ilog2() + 1) as usize), - pad: true, }), A::FriFold(FriFoldChip:: { fixed_log2_rows: Some(((FRI_FOLD_OPERATIONS - 1).ilog2() + 1) as usize), From 31e6b02b7b5e8b21a18ac62a24afc5a46fe1f9b2 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Sun, 25 Aug 2024 17:58:22 -0700 Subject: [PATCH 079/268] fix broken test --- crates/recursion/circuit-v2/src/types.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/recursion/circuit-v2/src/types.rs b/crates/recursion/circuit-v2/src/types.rs index 33166668fd..8906494405 100644 --- a/crates/recursion/circuit-v2/src/types.rs +++ b/crates/recursion/circuit-v2/src/types.rs @@ -83,6 +83,11 @@ impl, SC: BabyBearFriConfigVariable> VerifyingK challenger.observe(builder, self.commitment); // Observe the pc_start. challenger.observe(builder, self.pc_start); + // Observe the padding. + let zero: Felt<_> = builder.eval(C::F::zero()); + for _ in 0..7 { + challenger.observe(builder, zero); + } } /// Hash the verifying key + prep domains into a single digest. From 39ea79e072ddfae264f2aa30fe2abf95ef05174b Mon Sep 17 00:00:00 2001 From: John Guibas Date: Sun, 25 Aug 2024 18:02:39 -0700 Subject: [PATCH 080/268] hm --- crates/core/machine/src/utils/prove.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index e5cc29c810..3b30a03186 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -235,7 +235,6 @@ where // "cpu events". let mut state = state.lock().unwrap(); for record in records.iter_mut() { - println!("record: {:?}", record.stats()); state.shard += 1; state.execution_shard = record.public_values.execution_shard; state.start_pc = record.public_values.start_pc; From eafbfec18e6f3b4a71217d01b1d92c083bb4a493 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Sun, 25 Aug 2024 18:14:23 -0700 Subject: [PATCH 081/268] fix errors --- crates/prover/src/lib.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 2dceedf810..b9863273fb 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1020,13 +1020,13 @@ pub mod tests { } pub fn test_e2e_prover( + prover: &SP1Prover, elf: &[u8], stdin: SP1Stdin, opts: SP1ProverOpts, test_kind: Test, ) -> Result<()> { tracing::info!("initializing prover"); - let prover: SP1Prover = SP1Prover::::new(); let context = SP1Context::default(); tracing::info!("setup elf"); @@ -1227,7 +1227,8 @@ pub mod tests { // TODO(mattstam): We should Test::Plonk here, but this uses the existing // docker image which has a different API than the current. So we need to wait until the // next release (v1.2.0+), and then switch it back. - test_e2e_prover::(elf, opts, Test::Plonk) + let prover = SP1Prover::::new(); + test_e2e_prover::(&prover, elf, opts, Test::Plonk) } /// Tests an end-to-end workflow of proving a program across the entire proof generation From 3d835cfe0a6dc4899ed64086d4a4f9204405917c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Sun, 25 Aug 2024 20:39:49 -0700 Subject: [PATCH 082/268] fix tests --- crates/prover/src/lib.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 35c3136e38..ea33f19007 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1231,7 +1231,13 @@ pub mod tests { // docker image which has a different API than the current. So we need to wait until the // next release (v1.2.0+), and then switch it back. let prover = SP1Prover::::new(); - test_e2e_prover::(&prover, elf, opts, Test::Plonk) + test_e2e_prover::( + &prover, + elf, + SP1Stdin::default(), + opts, + Test::Plonk, + ) } /// Tests an end-to-end workflow of proving a program across the entire proof generation From 98f4da53480e7592bdfdd8bb2a80aaac0d54cf75 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Sun, 25 Aug 2024 20:43:28 -0700 Subject: [PATCH 083/268] fix clippy --- crates/recursion/circuit-v2/src/machine/compress.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 96aa7bd3a1..10ee4dca1d 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -189,14 +189,11 @@ where // Initiallize start pc. compress_public_values.start_pc = current_public_values.start_pc; - pc = current_public_values.start_pc; // Initialize start shard. - shard = current_public_values.start_shard; compress_public_values.start_shard = current_public_values.start_shard; // Initialize start execution shard. - execution_shard = current_public_values.start_execution_shard; compress_public_values.start_execution_shard = current_public_values.start_execution_shard; From c2775987dba25bc76ab7e5e647cce0f565a834fd Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 08:23:00 -0700 Subject: [PATCH 084/268] unit test fix --- crates/core/machine/src/memory/global.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/core/machine/src/memory/global.rs b/crates/core/machine/src/memory/global.rs index b956f8155e..1581af53f0 100644 --- a/crates/core/machine/src/memory/global.rs +++ b/crates/core/machine/src/memory/global.rs @@ -410,7 +410,6 @@ mod tests { machine.generate_dependencies(&mut runtime.records, &opts); let shards = runtime.records; - assert_eq!(shards.len(), 2); debug_interactions_with_all_chips::>( &machine, &pkey, @@ -432,7 +431,6 @@ mod tests { machine.generate_dependencies(&mut runtime.records, &opts); let shards = runtime.records; - assert_eq!(shards.len(), 2); debug_interactions_with_all_chips::>( &machine, &pkey, From 276a29180e656f024822a900043404d71d3e8039 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 08:46:47 -0700 Subject: [PATCH 085/268] example --- examples/Cargo.lock | 86 ++++++++++++++---- examples/aggregation/program/Cargo.lock | 6 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 156996 -> 141624 bytes examples/aggregation/script/src/main.rs | 56 +++--------- examples/fibonacci/program/Cargo.lock | 4 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 131432 -> 119488 bytes 6 files changed, 83 insertions(+), 69 deletions(-) diff --git a/examples/Cargo.lock b/examples/Cargo.lock index c014025279..d9dc3ee3ff 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -2810,6 +2810,15 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "lru" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "matchers" version = "0.1.0" @@ -4947,7 +4956,7 @@ dependencies = [ [[package]] name = "sp1-build" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "anyhow", "cargo_metadata", @@ -4958,7 +4967,7 @@ dependencies = [ [[package]] name = "sp1-core-executor" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "bincode", "bytemuck", @@ -4992,7 +5001,7 @@ dependencies = [ [[package]] name = "sp1-core-machine" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "anyhow", "arrayref", @@ -5056,7 +5065,7 @@ dependencies = [ [[package]] name = "sp1-cuda" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "bincode", "ctrlc", @@ -5075,7 +5084,7 @@ dependencies = [ [[package]] name = "sp1-curves" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "curve25519-dalek", "dashu", @@ -5094,7 +5103,7 @@ dependencies = [ [[package]] name = "sp1-derive" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "proc-macro2", "quote", @@ -5103,7 +5112,7 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "itertools 0.13.0", "lazy_static", @@ -5115,7 +5124,7 @@ dependencies = [ [[package]] name = "sp1-prover" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "anyhow", "bincode", @@ -5123,6 +5132,7 @@ dependencies = [ "dirs", "hex", "itertools 0.13.0", + "lru", "num-bigint 0.4.6", "oneshot", "p3-baby-bear", @@ -5138,11 +5148,10 @@ dependencies = [ "sp1-core-executor", "sp1-core-machine", "sp1-primitives", - "sp1-recursion-circuit", + "sp1-recursion-circuit-v2", "sp1-recursion-compiler", - "sp1-recursion-core", + "sp1-recursion-core-v2", "sp1-recursion-gnark-ffi", - "sp1-recursion-program", "sp1-stark", "subtle-encoding", "tempfile", @@ -5153,7 +5162,7 @@ dependencies = [ [[package]] name = "sp1-recursion-circuit" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "bincode", "itertools 0.13.0", @@ -5174,9 +5183,46 @@ dependencies = [ "sp1-stark", ] +[[package]] +name = "sp1-recursion-circuit-v2" +version = "1.2.0-rc1" +dependencies = [ + "bincode", + "hashbrown 0.14.5", + "itertools 0.13.0", + "p3-air", + "p3-baby-bear", + "p3-bn254-fr", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-matrix", + "p3-maybe-rayon", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-util", + "rand", + "serde", + "sp1-core-executor", + "sp1-core-machine", + "sp1-primitives", + "sp1-recursion-circuit", + "sp1-recursion-compiler", + "sp1-recursion-core-v2", + "sp1-recursion-derive", + "sp1-recursion-gnark-ffi", + "sp1-recursion-program", + "sp1-stark", + "stacker", + "tracing", +] + [[package]] name = "sp1-recursion-compiler" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "backtrace", "itertools 0.13.0", @@ -5204,7 +5250,7 @@ dependencies = [ [[package]] name = "sp1-recursion-core" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "arrayref", "backtrace", @@ -5240,7 +5286,7 @@ dependencies = [ [[package]] name = "sp1-recursion-core-v2" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "arrayref", "backtrace", @@ -5279,7 +5325,7 @@ dependencies = [ [[package]] name = "sp1-recursion-derive" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "proc-macro2", "quote", @@ -5288,7 +5334,7 @@ dependencies = [ [[package]] name = "sp1-recursion-gnark-ffi" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "anyhow", "bincode", @@ -5313,7 +5359,7 @@ dependencies = [ [[package]] name = "sp1-recursion-program" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "itertools 0.13.0", "p3-air", @@ -5343,7 +5389,7 @@ dependencies = [ [[package]] name = "sp1-sdk" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "alloy-sol-types", "anyhow", @@ -5388,7 +5434,7 @@ dependencies = [ [[package]] name = "sp1-stark" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "arrayref", "hashbrown 0.14.5", diff --git a/examples/aggregation/program/Cargo.lock b/examples/aggregation/program/Cargo.lock index 57b07bc689..c1253b0645 100644 --- a/examples/aggregation/program/Cargo.lock +++ b/examples/aggregation/program/Cargo.lock @@ -517,7 +517,7 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "anyhow", "bincode", @@ -529,7 +529,7 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "itertools 0.13.0", "lazy_static", @@ -541,7 +541,7 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "bincode", "cfg-if", diff --git a/examples/aggregation/program/elf/riscv32im-succinct-zkvm-elf b/examples/aggregation/program/elf/riscv32im-succinct-zkvm-elf index c572a1a353dfe556e88cf3c416496d572caf8d04..8f27a00c98dd2f83461835dade9e771413e9503a 100755 GIT binary patch literal 141624 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 J_5<2*{|iQf!tDS6 diff --git a/examples/aggregation/script/src/main.rs b/examples/aggregation/script/src/main.rs index 37b4e8b570..2a62d74d13 100644 --- a/examples/aggregation/script/src/main.rs +++ b/examples/aggregation/script/src/main.rs @@ -34,44 +34,23 @@ fn main() { let proof_1 = tracing::info_span!("generate fibonacci proof n=10").in_scope(|| { let mut stdin = SP1Stdin::new(); stdin.write(&10); - client - .prove(&fibonacci_pk, stdin) - .compressed() - .run() - .expect("proving failed") + client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed") }); let proof_2 = tracing::info_span!("generate fibonacci proof n=20").in_scope(|| { let mut stdin = SP1Stdin::new(); stdin.write(&20); - client - .prove(&fibonacci_pk, stdin) - .compressed() - .run() - .expect("proving failed") + client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed") }); let proof_3 = tracing::info_span!("generate fibonacci proof n=30").in_scope(|| { let mut stdin = SP1Stdin::new(); stdin.write(&30); - client - .prove(&fibonacci_pk, stdin) - .compressed() - .run() - .expect("proving failed") + client.prove(&fibonacci_pk, stdin).compressed().run().expect("proving failed") }); // Setup the inputs to the aggregation program. - let input_1 = AggregationInput { - proof: proof_1, - vk: fibonacci_vk.clone(), - }; - let input_2 = AggregationInput { - proof: proof_2, - vk: fibonacci_vk.clone(), - }; - let input_3 = AggregationInput { - proof: proof_3, - vk: fibonacci_vk.clone(), - }; + let input_1 = AggregationInput { proof: proof_1, vk: fibonacci_vk.clone() }; + let input_2 = AggregationInput { proof: proof_2, vk: fibonacci_vk.clone() }; + let input_3 = AggregationInput { proof: proof_3, vk: fibonacci_vk.clone() }; let inputs = vec![input_1, input_2, input_3]; // Aggregate the proofs. @@ -79,17 +58,12 @@ fn main() { let mut stdin = SP1Stdin::new(); // Write the verification keys. - let vkeys = inputs - .iter() - .map(|input| input.vk.hash_u32()) - .collect::>(); + let vkeys = inputs.iter().map(|input| input.vk.hash_u32()).collect::>(); stdin.write::>(&vkeys); // Write the public values. - let public_values = inputs - .iter() - .map(|input| input.proof.public_values.to_vec()) - .collect::>(); + let public_values = + inputs.iter().map(|input| input.proof.public_values.to_vec()).collect::>(); stdin.write::>>(&public_values); // Write the proofs. @@ -97,17 +71,11 @@ fn main() { // Note: this data will not actually be read by the aggregation program, instead it will be // witnessed by the prover during the recursive aggregation process inside SP1 itself. for input in inputs { - let SP1Proof::Compressed(proof) = input.proof.proof else { - panic!() - }; - stdin.write_proof(proof, input.vk.vk); + let SP1Proof::Compressed(proof) = input.proof.proof else { panic!() }; + stdin.write_proof(proof.vk, proof.proof, input.vk.vk); } // Generate the plonk bn254 proof. - client - .prove(&aggregation_pk, stdin) - .plonk() - .run() - .expect("proving failed"); + client.prove(&aggregation_pk, stdin).plonk().run().expect("proving failed"); }); } diff --git a/examples/fibonacci/program/Cargo.lock b/examples/fibonacci/program/Cargo.lock index d1ed343e2e..c3079154b8 100644 --- a/examples/fibonacci/program/Cargo.lock +++ b/examples/fibonacci/program/Cargo.lock @@ -335,7 +335,7 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "anyhow", "bincode", @@ -347,7 +347,7 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "1.1.1" +version = "1.2.0-rc1" dependencies = [ "bincode", "cfg-if", diff --git a/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf b/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf index 41b281e4aefeeec27024b7572fe6a81f4cb57d35..35bde9fb6d5b22632ad2e94367c7327d589d6014 100755 GIT binary patch literal 119488 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 literal 131432 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 z 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 From 029302e530b0f21c33abc1c282e616f5f3566242 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 10:31:59 -0700 Subject: [PATCH 086/268] cleanup --- crates/prover/src/init.rs | 1 - crates/prover/src/lib.rs | 1 - 2 files changed, 2 deletions(-) delete mode 100644 crates/prover/src/init.rs diff --git a/crates/prover/src/init.rs b/crates/prover/src/init.rs deleted file mode 100644 index 8b13789179..0000000000 --- a/crates/prover/src/init.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index ea33f19007..11da9984c7 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -13,7 +13,6 @@ pub mod build; pub mod components; -pub mod init; pub mod types; pub mod utils; pub mod verify; From 7095dbf6ec1380f27ec869377c32709dd5770d9e Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 12:22:24 -0700 Subject: [PATCH 087/268] fix everything --- crates/prover/src/lib.rs | 7 +++---- crates/recursion/circuit-v2/src/machine/deferred.rs | 12 ++++++++---- .../core-v2/src/chips/poseidon2_wide/mod.rs | 3 +-- .../core-v2/src/chips/poseidon2_wide/trace.rs | 10 ++++++++-- crates/recursion/core-v2/src/machine.rs | 6 ++---- crates/stark/src/bb31_poseidon2.rs | 4 ++-- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 35c3136e38..7a4a893926 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -95,7 +95,7 @@ pub type InnerSC = BabyBearPoseidon2; pub type OuterSC = BabyBearPoseidon2Outer; const COMPRESS_DEGREE: usize = 3; -const SHRINK_DEGREE: usize = 9; +const SHRINK_DEGREE: usize = 3; const WRAP_DEGREE: usize = 17; const CORE_CACHE_SIZE: usize = 100; @@ -492,7 +492,7 @@ impl SP1Prover { ); // Calculate the expected height of the tree. - let mut expected_height = 1; + let mut expected_height = if first_layer_inputs.len() == 1 { 0 } else { 1 }; let num_first_layer_inputs = first_layer_inputs.len(); let mut num_layer_inputs = num_first_layer_inputs; while num_layer_inputs > batch_size { @@ -672,7 +672,6 @@ impl SP1Prover { }); // Verify the proof. - #[cfg(feature = "debug")] self.compress_prover .machine() @@ -1231,7 +1230,7 @@ pub mod tests { // docker image which has a different API than the current. So we need to wait until the // next release (v1.2.0+), and then switch it back. let prover = SP1Prover::::new(); - test_e2e_prover::(&prover, elf, opts, Test::Plonk) + test_e2e_prover::(&prover, elf, SP1Stdin::new(), opts, Test::Plonk) } /// Tests an end-to-end workflow of proving a program across the entire proof generation diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 368bd166c2..25d125548f 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -69,10 +69,10 @@ pub struct SP1DeferredWitnessVariable< impl SP1DeferredVerifier where SC: BabyBearFriConfigVariable< - C, - FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], - >, + C, + FriChallengerVariable = DuplexChallengerVariable, + Digest = [Felt; DIGEST_SIZE], + >, C: CircuitConfig>, >::ProverData>: Clone, A: MachineAir + for<'a> Air>, @@ -125,6 +125,10 @@ where // Observe the vk and start pc. challenger.observe(builder, vk.commitment); challenger.observe(builder, vk.pc_start); + let zero: Felt<_> = builder.eval(C::F::zero()); + for _ in 0..7 { + challenger.observe(builder, zero); + } // Observe the main commitment and public values. challenger.observe(builder, shard_proof.commitment.main_commit); diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs index edb89587d8..0d8c7a7b13 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs @@ -24,12 +24,11 @@ pub const NUM_ROUNDS: usize = NUM_EXTERNAL_ROUNDS + NUM_INTERNAL_ROUNDS; /// A chip that implements addition for the opcode Poseidon2Wide. pub struct Poseidon2WideChip { pub fixed_log2_rows: Option, - pub pad: bool, } impl Default for Poseidon2WideChip { fn default() -> Self { - Self { fixed_log2_rows: None, pad: true } + Self { fixed_log2_rows: None } } } diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index c1cffae1e1..4021211a54 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -44,7 +44,10 @@ impl MachineAir for Poseidon2WideChip, ) -> RowMajorMatrix { let events = &input.poseidon2_events; - let padded_nb_rows = next_power_of_two(events.len(), self.fixed_log2_rows); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(events.len(), self.fixed_log2_rows), + }; let num_columns = >::width(self); let mut values = vec![F::zero(); padded_nb_rows * num_columns]; @@ -100,7 +103,10 @@ impl MachineAir for Poseidon2WideChip>(); - let padded_nb_rows = next_power_of_two(instrs.len(), self.fixed_log2_rows); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(instrs.len(), self.fixed_log2_rows), + }; let mut values = vec![F::zero(); padded_nb_rows * PREPROCESSED_POSEIDON2_WIDTH]; let populate_len = instrs.len() * PREPROCESSED_POSEIDON2_WIDTH; diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index f152d8e1e9..5c5c725ddb 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -107,14 +107,12 @@ impl, const DEGREE: usize, const COL_P _data: PhantomData, }), RecursionAir::MemoryVar(MemoryVarChip { - fixed_log2_rows: Some(20), + fixed_log2_rows: Some(18), _data: PhantomData, }), RecursionAir::BaseAlu(BaseAluChip { fixed_log2_rows: Some(20) }), RecursionAir::ExtAlu(ExtAluChip { fixed_log2_rows: Some(22) }), - RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip:: { - fixed_log2_rows: Some(19), - }), + RecursionAir::Poseidon2Wide(Poseidon2WideChip:: { fixed_log2_rows: Some(16) }), RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { fixed_log2_rows: Some(16), }), diff --git a/crates/stark/src/bb31_poseidon2.rs b/crates/stark/src/bb31_poseidon2.rs index 2c4dd2f7a4..cba6beaa8e 100644 --- a/crates/stark/src/bb31_poseidon2.rs +++ b/crates/stark/src/bb31_poseidon2.rs @@ -221,9 +221,9 @@ pub mod baby_bear_poseidon2 { let challenge_mmcs = ChallengeMmcs::new(ValMmcs::new(hash, compress)); let num_queries = match std::env::var("FRI_QUERIES") { Ok(value) => value.parse().unwrap(), - Err(_) => 33, + Err(_) => 50, }; - FriConfig { log_blowup: 3, num_queries, proof_of_work_bits: 16, mmcs: challenge_mmcs } + FriConfig { log_blowup: 2, num_queries, proof_of_work_bits: 16, mmcs: challenge_mmcs } } enum BabyBearPoseidon2Type { From 09f221253892e3d6f27f08d733571580fbe89d23 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 12:35:58 -0700 Subject: [PATCH 088/268] test --- crates/recursion/compiler/src/circuit/mod.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/recursion/compiler/src/circuit/mod.rs b/crates/recursion/compiler/src/circuit/mod.rs index d3f9211ea9..46496294c7 100644 --- a/crates/recursion/compiler/src/circuit/mod.rs +++ b/crates/recursion/compiler/src/circuit/mod.rs @@ -104,7 +104,6 @@ mod tests { A::ExtAlu(ExtAluChip::default()), A::Poseidon2Wide(Poseidon2WideChip:: { fixed_log2_rows: Some(((POSEIDON_OPERATIONS - 1).ilog2() + 1) as usize), - pad: true, }), A::ExpReverseBitsLen(ExpReverseBitsLenChip:: { fixed_log2_rows: Some(((EXP_REVERSE_BITS_LEN_OPERATIONS - 1).ilog2() + 1) as usize), From 8407bdeb40b3e2ac0b082baaa363833f5f772c48 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 13:04:58 -0700 Subject: [PATCH 089/268] fix everything (#1406) --- crates/prover/src/lib.rs | 5 ++--- crates/recursion/circuit-v2/src/machine/deferred.rs | 12 ++++++++---- crates/recursion/compiler/src/circuit/mod.rs | 1 - .../core-v2/src/chips/poseidon2_wide/mod.rs | 3 +-- .../core-v2/src/chips/poseidon2_wide/trace.rs | 10 ++++++++-- crates/recursion/core-v2/src/machine.rs | 6 ++---- crates/stark/src/bb31_poseidon2.rs | 4 ++-- 7 files changed, 23 insertions(+), 18 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 11da9984c7..320b42f305 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -94,7 +94,7 @@ pub type InnerSC = BabyBearPoseidon2; pub type OuterSC = BabyBearPoseidon2Outer; const COMPRESS_DEGREE: usize = 3; -const SHRINK_DEGREE: usize = 9; +const SHRINK_DEGREE: usize = 3; const WRAP_DEGREE: usize = 17; const CORE_CACHE_SIZE: usize = 100; @@ -491,7 +491,7 @@ impl SP1Prover { ); // Calculate the expected height of the tree. - let mut expected_height = 1; + let mut expected_height = if first_layer_inputs.len() == 1 { 0 } else { 1 }; let num_first_layer_inputs = first_layer_inputs.len(); let mut num_layer_inputs = num_first_layer_inputs; while num_layer_inputs > batch_size { @@ -671,7 +671,6 @@ impl SP1Prover { }); // Verify the proof. - #[cfg(feature = "debug")] self.compress_prover .machine() diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 368bd166c2..25d125548f 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -69,10 +69,10 @@ pub struct SP1DeferredWitnessVariable< impl SP1DeferredVerifier where SC: BabyBearFriConfigVariable< - C, - FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], - >, + C, + FriChallengerVariable = DuplexChallengerVariable, + Digest = [Felt; DIGEST_SIZE], + >, C: CircuitConfig>, >::ProverData>: Clone, A: MachineAir + for<'a> Air>, @@ -125,6 +125,10 @@ where // Observe the vk and start pc. challenger.observe(builder, vk.commitment); challenger.observe(builder, vk.pc_start); + let zero: Felt<_> = builder.eval(C::F::zero()); + for _ in 0..7 { + challenger.observe(builder, zero); + } // Observe the main commitment and public values. challenger.observe(builder, shard_proof.commitment.main_commit); diff --git a/crates/recursion/compiler/src/circuit/mod.rs b/crates/recursion/compiler/src/circuit/mod.rs index d3f9211ea9..46496294c7 100644 --- a/crates/recursion/compiler/src/circuit/mod.rs +++ b/crates/recursion/compiler/src/circuit/mod.rs @@ -104,7 +104,6 @@ mod tests { A::ExtAlu(ExtAluChip::default()), A::Poseidon2Wide(Poseidon2WideChip:: { fixed_log2_rows: Some(((POSEIDON_OPERATIONS - 1).ilog2() + 1) as usize), - pad: true, }), A::ExpReverseBitsLen(ExpReverseBitsLenChip:: { fixed_log2_rows: Some(((EXP_REVERSE_BITS_LEN_OPERATIONS - 1).ilog2() + 1) as usize), diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs index edb89587d8..0d8c7a7b13 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs @@ -24,12 +24,11 @@ pub const NUM_ROUNDS: usize = NUM_EXTERNAL_ROUNDS + NUM_INTERNAL_ROUNDS; /// A chip that implements addition for the opcode Poseidon2Wide. pub struct Poseidon2WideChip { pub fixed_log2_rows: Option, - pub pad: bool, } impl Default for Poseidon2WideChip { fn default() -> Self { - Self { fixed_log2_rows: None, pad: true } + Self { fixed_log2_rows: None } } } diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index c1cffae1e1..4021211a54 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -44,7 +44,10 @@ impl MachineAir for Poseidon2WideChip, ) -> RowMajorMatrix { let events = &input.poseidon2_events; - let padded_nb_rows = next_power_of_two(events.len(), self.fixed_log2_rows); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(events.len(), self.fixed_log2_rows), + }; let num_columns = >::width(self); let mut values = vec![F::zero(); padded_nb_rows * num_columns]; @@ -100,7 +103,10 @@ impl MachineAir for Poseidon2WideChip>(); - let padded_nb_rows = next_power_of_two(instrs.len(), self.fixed_log2_rows); + let padded_nb_rows = match self.fixed_log2_rows { + Some(log2_rows) => 1 << log2_rows, + None => next_power_of_two(instrs.len(), self.fixed_log2_rows), + }; let mut values = vec![F::zero(); padded_nb_rows * PREPROCESSED_POSEIDON2_WIDTH]; let populate_len = instrs.len() * PREPROCESSED_POSEIDON2_WIDTH; diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index f152d8e1e9..5c5c725ddb 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -107,14 +107,12 @@ impl, const DEGREE: usize, const COL_P _data: PhantomData, }), RecursionAir::MemoryVar(MemoryVarChip { - fixed_log2_rows: Some(20), + fixed_log2_rows: Some(18), _data: PhantomData, }), RecursionAir::BaseAlu(BaseAluChip { fixed_log2_rows: Some(20) }), RecursionAir::ExtAlu(ExtAluChip { fixed_log2_rows: Some(22) }), - RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip:: { - fixed_log2_rows: Some(19), - }), + RecursionAir::Poseidon2Wide(Poseidon2WideChip:: { fixed_log2_rows: Some(16) }), RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { fixed_log2_rows: Some(16), }), diff --git a/crates/stark/src/bb31_poseidon2.rs b/crates/stark/src/bb31_poseidon2.rs index 2c4dd2f7a4..cba6beaa8e 100644 --- a/crates/stark/src/bb31_poseidon2.rs +++ b/crates/stark/src/bb31_poseidon2.rs @@ -221,9 +221,9 @@ pub mod baby_bear_poseidon2 { let challenge_mmcs = ChallengeMmcs::new(ValMmcs::new(hash, compress)); let num_queries = match std::env::var("FRI_QUERIES") { Ok(value) => value.parse().unwrap(), - Err(_) => 33, + Err(_) => 50, }; - FriConfig { log_blowup: 3, num_queries, proof_of_work_bits: 16, mmcs: challenge_mmcs } + FriConfig { log_blowup: 2, num_queries, proof_of_work_bits: 16, mmcs: challenge_mmcs } } enum BabyBearPoseidon2Type { From 4f16b4d4c945978d11f1b95e735c4156abff7cf5 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 15:05:55 -0700 Subject: [PATCH 090/268] fmt --- crates/cli/src/commands/vkey.rs | 3 +- crates/core/machine/src/utils/prove.rs | 2 +- crates/prover/scripts/e2e.rs | 4 +- crates/recursion/circuit-v2/src/fri.rs | 7 ++- .../circuit-v2/src/machine/compress.rs | 29 ++++----- .../recursion/circuit-v2/src/machine/core.rs | 60 ++++++++++--------- .../circuit-v2/src/machine/deferred.rs | 8 +-- crates/recursion/circuit-v2/src/utils.rs | 3 +- 8 files changed, 59 insertions(+), 57 deletions(-) diff --git a/crates/cli/src/commands/vkey.rs b/crates/cli/src/commands/vkey.rs index 58fd64e3d7..a8aeb1c183 100644 --- a/crates/cli/src/commands/vkey.rs +++ b/crates/cli/src/commands/vkey.rs @@ -2,8 +2,7 @@ use std::fs::File; use anyhow::Result; use clap::Parser; -use sp1_sdk::HashableKey; -use sp1_sdk::ProverClient; +use sp1_sdk::{HashableKey, ProverClient}; use std::io::Read; #[derive(Parser)] diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 45ea3c5d62..872176e3af 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -21,9 +21,9 @@ use thiserror::Error; use p3_baby_bear::BabyBear; use p3_field::PrimeField32; -use crate::riscv::cost::CostEstimator; use crate::{ io::{SP1PublicValues, SP1Stdin}, + riscv::cost::CostEstimator, utils::{chunk_vec, concurrency::TurnBasedSync}, }; use sp1_core_executor::events::sorted_table_lines; diff --git a/crates/prover/scripts/e2e.rs b/crates/prover/scripts/e2e.rs index bf969077f0..30415f432c 100644 --- a/crates/prover/scripts/e2e.rs +++ b/crates/prover/scripts/e2e.rs @@ -113,7 +113,7 @@ // &build_dir, // ); -// println!("groth16 proof: {:?}", String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); -// } +// println!("groth16 proof: {:?}", +// String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); } pub fn main() {} diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 413c64422b..ae4b12c457 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -134,7 +134,8 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let pow = log_height_pow[log_height]; // Fill in any missing powers of alpha. for _ in alpha_pows.len()..pow + 1 { - // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * alpha); + // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * + // alpha); let new_alpha: Ext<_, _> = builder.uninit(); builder.operations.push(DslIr::MulE( new_alpha, @@ -281,8 +282,8 @@ pub fn verify_query, SC: BabyBearFriConfigVariable // Unroll the `folded_eval` calculation to avoid symbolic expression overhead. // folded_eval = builder - // .eval(evals_ext[0] + (beta - xs[0]) * (evals_ext[1] - evals_ext[0]) / (xs[1] - xs[0])); - // x = builder.eval(x * x); + // .eval(evals_ext[0] + (beta - xs[0]) * (evals_ext[1] - evals_ext[0]) / (xs[1] - + // xs[0])); x = builder.eval(x * x); // let temp_1 = xs[1] - xs[0]; let temp_1: Felt<_> = builder.uninit(); diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 10ee4dca1d..6f67f90279 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -75,11 +75,11 @@ where /// implementation in this function assumes a fixed recursive verifier speicified by /// `recursive_vk`. /// - Deferred proofs: proofs which are recursive proof of a batch of deferred proofs. The - /// implementation in this function assumes a fixed deferred verification program specified - /// by `deferred_vk`. - /// - Compress proofs: these are proofs which refer to a prove of this program. The key for - /// it is part of public values will be propagated accross all levels of recursion and will - /// be checked against itself as in [sp1_prover::Prover] or as in [super::SP1RootVerifier]. + /// implementation in this function assumes a fixed deferred verification program specified by + /// `deferred_vk`. + /// - Compress proofs: these are proofs which refer to a prove of this program. The key for it + /// is part of public values will be propagated accross all levels of recursion and will be + /// checked against itself as in [sp1_prover::Prover] or as in [super::SP1RootVerifier]. pub fn verify( builder: &mut Builder, machine: &StarkMachine, @@ -259,7 +259,8 @@ where // // Consistency checks for all accumulated values. // Assert that the sp1_vk digest is always the same. - // for (digest, current) in sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { + // for (digest, current) in + // sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { // builder.assert_felt_eq(*digest, current); // } @@ -305,9 +306,9 @@ where // Digest constraints. { - // // If `commited_value_digest` is not zero, then `public_values.commited_value_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `commited_value_digest` is not zero, then + // `public_values.commited_value_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -339,9 +340,9 @@ where } } - // // If `deferred_proofs_digest` is not zero, then `public_values.deferred_proofs_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `deferred_proofs_digest` is not zero, then + // `public_values.deferred_proofs_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // let d = felt2var(builder, deferred_proofs_digest[i]); @@ -457,8 +458,8 @@ where // Set the exit code. compress_public_values.exit_code = exit_code; - // // If the proof is complete, make completeness assertions and set the flag. Otherwise, check - // // the flag is zero and set the public value to zero. + // // If the proof is complete, make completeness assertions and set the flag. Otherwise, + // check // the flag is zero and set the public value to zero. // builder.if_eq(is_complete, C::N::one()).then_or_else( // |builder| { // builder.assign(compress_public_values.is_complete, C::F::one()); diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 6465b6b7b6..56800b147b 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -289,10 +289,12 @@ where // Execution shard constraints. // let execution_shard = felt2var(builder, public_values.execution_shard); { - // If the shard has a "CPU" chip, then the execution shard should be incremented by 1. + // If the shard has a "CPU" chip, then the execution shard should be incremented by + // 1. if contains_cpu { // Assert that the shard of the proof is equal to the current shard. - // builder.assert_felt_eq(current_execution_shard, public_values.execution_shard); + // builder.assert_felt_eq(current_execution_shard, + // public_values.execution_shard); current_execution_shard = builder.eval(current_execution_shard + C::F::one()); } @@ -300,8 +302,8 @@ where // Program counter constraints. { - // // If it's the first shard (which is the first execution shard), then the start_pc - // // should be vk.pc_start. + // // If it's the first shard (which is the first execution shard), then the + // start_pc // should be vk.pc_start. // builder.if_eq(shard, C::N::one()).then(|builder| { // builder.assert_felt_eq(public_values.start_pc, vk.pc_start); // }); @@ -309,10 +311,10 @@ where // // Assert that the start_pc of the proof is equal to the current pc. // builder.assert_felt_eq(current_pc, public_values.start_pc); - // // If it's not a shard with "CPU", then assert that the start_pc equals the next_pc. - // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { - // builder.assert_felt_eq(public_values.start_pc, public_values.next_pc); - // }); + // // If it's not a shard with "CPU", then assert that the start_pc equals the + // next_pc. builder.if_ne(contains_cpu, C::N::one()).then(|builder| + // { builder.assert_felt_eq(public_values.start_pc, + // public_values.next_pc); }); // // If it's a shard with "CPU", then assert that the start_pc is not zero. // builder.if_eq(contains_cpu, C::N::one()).then(|builder| { @@ -331,12 +333,12 @@ where // Memory initialization & finalization constraints. { - // // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first execution shard. - // builder.if_eq(execution_shard, C::N::one()).then(|builder| { - // // Assert that the MemoryInitialize address bits are zero. - // for bit in current_init_addr_bits.iter() { - // builder.assert_felt_eq(*bit, C::F::zero()); - // } + // // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first + // execution shard. builder.if_eq(execution_shard, + // C::N::one()).then(|builder| { // Assert that the + // MemoryInitialize address bits are zero. for bit in + // current_init_addr_bits.iter() { builder.assert_felt_eq(* + // bit, C::F::zero()); } // // Assert that the MemoryFinalize address bits are zero. // for bit in current_finalize_addr_bits.iter() { @@ -373,8 +375,8 @@ where // } // }); - // // Assert that if MemoryFinalize is not present, then the address bits are the same. - // builder + // // Assert that if MemoryFinalize is not present, then the address bits are the + // same. builder // .if_ne(contains_memory_finalize, C::N::one()) // .then(|builder| { // for (prev_bit, last_bit) in public_values @@ -404,9 +406,9 @@ where // Digest constraints. { - // // If `commited_value_digest` is not zero, then `public_values.commited_value_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `commited_value_digest` is not zero, then + // `public_values.commited_value_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -428,8 +430,8 @@ where // } // }); - // // If it's not a shard with "CPU", then the committed value digest should not change. - // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { + // // If it's not a shard with "CPU", then the committed value digest should not + // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -449,9 +451,9 @@ where } } - // // If `deferred_proofs_digest` is not zero, then `public_values.deferred_proofs_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `deferred_proofs_digest` is not zero, then + // `public_values.deferred_proofs_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // let d = felt2var(builder, deferred_proofs_digest[i]); @@ -469,8 +471,8 @@ where // } // }); - // // If it's not a shard with "CPU", then the deferred proofs digest should not change. - // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { + // // If it's not a shard with "CPU", then the deferred proofs digest should not + // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // builder.assert_felt_eq( @@ -552,9 +554,9 @@ where // // If the proof represents a complete proof, make completeness assertions. // // - // // *Remark*: In this program, this only happends if there is one shard and the program has - // // no deferred proofs to verify. However, the completeness check is independent of these - // // facts. + // // *Remark*: In this program, this only happends if there is one shard and the + // program has // no deferred proofs to verify. However, the completeness + // check is independent of these // facts. // builder.if_eq(is_complete, C::N::one()).then(|builder| { // assert_complete(builder, recursion_public_values, &reconstruct_challenger) // }); diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 25d125548f..48e6da7325 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -69,10 +69,10 @@ pub struct SP1DeferredWitnessVariable< impl SP1DeferredVerifier where SC: BabyBearFriConfigVariable< - C, - FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], - >, + C, + FriChallengerVariable = DuplexChallengerVariable, + Digest = [Felt; DIGEST_SIZE], + >, C: CircuitConfig>, >::ProverData>: Clone, A: MachineAir + for<'a> Air>, diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index 8feb69d78d..e03d978898 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -2,8 +2,7 @@ use std::mem::MaybeUninit; use p3_baby_bear::BabyBear; use p3_bn254_fr::Bn254Fr; -use p3_field::AbstractField; -use p3_field::PrimeField32; +use p3_field::{AbstractField, PrimeField32}; use sp1_recursion_compiler::ir::{Builder, Config, Felt, Var}; use sp1_recursion_core_v2::{air::ChallengerPublicValues, DIGEST_SIZE}; From de8eebb753e713be93d0ec82b823d5ea2ca86fc7 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 15:09:05 -0700 Subject: [PATCH 091/268] nightly fmt --- crates/cli/src/commands/install_toolchain.rs | 8 +- crates/cli/src/commands/prove.rs | 4 +- crates/core/executor/src/executor.rs | 8 +- crates/core/executor/src/instruction.rs | 52 +++++------ crates/core/machine/src/air/memory.rs | 4 +- crates/core/machine/src/alu/bitwise/mod.rs | 12 +-- crates/core/machine/src/alu/divrem/mod.rs | 26 +++--- crates/core/machine/src/alu/lt/mod.rs | 4 +- crates/core/machine/src/alu/mul/mod.rs | 20 ++--- crates/core/machine/src/alu/sll/mod.rs | 4 +- crates/core/machine/src/alu/sr/mod.rs | 8 +- crates/core/machine/src/cpu/air/branch.rs | 22 ++--- crates/core/machine/src/cpu/air/ecall.rs | 20 ++--- crates/core/machine/src/cpu/air/memory.rs | 90 +++++++++---------- crates/core/machine/src/cpu/air/mod.rs | 10 +-- crates/core/machine/src/cpu/trace.rs | 32 +++---- crates/core/machine/src/operations/add4.rs | 14 +-- crates/core/machine/src/operations/add5.rs | 18 ++-- .../machine/src/operations/field/field_op.rs | 4 +- crates/core/machine/src/riscv/cost.rs | 54 +++++------ .../src/syscall/precompiles/fptower/fp.rs | 6 +- .../precompiles/sha256/compress/air.rs | 26 +++--- .../src/syscall/precompiles/uint256/air.rs | 6 +- .../weierstrass/weierstrass_add.rs | 6 +- .../weierstrass/weierstrass_decompress.rs | 9 +- .../weierstrass/weierstrass_double.rs | 6 +- crates/curves/src/edwards/mod.rs | 4 +- crates/prover/src/verify.rs | 26 +++--- .../recursion/circuit-v2/src/constraints.rs | 17 ++-- crates/recursion/circuit-v2/src/domain.rs | 8 +- crates/recursion/circuit/src/constraints.rs | 4 +- crates/recursion/circuit/src/domain.rs | 8 +- .../compiler/src/circuit/compiler.rs | 10 +-- .../core-v2/src/chips/exp_reverse_bits.rs | 6 +- .../recursion/core-v2/src/chips/fri_fold.rs | 8 +- .../core-v2/src/chips/mem/variable.rs | 4 +- .../core-v2/src/chips/poseidon2_wide/air.rs | 4 +- crates/recursion/core/src/air/builder.rs | 4 +- crates/recursion/core/src/cpu/air/jump.rs | 10 +-- crates/recursion/core/src/cpu/air/mod.rs | 42 ++++----- .../recursion/core/src/cpu/columns/opcode.rs | 12 +-- .../core/src/exp_reverse_bits/mod.rs | 4 +- crates/recursion/core/src/multi/mod.rs | 8 +- .../src/poseidon2_wide/air/control_flow.rs | 56 ++++++------ .../src/poseidon2_wide/air/permutation.rs | 10 +-- .../columns/opcode_workspace.rs | 21 ++--- .../core/src/poseidon2_wide/trace.rs | 8 +- crates/recursion/core/src/runtime/mod.rs | 12 +-- crates/recursion/program/src/constraints.rs | 4 +- crates/recursion/program/src/fri/domain.rs | 4 +- crates/stark/src/air/polynomial.rs | 6 +- crates/stark/src/machine.rs | 4 +- crates/stark/src/permutation.rs | 8 +- crates/stark/src/prover.rs | 6 +- crates/stark/src/verifier.rs | 9 +- rustfmt.toml | 2 +- 56 files changed, 398 insertions(+), 404 deletions(-) diff --git a/crates/cli/src/commands/install_toolchain.rs b/crates/cli/src/commands/install_toolchain.rs index de09773cef..eb8084d047 100644 --- a/crates/cli/src/commands/install_toolchain.rs +++ b/crates/cli/src/commands/install_toolchain.rs @@ -67,10 +67,10 @@ impl InstallToolchainCmd { if let Ok(entry) = entry { let entry_path = entry.path(); let entry_name = entry_path.file_name().unwrap(); - if entry_path.is_dir() - && entry_name != "bin" - && entry_name != "circuits" - && entry_name != "toolchains" + if entry_path.is_dir() && + entry_name != "bin" && + entry_name != "circuits" && + entry_name != "toolchains" { if let Err(err) = fs::remove_dir_all(&entry_path) { println!("Failed to remove directory {:?}: {}", entry_path, err); diff --git a/crates/cli/src/commands/prove.rs b/crates/cli/src/commands/prove.rs index 0e2951dc23..293f779810 100644 --- a/crates/cli/src/commands/prove.rs +++ b/crates/cli/src/commands/prove.rs @@ -22,8 +22,8 @@ fn is_valid_hex_string(s: &str) -> bool { return false; } // All hex digits with optional 0x prefix - s.starts_with("0x") && s[2..].chars().all(|c| c.is_ascii_hexdigit()) - || s.chars().all(|c| c.is_ascii_hexdigit()) + s.starts_with("0x") && s[2..].chars().all(|c| c.is_ascii_hexdigit()) || + s.chars().all(|c| c.is_ascii_hexdigit()) } impl FromStr for Input { diff --git a/crates/core/executor/src/executor.rs b/crates/core/executor/src/executor.rs index 3ac459ae94..12c92b9f9e 100644 --- a/crates/core/executor/src/executor.rs +++ b/crates/core/executor/src/executor.rs @@ -886,8 +886,8 @@ impl<'a> Executor<'a> { // which is not permitted in unconstrained mode. This will result in // non-zero memory interactions when generating a proof. - if self.unconstrained - && (syscall != SyscallCode::EXIT_UNCONSTRAINED && syscall != SyscallCode::WRITE) + if self.unconstrained && + (syscall != SyscallCode::EXIT_UNCONSTRAINED && syscall != SyscallCode::WRITE) { return Err(ExecutionError::InvalidSyscallUsage(syscall_id as u64)); } @@ -1080,8 +1080,8 @@ impl<'a> Executor<'a> { } } - Ok(self.state.pc.wrapping_sub(self.program.pc_base) - >= (self.program.instructions.len() * 4) as u32) + Ok(self.state.pc.wrapping_sub(self.program.pc_base) >= + (self.program.instructions.len() * 4) as u32) } /// Bump the record. diff --git a/crates/core/executor/src/instruction.rs b/crates/core/executor/src/instruction.rs index bc1df27ba0..322ed91096 100644 --- a/crates/core/executor/src/instruction.rs +++ b/crates/core/executor/src/instruction.rs @@ -45,24 +45,24 @@ impl Instruction { pub const fn is_alu_instruction(&self) -> bool { matches!( self.opcode, - Opcode::ADD - | Opcode::SUB - | Opcode::XOR - | Opcode::OR - | Opcode::AND - | Opcode::SLL - | Opcode::SRL - | Opcode::SRA - | Opcode::SLT - | Opcode::SLTU - | Opcode::MUL - | Opcode::MULH - | Opcode::MULHU - | Opcode::MULHSU - | Opcode::DIV - | Opcode::DIVU - | Opcode::REM - | Opcode::REMU + Opcode::ADD | + Opcode::SUB | + Opcode::XOR | + Opcode::OR | + Opcode::AND | + Opcode::SLL | + Opcode::SRL | + Opcode::SRA | + Opcode::SLT | + Opcode::SLTU | + Opcode::MUL | + Opcode::MULH | + Opcode::MULHU | + Opcode::MULHSU | + Opcode::DIV | + Opcode::DIVU | + Opcode::REM | + Opcode::REMU ) } @@ -77,14 +77,14 @@ impl Instruction { pub const fn is_memory_instruction(&self) -> bool { matches!( self.opcode, - Opcode::LB - | Opcode::LH - | Opcode::LW - | Opcode::LBU - | Opcode::LHU - | Opcode::SB - | Opcode::SH - | Opcode::SW + Opcode::LB | + Opcode::LH | + Opcode::LW | + Opcode::LBU | + Opcode::LHU | + Opcode::SB | + Opcode::SH | + Opcode::SW ) } diff --git a/crates/core/machine/src/air/memory.rs b/crates/core/machine/src/air/memory.rs index 8d0c9fb909..00dc54c580 100644 --- a/crates/core/machine/src/air/memory.rs +++ b/crates/core/machine/src/air/memory.rs @@ -162,8 +162,8 @@ pub trait MemoryAirBuilder: BaseAirBuilder { // Verify that value = limb_16 + limb_8 * 2^16. self.when(do_check.clone()).assert_eq( value, - limb_16.clone().into() - + limb_8.clone().into() * Self::Expr::from_canonical_u32(1 << 16), + limb_16.clone().into() + + limb_8.clone().into() * Self::Expr::from_canonical_u32(1 << 16), ); // Send the range checks for the limbs. diff --git a/crates/core/machine/src/alu/bitwise/mod.rs b/crates/core/machine/src/alu/bitwise/mod.rs index 556bd22dcc..7a1d2cb434 100644 --- a/crates/core/machine/src/alu/bitwise/mod.rs +++ b/crates/core/machine/src/alu/bitwise/mod.rs @@ -186,9 +186,9 @@ where builder.when_transition().assert_eq(local.nonce + AB::Expr::one(), next.nonce); // Get the opcode for the operation. - let opcode = local.is_xor * ByteOpcode::XOR.as_field::() - + local.is_or * ByteOpcode::OR.as_field::() - + local.is_and * ByteOpcode::AND.as_field::(); + let opcode = local.is_xor * ByteOpcode::XOR.as_field::() + + local.is_or * ByteOpcode::OR.as_field::() + + local.is_and * ByteOpcode::AND.as_field::(); // Get a multiplicity of `1` only for a true row. let mult = local.is_xor + local.is_or + local.is_and; @@ -197,9 +197,9 @@ where } // Get the cpu opcode, which corresponds to the opcode being sent in the CPU table. - let cpu_opcode = local.is_xor * Opcode::XOR.as_field::() - + local.is_or * Opcode::OR.as_field::() - + local.is_and * Opcode::AND.as_field::(); + let cpu_opcode = local.is_xor * Opcode::XOR.as_field::() + + local.is_or * Opcode::OR.as_field::() + + local.is_and * Opcode::AND.as_field::(); // Receive the arguments. builder.receive_alu( diff --git a/crates/core/machine/src/alu/divrem/mod.rs b/crates/core/machine/src/alu/divrem/mod.rs index 9beb1ddf13..b7911551be 100644 --- a/crates/core/machine/src/alu/divrem/mod.rs +++ b/crates/core/machine/src/alu/divrem/mod.rs @@ -234,10 +234,10 @@ impl MachineAir for DivRemChip { let divrem_events = input.divrem_events.clone(); for event in divrem_events.iter() { assert!( - event.opcode == Opcode::DIVU - || event.opcode == Opcode::REMU - || event.opcode == Opcode::REM - || event.opcode == Opcode::DIV + event.opcode == Opcode::DIVU || + event.opcode == Opcode::REMU || + event.opcode == Opcode::REM || + event.opcode == Opcode::DIV ); let mut row = [F::zero(); NUM_DIVREM_COLS]; let cols: &mut DivRemCols = row.as_mut_slice().borrow_mut(); @@ -649,9 +649,9 @@ where builder.assert_eq( local.is_overflow, - local.is_overflow_b.is_diff_zero.result - * local.is_overflow_c.is_diff_zero.result - * is_signed, + local.is_overflow_b.is_diff_zero.result * + local.is_overflow_c.is_diff_zero.result * + is_signed, ); } @@ -796,8 +796,8 @@ where let mut v = vec![zero.clone(); WORD_SIZE]; // Set the least significant byte to 1 if is_c_0 is true. - v[0] = local.is_c_0.result * one.clone() - + (one.clone() - local.is_c_0.result) * local.abs_c[0]; + v[0] = local.is_c_0.result * one.clone() + + (one.clone() - local.is_c_0.result) * local.abs_c[0]; // Set the remaining bytes to 0 if is_c_0 is true. for i in 1..WORD_SIZE { @@ -927,10 +927,10 @@ where let div: AB::Expr = AB::F::from_canonical_u32(Opcode::DIV as u32).into(); let rem: AB::Expr = AB::F::from_canonical_u32(Opcode::REM as u32).into(); - local.is_divu * divu - + local.is_remu * remu - + local.is_div * div - + local.is_rem * rem + local.is_divu * divu + + local.is_remu * remu + + local.is_div * div + + local.is_rem * rem }; builder.receive_alu( diff --git a/crates/core/machine/src/alu/lt/mod.rs b/crates/core/machine/src/alu/lt/mod.rs index 1ae8b47893..82647631e5 100644 --- a/crates/core/machine/src/alu/lt/mod.rs +++ b/crates/core/machine/src/alu/lt/mod.rs @@ -454,8 +454,8 @@ where // Receive the arguments. builder.receive_alu( - local.is_slt * AB::F::from_canonical_u32(Opcode::SLT as u32) - + local.is_sltu * AB::F::from_canonical_u32(Opcode::SLTU as u32), + local.is_slt * AB::F::from_canonical_u32(Opcode::SLT as u32) + + local.is_sltu * AB::F::from_canonical_u32(Opcode::SLTU as u32), local.a, local.b, local.c, diff --git a/crates/core/machine/src/alu/mul/mod.rs b/crates/core/machine/src/alu/mul/mod.rs index 98dbc7a80e..185f1de682 100644 --- a/crates/core/machine/src/alu/mul/mod.rs +++ b/crates/core/machine/src/alu/mul/mod.rs @@ -150,10 +150,10 @@ impl MachineAir for MulChip { .map(|event| { // Ensure that the opcode is MUL, MULHU, MULH, or MULHSU. assert!( - event.opcode == Opcode::MUL - || event.opcode == Opcode::MULHU - || event.opcode == Opcode::MULH - || event.opcode == Opcode::MULHSU + event.opcode == Opcode::MUL || + event.opcode == Opcode::MULHU || + event.opcode == Opcode::MULH || + event.opcode == Opcode::MULHSU ); let mut row = [F::zero(); NUM_MUL_COLS]; let cols: &mut MulCols = row.as_mut_slice().borrow_mut(); @@ -173,8 +173,8 @@ impl MachineAir for MulChip { cols.c_msb = F::from_canonical_u8(c_msb); // If b is signed and it is negative, sign extend b. - if (event.opcode == Opcode::MULH || event.opcode == Opcode::MULHSU) - && b_msb == 1 + if (event.opcode == Opcode::MULH || event.opcode == Opcode::MULHSU) && + b_msb == 1 { cols.b_sign_extend = F::one(); b.resize(PRODUCT_SIZE, BYTE_MASK); @@ -432,10 +432,10 @@ where let mulh: AB::Expr = AB::F::from_canonical_u32(Opcode::MULH as u32).into(); let mulhu: AB::Expr = AB::F::from_canonical_u32(Opcode::MULHU as u32).into(); let mulhsu: AB::Expr = AB::F::from_canonical_u32(Opcode::MULHSU as u32).into(); - local.is_mul * mul - + local.is_mulh * mulh - + local.is_mulhu * mulhu - + local.is_mulhsu * mulhsu + local.is_mul * mul + + local.is_mulh * mulh + + local.is_mulhu * mulhu + + local.is_mulhsu * mulhsu }; // Range check. diff --git a/crates/core/machine/src/alu/sll/mod.rs b/crates/core/machine/src/alu/sll/mod.rs index 50b3694073..81f8b64375 100644 --- a/crates/core/machine/src/alu/sll/mod.rs +++ b/crates/core/machine/src/alu/sll/mod.rs @@ -314,8 +314,8 @@ where // Check bit_shift_result = b * bit_shift_multiplier by using bit_shift_result_carry to // carry-propagate. for i in 0..WORD_SIZE { - let mut v = local.b[i] * local.bit_shift_multiplier - - local.bit_shift_result_carry[i] * base.clone(); + let mut v = local.b[i] * local.bit_shift_multiplier - + local.bit_shift_result_carry[i] * base.clone(); if i > 0 { v += local.bit_shift_result_carry[i - 1].into(); } diff --git a/crates/core/machine/src/alu/sr/mod.rs b/crates/core/machine/src/alu/sr/mod.rs index 88ca2eacd4..087d3b78b2 100644 --- a/crates/core/machine/src/alu/sr/mod.rs +++ b/crates/core/machine/src/alu/sr/mod.rs @@ -405,8 +405,8 @@ where // The 2-bit number represented by the 3rd and 4th least significant bits of c is the // number of bytes to shift. - let num_bytes_to_shift = local.c_least_sig_byte[3] - + local.c_least_sig_byte[4] * AB::F::from_canonical_u32(2); + let num_bytes_to_shift = local.c_least_sig_byte[3] + + local.c_least_sig_byte[4] * AB::F::from_canonical_u32(2); // If shift_by_n_bytes[i] = 1, then i = num_bytes_to_shift. for i in 0..WORD_SIZE { @@ -534,8 +534,8 @@ where // Receive the arguments. builder.receive_alu( - local.is_srl * AB::F::from_canonical_u32(Opcode::SRL as u32) - + local.is_sra * AB::F::from_canonical_u32(Opcode::SRA as u32), + local.is_srl * AB::F::from_canonical_u32(Opcode::SRL as u32) + + local.is_sra * AB::F::from_canonical_u32(Opcode::SRA as u32), local.a, local.b, local.c, diff --git a/crates/core/machine/src/cpu/air/branch.rs b/crates/core/machine/src/cpu/air/branch.rs index 1377d1a14e..42d77540a0 100644 --- a/crates/core/machine/src/cpu/air/branch.rs +++ b/crates/core/machine/src/cpu/air/branch.rs @@ -22,12 +22,12 @@ impl CpuChip { &self, opcode_selectors: &OpcodeSelectorCols, ) -> AB::Expr { - opcode_selectors.is_beq - + opcode_selectors.is_bne - + opcode_selectors.is_blt - + opcode_selectors.is_bge - + opcode_selectors.is_bltu - + opcode_selectors.is_bgeu + opcode_selectors.is_beq + + opcode_selectors.is_bne + + opcode_selectors.is_blt + + opcode_selectors.is_bge + + opcode_selectors.is_bltu + + opcode_selectors.is_bgeu } /// Verifies all the branching related columns. @@ -179,9 +179,9 @@ impl CpuChip { // Calculate a_lt_b <==> a < b (using appropriate signedness). let use_signed_comparison = local.selectors.is_blt + local.selectors.is_bge; builder.send_alu( - use_signed_comparison.clone() * Opcode::SLT.as_field::() - + (AB::Expr::one() - use_signed_comparison.clone()) - * Opcode::SLTU.as_field::(), + use_signed_comparison.clone() * Opcode::SLT.as_field::() + + (AB::Expr::one() - use_signed_comparison.clone()) * + Opcode::SLTU.as_field::(), Word::extend_var::(branch_cols.a_lt_b), local.op_a_val(), local.op_b_val(), @@ -193,8 +193,8 @@ impl CpuChip { // Calculate a_gt_b <==> a > b (using appropriate signedness). builder.send_alu( - use_signed_comparison.clone() * Opcode::SLT.as_field::() - + (AB::Expr::one() - use_signed_comparison) * Opcode::SLTU.as_field::(), + use_signed_comparison.clone() * Opcode::SLT.as_field::() + + (AB::Expr::one() - use_signed_comparison) * Opcode::SLTU.as_field::(), Word::extend_var::(branch_cols.a_gt_b), local.op_b_val(), local.op_a_val(), diff --git a/crates/core/machine/src/cpu/air/ecall.rs b/crates/core/machine/src/cpu/air/ecall.rs index 8a88453a7a..785c0a9585 100644 --- a/crates/core/machine/src/cpu/air/ecall.rs +++ b/crates/core/machine/src/cpu/air/ecall.rs @@ -63,8 +63,8 @@ impl CpuChip { let is_enter_unconstrained = { IsZeroOperation::::eval( builder, - syscall_id - - AB::Expr::from_canonical_u32(SyscallCode::ENTER_UNCONSTRAINED.syscall_id()), + syscall_id - + AB::Expr::from_canonical_u32(SyscallCode::ENTER_UNCONSTRAINED.syscall_id()), ecall_cols.is_enter_unconstrained, is_ecall_instruction.clone(), ); @@ -97,8 +97,8 @@ impl CpuChip { // Verify value of ecall_range_check_operand column. builder.assert_eq( local.ecall_range_check_operand, - is_ecall_instruction - * (ecall_cols.is_halt.result + ecall_cols.is_commit_deferred_proofs.result), + is_ecall_instruction * + (ecall_cols.is_halt.result + ecall_cols.is_commit_deferred_proofs.result), ); // Babybear range check the operand_to_check word. @@ -140,8 +140,8 @@ impl CpuChip { // When it's some other syscall, there should be no set bits. builder .when( - local.selectors.is_ecall - * (AB::Expr::one() - (is_commit.clone() + is_commit_deferred_proofs.clone())), + local.selectors.is_ecall * + (AB::Expr::one() - (is_commit.clone() + is_commit_deferred_proofs.clone())), ) .assert_zero(bitmap_sum); @@ -156,8 +156,8 @@ impl CpuChip { for i in 0..3 { builder .when( - local.selectors.is_ecall - * (is_commit.clone() + is_commit_deferred_proofs.clone()), + local.selectors.is_ecall * + (is_commit.clone() + is_commit_deferred_proofs.clone()), ) .assert_eq(local.op_b_access.prev_value()[i + 1], AB::Expr::from_canonical_u32(0)); } @@ -278,8 +278,8 @@ impl CpuChip { let is_commit_deferred_proofs = { IsZeroOperation::::eval( builder, - syscall_id - - AB::Expr::from_canonical_u32( + syscall_id - + AB::Expr::from_canonical_u32( SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id(), ), ecall_cols.is_commit_deferred_proofs, diff --git a/crates/core/machine/src/cpu/air/memory.rs b/crates/core/machine/src/cpu/air/memory.rs index 876bd0b956..3d7fde3996 100644 --- a/crates/core/machine/src/cpu/air/memory.rs +++ b/crates/core/machine/src/cpu/air/memory.rs @@ -22,14 +22,14 @@ impl CpuChip { &self, opcode_selectors: &OpcodeSelectorCols, ) -> AB::Expr { - opcode_selectors.is_lb - + opcode_selectors.is_lbu - + opcode_selectors.is_lh - + opcode_selectors.is_lhu - + opcode_selectors.is_lw - + opcode_selectors.is_sb - + opcode_selectors.is_sh - + opcode_selectors.is_sw + opcode_selectors.is_lb + + opcode_selectors.is_lbu + + opcode_selectors.is_lh + + opcode_selectors.is_lhu + + opcode_selectors.is_lw + + opcode_selectors.is_sb + + opcode_selectors.is_sh + + opcode_selectors.is_sw } /// Computes whether the opcode is a load instruction. @@ -37,11 +37,11 @@ impl CpuChip { &self, opcode_selectors: &OpcodeSelectorCols, ) -> AB::Expr { - opcode_selectors.is_lb - + opcode_selectors.is_lbu - + opcode_selectors.is_lh - + opcode_selectors.is_lhu - + opcode_selectors.is_lw + opcode_selectors.is_lb + + opcode_selectors.is_lbu + + opcode_selectors.is_lh + + opcode_selectors.is_lhu + + opcode_selectors.is_lw } /// Computes whether the opcode is a store instruction. @@ -169,8 +169,8 @@ impl CpuChip { // matches the value of `local.mem_value_is_neg`. builder.assert_eq( local.mem_value_is_neg, - (local.selectors.is_lb + local.selectors.is_lh) - * memory_columns.most_sig_byte_decomp[7], + (local.selectors.is_lb + local.selectors.is_lh) * + memory_columns.most_sig_byte_decomp[7], ); // When the memory value is negative, use the SUB opcode to compute the signed value of @@ -213,10 +213,10 @@ impl CpuChip { // Compute the offset_is_zero flag. The other offset flags are already contrained by the // method `eval_memory_address_and_access`, which is called in // `eval_memory_address_and_access`. - let offset_is_zero = AB::Expr::one() - - memory_columns.offset_is_one - - memory_columns.offset_is_two - - memory_columns.offset_is_three; + let offset_is_zero = AB::Expr::one() - + memory_columns.offset_is_one - + memory_columns.offset_is_two - + memory_columns.offset_is_three; // Compute the expected stored value for a SB instruction. let one = AB::Expr::one(); @@ -224,14 +224,14 @@ impl CpuChip { let mem_val = *memory_columns.memory_access.value(); let prev_mem_val = *memory_columns.memory_access.prev_value(); let sb_expected_stored_value = Word([ - a_val[0] * offset_is_zero.clone() - + (one.clone() - offset_is_zero.clone()) * prev_mem_val[0], - a_val[0] * memory_columns.offset_is_one - + (one.clone() - memory_columns.offset_is_one) * prev_mem_val[1], - a_val[0] * memory_columns.offset_is_two - + (one.clone() - memory_columns.offset_is_two) * prev_mem_val[2], - a_val[0] * memory_columns.offset_is_three - + (one.clone() - memory_columns.offset_is_three) * prev_mem_val[3], + a_val[0] * offset_is_zero.clone() + + (one.clone() - offset_is_zero.clone()) * prev_mem_val[0], + a_val[0] * memory_columns.offset_is_one + + (one.clone() - memory_columns.offset_is_one) * prev_mem_val[1], + a_val[0] * memory_columns.offset_is_two + + (one.clone() - memory_columns.offset_is_two) * prev_mem_val[2], + a_val[0] * memory_columns.offset_is_three + + (one.clone() - memory_columns.offset_is_three) * prev_mem_val[3], ]); builder .when(local.selectors.is_sb) @@ -249,8 +249,8 @@ impl CpuChip { let a_is_lower_half = offset_is_zero; let a_is_upper_half = memory_columns.offset_is_two; let sh_expected_stored_value = Word([ - a_val[0] * a_is_lower_half.clone() - + (one.clone() - a_is_lower_half.clone()) * prev_mem_val[0], + a_val[0] * a_is_lower_half.clone() + + (one.clone() - a_is_lower_half.clone()) * prev_mem_val[0], a_val[1] * a_is_lower_half.clone() + (one.clone() - a_is_lower_half) * prev_mem_val[1], a_val[0] * a_is_upper_half + (one.clone() - a_is_upper_half) * prev_mem_val[2], a_val[1] * a_is_upper_half + (one.clone() - a_is_upper_half) * prev_mem_val[3], @@ -278,16 +278,16 @@ impl CpuChip { // Compute the offset_is_zero flag. The other offset flags are already contrained by the // method `eval_memory_address_and_access`, which is called in // `eval_memory_address_and_access`. - let offset_is_zero = AB::Expr::one() - - memory_columns.offset_is_one - - memory_columns.offset_is_two - - memory_columns.offset_is_three; + let offset_is_zero = AB::Expr::one() - + memory_columns.offset_is_one - + memory_columns.offset_is_two - + memory_columns.offset_is_three; // Compute the byte value. - let mem_byte = mem_val[0] * offset_is_zero.clone() - + mem_val[1] * memory_columns.offset_is_one - + mem_val[2] * memory_columns.offset_is_two - + mem_val[3] * memory_columns.offset_is_three; + let mem_byte = mem_val[0] * offset_is_zero.clone() + + mem_val[1] * memory_columns.offset_is_one + + mem_val[2] * memory_columns.offset_is_two + + mem_val[3] * memory_columns.offset_is_three; let byte_value = Word::extend_expr::(mem_byte.clone()); // When the instruciton is LB or LBU, just use the lower byte. @@ -346,10 +346,10 @@ impl CpuChip { local: &CpuCols, ) { let is_mem_op = self.is_memory_instruction::(&local.selectors); - let offset_is_zero = AB::Expr::one() - - memory_columns.offset_is_one - - memory_columns.offset_is_two - - memory_columns.offset_is_three; + let offset_is_zero = AB::Expr::one() - + memory_columns.offset_is_one - + memory_columns.offset_is_two - + memory_columns.offset_is_three; let mut filtered_builder = builder.when(is_mem_op); @@ -360,10 +360,10 @@ impl CpuChip { // Assert that only one of the value flags is true filtered_builder.assert_one( - offset_is_zero.clone() - + memory_columns.offset_is_one - + memory_columns.offset_is_two - + memory_columns.offset_is_three, + offset_is_zero.clone() + + memory_columns.offset_is_one + + memory_columns.offset_is_two + + memory_columns.offset_is_three, ); // Assert that the correct value flag is set diff --git a/crates/core/machine/src/cpu/air/mod.rs b/crates/core/machine/src/cpu/air/mod.rs index 880e76e36c..0aa64c4491 100644 --- a/crates/core/machine/src/cpu/air/mod.rs +++ b/crates/core/machine/src/cpu/air/mod.rs @@ -323,11 +323,11 @@ impl CpuChip { let is_halt = self.get_is_halt_syscall::(builder, local); builder.when(local.is_real).assert_eq( local.is_sequential_instr, - AB::Expr::one() - - (is_branch_instruction - + local.selectors.is_jal - + local.selectors.is_jalr - + is_halt), + AB::Expr::one() - + (is_branch_instruction + + local.selectors.is_jal + + local.selectors.is_jalr + + is_halt), ); // Verify that the pc increments by 4 for all instructions except branch, jump and halt diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index f82810f818..9dab9c8d56 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -186,9 +186,9 @@ impl CpuChip { let is_halt = self.populate_ecall(cols, event, nonce_lookup); cols.is_sequential_instr = F::from_bool( - !event.instruction.is_branch_instruction() - && !event.instruction.is_jump_instruction() - && !is_halt, + !event.instruction.is_branch_instruction() && + !event.instruction.is_jump_instruction() && + !is_halt, ); // Assert that the instruction is not a no-op. @@ -255,14 +255,14 @@ impl CpuChip { ) { if !matches!( event.instruction.opcode, - Opcode::LB - | Opcode::LH - | Opcode::LW - | Opcode::LBU - | Opcode::LHU - | Opcode::SB - | Opcode::SH - | Opcode::SW + Opcode::LB | + Opcode::LH | + Opcode::LW | + Opcode::LBU | + Opcode::LHU | + Opcode::SB | + Opcode::SH | + Opcode::SW ) { return; } @@ -656,15 +656,15 @@ impl CpuChip { // Populate `is_commit_deferred_proofs`. ecall_cols.is_commit_deferred_proofs.populate_from_field_element( - syscall_id - - F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()), + syscall_id - + F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()), ); // If the syscall is `COMMIT` or `COMMIT_DEFERRED_PROOFS`, set the index bitmap and // digest word. - if syscall_id == F::from_canonical_u32(SyscallCode::COMMIT.syscall_id()) - || syscall_id - == F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()) + if syscall_id == F::from_canonical_u32(SyscallCode::COMMIT.syscall_id()) || + syscall_id == + F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()) { let digest_idx = cols.op_b_access.value().to_u32() as usize; ecall_cols.index_bitmap[digest_idx] = F::one(); diff --git a/crates/core/machine/src/operations/add4.rs b/crates/core/machine/src/operations/add4.rs index 5fe5ec0fd1..95cdddbe14 100644 --- a/crates/core/machine/src/operations/add4.rs +++ b/crates/core/machine/src/operations/add4.rs @@ -111,10 +111,10 @@ impl Add4Operation { builder_is_real.assert_bool(cols.is_carry_2[i]); builder_is_real.assert_bool(cols.is_carry_3[i]); builder_is_real.assert_eq( - cols.is_carry_0[i] - + cols.is_carry_1[i] - + cols.is_carry_2[i] - + cols.is_carry_3[i], + cols.is_carry_0[i] + + cols.is_carry_1[i] + + cols.is_carry_2[i] + + cols.is_carry_3[i], AB::Expr::one(), ); } @@ -129,9 +129,9 @@ impl Add4Operation { for i in 0..WORD_SIZE { builder_is_real.assert_eq( cols.carry[i], - cols.is_carry_1[i] * one.clone() - + cols.is_carry_2[i] * two - + cols.is_carry_3[i] * three, + cols.is_carry_1[i] * one.clone() + + cols.is_carry_2[i] * two + + cols.is_carry_3[i] * three, ); } } diff --git a/crates/core/machine/src/operations/add5.rs b/crates/core/machine/src/operations/add5.rs index 959d06dd10..7112517eb8 100644 --- a/crates/core/machine/src/operations/add5.rs +++ b/crates/core/machine/src/operations/add5.rs @@ -116,11 +116,11 @@ impl Add5Operation { builder_is_real.assert_bool(cols.is_carry_3[i]); builder_is_real.assert_bool(cols.is_carry_4[i]); builder_is_real.assert_eq( - cols.is_carry_0[i] - + cols.is_carry_1[i] - + cols.is_carry_2[i] - + cols.is_carry_3[i] - + cols.is_carry_4[i], + cols.is_carry_0[i] + + cols.is_carry_1[i] + + cols.is_carry_2[i] + + cols.is_carry_3[i] + + cols.is_carry_4[i], AB::Expr::one(), ); } @@ -136,10 +136,10 @@ impl Add5Operation { for i in 0..WORD_SIZE { builder_is_real.assert_eq( cols.carry[i], - cols.is_carry_1[i] * one.clone() - + cols.is_carry_2[i] * two - + cols.is_carry_3[i] * three - + cols.is_carry_4[i] * four, + cols.is_carry_1[i] * one.clone() + + cols.is_carry_2[i] * two + + cols.is_carry_3[i] * three + + cols.is_carry_4[i] * four, ); } } diff --git a/crates/core/machine/src/operations/field/field_op.rs b/crates/core/machine/src/operations/field/field_op.rs index b2120dad99..e521907eb7 100644 --- a/crates/core/machine/src/operations/field/field_op.rs +++ b/crates/core/machine/src/operations/field/field_op.rs @@ -204,8 +204,8 @@ impl FieldOpCols { let is_mul: AB::Expr = is_mul.into(); let is_div: AB::Expr = is_div.into(); - let p_result = p_res_param.clone() * (is_add.clone() + is_mul.clone()) - + p_a_param.clone() * (is_sub.clone() + is_div.clone()); + let p_result = p_res_param.clone() * (is_add.clone() + is_mul.clone()) + + p_a_param.clone() * (is_sub.clone() + is_div.clone()); let p_add = p_a_param.clone() + p_b.clone(); let p_sub = p_res_param.clone() + p_b.clone(); diff --git a/crates/core/machine/src/riscv/cost.rs b/crates/core/machine/src/riscv/cost.rs index 685e683711..64bd3c1e15 100644 --- a/crates/core/machine/src/riscv/cost.rs +++ b/crates/core/machine/src/riscv/cost.rs @@ -99,15 +99,15 @@ impl CostEstimator for ExecutionReport { total_chips += 1; let bls12381_fp_events = - *self.syscall_counts.get(&SyscallCode::BLS12381_FP_ADD).unwrap_or(&0) - + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_SUB).unwrap_or(&0) - + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_MUL).unwrap_or(&0); + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_SUB).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_MUL).unwrap_or(&0); total_area += (bls12381_fp_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Fp]; total_chips += 1; let bls12381_fp2_addsub_events = - *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_ADD).unwrap_or(&0) - + *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_SUB).unwrap_or(&0); + *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_SUB).unwrap_or(&0); total_area += (bls12381_fp2_addsub_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Fp2AddSub]; total_chips += 1; @@ -118,15 +118,15 @@ impl CostEstimator for ExecutionReport { (bls12381_fp2_mul_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Fp2Mul]; total_chips += 1; - let bn254_fp_events = *self.syscall_counts.get(&SyscallCode::BN254_FP_ADD).unwrap_or(&0) - + *self.syscall_counts.get(&SyscallCode::BN254_FP_SUB).unwrap_or(&0) - + *self.syscall_counts.get(&SyscallCode::BN254_FP_MUL).unwrap_or(&0); + let bn254_fp_events = *self.syscall_counts.get(&SyscallCode::BN254_FP_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BN254_FP_SUB).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BN254_FP_MUL).unwrap_or(&0); total_area += (bn254_fp_events as u64) * costs[&RiscvAirDiscriminants::Bn254Fp]; total_chips += 1; let bn254_fp2_addsub_events = - *self.syscall_counts.get(&SyscallCode::BN254_FP2_ADD).unwrap_or(&0) - + *self.syscall_counts.get(&SyscallCode::BN254_FP2_SUB).unwrap_or(&0); + *self.syscall_counts.get(&SyscallCode::BN254_FP2_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BN254_FP2_SUB).unwrap_or(&0); total_area += (bn254_fp2_addsub_events as u64) * costs[&RiscvAirDiscriminants::Bn254Fp2AddSub]; total_chips += 1; @@ -142,33 +142,33 @@ impl CostEstimator for ExecutionReport { (bls12381_decompress_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Decompress]; total_chips += 1; - let divrem_events = *self.opcode_counts.get(&Opcode::DIV).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::REM).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::DIVU).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::REMU).unwrap_or(&0); + let divrem_events = *self.opcode_counts.get(&Opcode::DIV).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::REM).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::DIVU).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::REMU).unwrap_or(&0); total_area += (divrem_events as u64) * costs[&RiscvAirDiscriminants::DivRem]; total_chips += 1; - let addsub_events = *self.opcode_counts.get(&Opcode::ADD).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::SUB).unwrap_or(&0); + let addsub_events = *self.opcode_counts.get(&Opcode::ADD).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::SUB).unwrap_or(&0); total_area += (addsub_events as u64) * costs[&RiscvAirDiscriminants::Add]; total_chips += 1; - let bitwise_events = *self.opcode_counts.get(&Opcode::AND).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::OR).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::XOR).unwrap_or(&0); + let bitwise_events = *self.opcode_counts.get(&Opcode::AND).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::OR).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::XOR).unwrap_or(&0); total_area += (bitwise_events as u64) * costs[&RiscvAirDiscriminants::Bitwise]; total_chips += 1; - let mul_events = *self.opcode_counts.get(&Opcode::MUL).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::MULH).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::MULHU).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::MULHSU).unwrap_or(&0); + let mul_events = *self.opcode_counts.get(&Opcode::MUL).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::MULH).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::MULHU).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::MULHSU).unwrap_or(&0); total_area += (mul_events as u64) * costs[&RiscvAirDiscriminants::Mul]; total_chips += 1; - let shift_right_events = *self.opcode_counts.get(&Opcode::SRL).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::SRA).unwrap_or(&0); + let shift_right_events = *self.opcode_counts.get(&Opcode::SRL).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::SRA).unwrap_or(&0); total_area += (shift_right_events as u64) * costs[&RiscvAirDiscriminants::ShiftRight]; total_chips += 1; @@ -176,8 +176,8 @@ impl CostEstimator for ExecutionReport { total_area += (shift_left_events as u64) * costs[&RiscvAirDiscriminants::ShiftLeft]; total_chips += 1; - let lt_events = *self.opcode_counts.get(&Opcode::SLT).unwrap_or(&0) - + *self.opcode_counts.get(&Opcode::SLTU).unwrap_or(&0); + let lt_events = *self.opcode_counts.get(&Opcode::SLT).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::SLTU).unwrap_or(&0); total_area += (lt_events as u64) * costs[&RiscvAirDiscriminants::Lt]; total_chips += 1; diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs index a87170afc2..c2b95bb83d 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs @@ -268,9 +268,9 @@ where AB::F::from_canonical_u32(SyscallCode::BLS12381_FP_MUL.syscall_id()), ), }; - let syscall_id_felt = local.is_add * add_syscall_id - + local.is_sub * sub_syscall_id - + local.is_mul * mul_syscall_id; + let syscall_id_felt = local.is_add * add_syscall_id + + local.is_sub * sub_syscall_id + + local.is_mul * mul_syscall_id; builder.receive_syscall( local.shard, diff --git a/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs b/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs index db1a58a7f0..497fec8f44 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs @@ -145,15 +145,15 @@ impl ShaCompressChip { // Assert that the is_compression flag is correct. builder.assert_eq( local.is_compression, - (local.octet_num[1] - + local.octet_num[2] - + local.octet_num[3] - + local.octet_num[4] - + local.octet_num[5] - + local.octet_num[6] - + local.octet_num[7] - + local.octet_num[8]) - * local.is_real, + (local.octet_num[1] + + local.octet_num[2] + + local.octet_num[3] + + local.octet_num[4] + + local.octet_num[5] + + local.octet_num[6] + + local.octet_num[7] + + local.octet_num[8]) * + local.is_real, ); // Assert that the is_finalize flag is correct. @@ -237,10 +237,10 @@ impl ShaCompressChip { // Verify correct mem address for compression phase builder.when(local.is_compression).assert_eq( local.mem_addr, - local.w_ptr - + (((cycle_num - AB::Expr::one()) * AB::Expr::from_canonical_u32(8)) - + cycle_step.clone()) - * AB::Expr::from_canonical_u32(4), + local.w_ptr + + (((cycle_num - AB::Expr::one()) * AB::Expr::from_canonical_u32(8)) + + cycle_step.clone()) * + AB::Expr::from_canonical_u32(4), ); // Verify correct mem address for finalize phase diff --git a/crates/core/machine/src/syscall/precompiles/uint256/air.rs b/crates/core/machine/src/syscall/precompiles/uint256/air.rs index b0e77a6e51..ebd438c6d0 100644 --- a/crates/core/machine/src/syscall/precompiles/uint256/air.rs +++ b/crates/core/machine/src/syscall/precompiles/uint256/air.rs @@ -276,9 +276,9 @@ where coeff_2_256.resize(32, AB::Expr::zero()); coeff_2_256.push(AB::Expr::one()); let modulus_polynomial: Polynomial = modulus_limbs.into(); - let p_modulus: Polynomial = modulus_polynomial - * (AB::Expr::one() - modulus_is_zero.into()) - + Polynomial::from_coefficients(&coeff_2_256) * modulus_is_zero.into(); + let p_modulus: Polynomial = modulus_polynomial * + (AB::Expr::one() - modulus_is_zero.into()) + + Polynomial::from_coefficients(&coeff_2_256) * modulus_is_zero.into(); // Evaluate the uint256 multiplication local.output.eval_with_modulus( diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs index 40d82b9adb..c37189b9a1 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs @@ -283,9 +283,9 @@ impl MachineAir // Write the nonces to the trace. for i in 0..trace.height() { - let cols: &mut WeierstrassAddAssignCols = trace.values[i - * num_weierstrass_add_cols::() - ..(i + 1) * num_weierstrass_add_cols::()] + let cols: &mut WeierstrassAddAssignCols = trace.values[i * + num_weierstrass_add_cols::().. + (i + 1) * num_weierstrass_add_cols::()] .borrow_mut(); cols.nonce = F::from_canonical_usize(i); } diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs index 01fed80a01..31b43409d5 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs @@ -299,8 +299,8 @@ impl MachineAir impl BaseAir for WeierstrassDecompressChip { fn width(&self) -> usize { - num_weierstrass_decompress_cols::() - + match self.sign_rule { + num_weierstrass_decompress_cols::() + + match self.sign_rule { SignChoiceRule::LeastSignificantBit => 0, SignChoiceRule::Lexicographic => { size_of::>() @@ -423,9 +423,8 @@ where // Get the choice columns from the row slice let choice_cols: &LexicographicChoiceCols = (*local_slice) - [weierstrass_cols - ..weierstrass_cols - + size_of::>()] + [weierstrass_cols.. + weierstrass_cols + size_of::>()] .borrow(); // Range check the neg_y value since we are now using a lexicographic comparison. diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs index 16dfe59264..82d9ec4941 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -300,9 +300,9 @@ impl MachineAir // Write the nonces to the trace. for i in 0..trace.height() { - let cols: &mut WeierstrassDoubleAssignCols = trace.values[i - * num_weierstrass_double_cols::() - ..(i + 1) * num_weierstrass_double_cols::()] + let cols: &mut WeierstrassDoubleAssignCols = trace.values[i * + num_weierstrass_double_cols::().. + (i + 1) * num_weierstrass_double_cols::()] .borrow_mut(); cols.nonce = F::from_canonical_usize(i); } diff --git a/crates/curves/src/edwards/mod.rs b/crates/curves/src/edwards/mod.rs index 1344dff6bc..cacd5fb527 100644 --- a/crates/curves/src/edwards/mod.rs +++ b/crates/curves/src/edwards/mod.rs @@ -174,8 +174,8 @@ mod tests { assert_eq!(y_x_base, xy_base); } - let order = BigUint::from(2u32).pow(252) - + BigUint::from(27742317777372353535851937790883648493u128); + let order = BigUint::from(2u32).pow(252) + + BigUint::from(27742317777372353535851937790883648493u128); assert_eq!(base, &base + &(&base * &order)); } } diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index d095b90fb1..e0618183cb 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -201,15 +201,15 @@ impl SP1Prover { return Err(MachineVerificationError::InvalidPublicValues( "last_init_addr_bits != last_finalize_addr_bits_prev", )); - } else if !shard_proof.contains_memory_init() - && public_values.previous_init_addr_bits != public_values.last_init_addr_bits + } else if !shard_proof.contains_memory_init() && + public_values.previous_init_addr_bits != public_values.last_init_addr_bits { return Err(MachineVerificationError::InvalidPublicValues( "previous_init_addr_bits != last_init_addr_bits", )); - } else if !shard_proof.contains_memory_finalize() - && public_values.previous_finalize_addr_bits - != public_values.last_finalize_addr_bits + } else if !shard_proof.contains_memory_finalize() && + public_values.previous_finalize_addr_bits != + public_values.last_finalize_addr_bits { return Err(MachineVerificationError::InvalidPublicValues( "previous_finalize_addr_bits != last_finalize_addr_bits", @@ -243,26 +243,26 @@ impl SP1Prover { for shard_proof in proof.0.iter() { let public_values: &PublicValues, _> = shard_proof.public_values.as_slice().borrow(); - if commited_value_digest_prev != zero_commited_value_digest - && public_values.committed_value_digest != commited_value_digest_prev + if commited_value_digest_prev != zero_commited_value_digest && + public_values.committed_value_digest != commited_value_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "committed_value_digest != commited_value_digest_prev", )); - } else if deferred_proofs_digest_prev != zero_deferred_proofs_digest - && public_values.deferred_proofs_digest != deferred_proofs_digest_prev + } else if deferred_proofs_digest_prev != zero_deferred_proofs_digest && + public_values.deferred_proofs_digest != deferred_proofs_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "deferred_proofs_digest != deferred_proofs_digest_prev", )); - } else if !shard_proof.contains_cpu() - && public_values.committed_value_digest != commited_value_digest_prev + } else if !shard_proof.contains_cpu() && + public_values.committed_value_digest != commited_value_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "committed_value_digest != commited_value_digest_prev", )); - } else if !shard_proof.contains_cpu() - && public_values.deferred_proofs_digest != deferred_proofs_digest_prev + } else if !shard_proof.contains_cpu() && + public_values.deferred_proofs_digest != deferred_proofs_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "deferred_proofs_digest != deferred_proofs_digest_prev", diff --git a/crates/recursion/circuit-v2/src/constraints.rs b/crates/recursion/circuit-v2/src/constraints.rs index 1512d144ae..03a6659c06 100644 --- a/crates/recursion/circuit-v2/src/constraints.rs +++ b/crates/recursion/circuit-v2/src/constraints.rs @@ -140,8 +140,8 @@ where ) }) .unzip::<_, _, Vec<_>, Vec<_>>(); - zs.into_iter().product::>() - * zinvs.into_iter().product::>() + zs.into_iter().product::>() * + zinvs.into_iter().product::>() }) .collect::>>() .into_iter() @@ -190,23 +190,20 @@ where )); } if opening.main.next.len() != chip.width() { - return Err(OpeningShapeError::MainWidthMismatch( - chip.width(), - opening.main.next.len(), - )); + return Err(OpeningShapeError::MainWidthMismatch(chip.width(), opening.main.next.len())); } // Verify that the permutation width matches the expected value for the chip. - if opening.permutation.local.len() - != chip.permutation_width() * >::D + if opening.permutation.local.len() != + chip.permutation_width() * >::D { return Err(OpeningShapeError::PermutationWidthMismatch( chip.permutation_width(), opening.permutation.local.len(), )); } - if opening.permutation.next.len() - != chip.permutation_width() * >::D + if opening.permutation.next.len() != + chip.permutation_width() * >::D { return Err(OpeningShapeError::PermutationWidthMismatch( chip.permutation_width(), diff --git a/crates/recursion/circuit-v2/src/domain.rs b/crates/recursion/circuit-v2/src/domain.rs index 7c16673615..ca7d9eafc2 100644 --- a/crates/recursion/circuit-v2/src/domain.rs +++ b/crates/recursion/circuit-v2/src/domain.rs @@ -50,8 +50,8 @@ where ) -> LagrangeSelectors::F, ::EF>> { let unshifted_point: Ext<_, _> = builder.eval(point * self.shift.inverse()); let z_h_expr = builder - .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) - - C::EF::one(); + .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) - + C::EF::one(); let z_h: Ext<_, _> = builder.eval(z_h_expr); let g = C::F::two_adic_generator(self.log_n); let ginv = g.inverse(); @@ -69,8 +69,8 @@ where point: Ext<::F, ::EF>, ) -> Ext<::F, ::EF> { let unshifted_power = builder.exp_power_of_2_v::>( - point - * C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) + point * + C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) .inverse() .cons(), Usize::Const(self.log_n), diff --git a/crates/recursion/circuit/src/constraints.rs b/crates/recursion/circuit/src/constraints.rs index f2df585d09..e0968de092 100644 --- a/crates/recursion/circuit/src/constraints.rs +++ b/crates/recursion/circuit/src/constraints.rs @@ -104,8 +104,8 @@ where ) }) .unzip::<_, _, Vec<_>, Vec<_>>(); - zs.into_iter().product::>() - * zinvs.into_iter().product::>() + zs.into_iter().product::>() * + zinvs.into_iter().product::>() }) .collect::>>() .into_iter() diff --git a/crates/recursion/circuit/src/domain.rs b/crates/recursion/circuit/src/domain.rs index 52b96536f2..0e9a96becb 100644 --- a/crates/recursion/circuit/src/domain.rs +++ b/crates/recursion/circuit/src/domain.rs @@ -88,8 +88,8 @@ where ) -> LagrangeSelectors::F, ::EF>> { let unshifted_point: Ext<_, _> = builder.eval(point * self.shift.inverse()); let z_h_expr = builder - .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) - - C::EF::one(); + .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) - + C::EF::one(); let z_h: Ext<_, _> = builder.eval(z_h_expr); let ginv = self.geninv(builder); LagrangeSelectors { @@ -106,8 +106,8 @@ where point: Ext<::F, ::EF>, ) -> Ext<::F, ::EF> { let unshifted_power = builder.exp_power_of_2_v::>( - point - * C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) + point * + C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) .inverse() .cons(), Usize::Const(self.log_n), diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 07e7c7caf4..236d809efc 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -564,8 +564,8 @@ where addrs: ExpReverseBitsIo { result: ref addr, .. }, mult, }) => backfill((mult, addr)), - Instruction::HintBits(HintBitsInstr { output_addrs_mults, .. }) - | Instruction::Hint(HintInstr { output_addrs_mults, .. }) => { + Instruction::HintBits(HintBitsInstr { output_addrs_mults, .. }) | + Instruction::Hint(HintInstr { output_addrs_mults, .. }) => { output_addrs_mults .iter_mut() .for_each(|(addr, mult)| backfill((mult, addr))); @@ -590,9 +590,9 @@ where .for_each(|(addr, mult)| backfill((mult, addr))); } // Instructions that do not write to memory. - Instruction::Mem(MemInstr { kind: MemAccessKind::Read, .. }) - | Instruction::CommitPublicValues(_) - | Instruction::Print(_) => (), + Instruction::Mem(MemInstr { kind: MemAccessKind::Read, .. }) | + Instruction::CommitPublicValues(_) | + Instruction::Print(_) => (), } } }); diff --git a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs index db4206cea6..80b32bb079 100644 --- a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs +++ b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs @@ -154,9 +154,9 @@ impl MachineAir for ExpReverseBitsLenCh let cols: &mut ExpReverseBitsLenCols = row.as_mut_slice().borrow_mut(); let prev_accum = accum; - accum = prev_accum - * prev_accum - * if event.exp[i] == F::one() { event.base } else { F::one() }; + accum = prev_accum * + prev_accum * + if event.exp[i] == F::one() { event.base } else { F::one() }; cols.x = event.base; cols.current_bit = event.exp[i]; diff --git a/crates/recursion/core-v2/src/chips/fri_fold.rs b/crates/recursion/core-v2/src/chips/fri_fold.rs index 875fce491b..0bd38ea238 100644 --- a/crates/recursion/core-v2/src/chips/fri_fold.rs +++ b/crates/recursion/core-v2/src/chips/fri_fold.rs @@ -428,10 +428,10 @@ mod tests { let ro_output = (0..i) .map(|i| { let i = i as usize; - ro_input[i].ext::() - + alpha_pow_input[i].ext::() - * (-ps_at_z[i].ext::() + mat_opening[i].ext::()) - / (-z.ext::() + x) + ro_input[i].ext::() + + alpha_pow_input[i].ext::() * + (-ps_at_z[i].ext::() + mat_opening[i].ext::()) / + (-z.ext::() + x) }) .collect::>(); diff --git a/crates/recursion/core-v2/src/chips/mem/variable.rs b/crates/recursion/core-v2/src/chips/mem/variable.rs index 35793de3e7..71d123fd74 100644 --- a/crates/recursion/core-v2/src/chips/mem/variable.rs +++ b/crates/recursion/core-v2/src/chips/mem/variable.rs @@ -62,8 +62,8 @@ impl MachineAir for MemoryChip { .instructions .par_iter() // Using `rayon` here provides a big speedup. .flat_map_iter(|instruction| match instruction { - Instruction::Hint(HintInstr { output_addrs_mults }) - | Instruction::HintBits(HintBitsInstr { + Instruction::Hint(HintInstr { output_addrs_mults }) | + Instruction::HintBits(HintBitsInstr { output_addrs_mults, input_addr: _, // No receive interaction for the hint operation }) => output_addrs_mults.iter().collect(), diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs index 6f00b56906..aa43c889c2 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs @@ -148,8 +148,8 @@ impl Poseidon2WideChip { for r in 0..NUM_INTERNAL_ROUNDS { // Add the round constant. let round = r + NUM_EXTERNAL_ROUNDS / 2; - let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } - + AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); + let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } + + AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); let mut sbox_deg_3 = add_rc.clone() * add_rc.clone() * add_rc.clone(); if let Some(internal_sbox) = local_row.internal_rounds_sbox() { diff --git a/crates/recursion/core/src/air/builder.rs b/crates/recursion/core/src/air/builder.rs index 0794f09bd9..4fe097503b 100644 --- a/crates/recursion/core/src/air/builder.rs +++ b/crates/recursion/core/src/air/builder.rs @@ -123,8 +123,8 @@ pub trait RecursionMemoryAirBuilder: RecursionInteractionAirBuilder { // Verify that value = limb_16 + limb_12 * 2^16. self.when(is_real.clone()).assert_eq( value, - limb_16.clone().into() - + limb_12.clone().into() * Self::Expr::from_canonical_u32(1 << 16), + limb_16.clone().into() + + limb_12.clone().into() * Self::Expr::from_canonical_u32(1 << 16), ); // Send the range checks for the limbs. diff --git a/crates/recursion/core/src/cpu/air/jump.rs b/crates/recursion/core/src/cpu/air/jump.rs index 8dbd002c02..7f14d492ca 100644 --- a/crates/recursion/core/src/cpu/air/jump.rs +++ b/crates/recursion/core/src/cpu/air/jump.rs @@ -26,14 +26,14 @@ impl CpuChip { // Verify the next row's fp. builder.when_first_row().assert_eq(local.fp, F::from_canonical_usize(STACK_SIZE)); let not_jump_instruction = AB::Expr::one() - is_jump_instr.clone(); - let expected_next_fp = local.selectors.is_jal * (local.fp + local.c.value()[0]) - + local.selectors.is_jalr * local.c.value()[0] - + not_jump_instruction * local.fp; + let expected_next_fp = local.selectors.is_jal * (local.fp + local.c.value()[0]) + + local.selectors.is_jalr * local.c.value()[0] + + not_jump_instruction * local.fp; builder.when_transition().when(next.is_real).assert_eq(next.fp, expected_next_fp); // Verify the a operand values. - let expected_a_val = local.selectors.is_jal * local.pc - + local.selectors.is_jalr * (local.pc + AB::Expr::one()); + let expected_a_val = local.selectors.is_jal * local.pc + + local.selectors.is_jalr * (local.pc + AB::Expr::one()); let expected_a_val_block = Block::from(expected_a_val); builder.when(is_jump_instr).assert_block_eq(*local.a.value(), expected_a_val_block); diff --git a/crates/recursion/core/src/cpu/air/mod.rs b/crates/recursion/core/src/cpu/air/mod.rs index 437696a0ca..f1046f71d6 100644 --- a/crates/recursion/core/src/cpu/air/mod.rs +++ b/crates/recursion/core/src/cpu/air/mod.rs @@ -77,18 +77,18 @@ where self.eval_jump(builder, local, next, &mut next_pc); // If the instruction is not a jump or branch instruction, then next pc = pc + 1. - let not_branch_or_jump = one.clone() - - self.is_branch_instruction::(local) - - self.is_jump_instruction::(local); + let not_branch_or_jump = one.clone() - + self.is_branch_instruction::(local) - + self.is_jump_instruction::(local); next_pc += not_branch_or_jump.clone() * (local.pc + one); builder.when_transition().when(next.is_real).assert_eq(next_pc, next.pc); } // Constrain the syscalls. - let send_syscall = local.selectors.is_poseidon - + local.selectors.is_fri_fold - + local.selectors.is_exp_reverse_bits_len; + let send_syscall = local.selectors.is_poseidon + + local.selectors.is_fri_fold + + local.selectors.is_exp_reverse_bits_len; let operands = [ local.clk.into(), @@ -174,10 +174,10 @@ impl CpuChip { where AB: SP1RecursionAirBuilder, { - local.selectors.is_add - + local.selectors.is_sub - + local.selectors.is_mul - + local.selectors.is_div + local.selectors.is_add + + local.selectors.is_sub + + local.selectors.is_mul + + local.selectors.is_div } /// Expr to check for branch instructions. @@ -209,17 +209,17 @@ impl CpuChip { where AB: SP1RecursionAirBuilder, { - local.selectors.is_beq - + local.selectors.is_bne - + local.selectors.is_fri_fold - + local.selectors.is_poseidon - + local.selectors.is_store - + local.selectors.is_noop - + local.selectors.is_ext_to_felt - + local.selectors.is_commit - + local.selectors.is_trap - + local.selectors.is_halt - + local.selectors.is_exp_reverse_bits_len + local.selectors.is_beq + + local.selectors.is_bne + + local.selectors.is_fri_fold + + local.selectors.is_poseidon + + local.selectors.is_store + + local.selectors.is_noop + + local.selectors.is_ext_to_felt + + local.selectors.is_commit + + local.selectors.is_trap + + local.selectors.is_halt + + local.selectors.is_exp_reverse_bits_len } /// Expr to check for instructions that are commit instructions. diff --git a/crates/recursion/core/src/cpu/columns/opcode.rs b/crates/recursion/core/src/cpu/columns/opcode.rs index 9bc733b83e..657dfd2a2b 100644 --- a/crates/recursion/core/src/cpu/columns/opcode.rs +++ b/crates/recursion/core/src/cpu/columns/opcode.rs @@ -87,12 +87,12 @@ impl OpcodeSelectorCols { Opcode::Commit => self.is_commit = F::one(), Opcode::HintExt2Felt => self.is_ext_to_felt = F::one(), - Opcode::Hint - | Opcode::HintBits - | Opcode::PrintF - | Opcode::PrintE - | Opcode::RegisterPublicValue - | Opcode::CycleTracker => { + Opcode::Hint | + Opcode::HintBits | + Opcode::PrintF | + Opcode::PrintE | + Opcode::RegisterPublicValue | + Opcode::CycleTracker => { self.is_noop = F::one(); } diff --git a/crates/recursion/core/src/exp_reverse_bits/mod.rs b/crates/recursion/core/src/exp_reverse_bits/mod.rs index 06c9de7d98..1356b65ab0 100644 --- a/crates/recursion/core/src/exp_reverse_bits/mod.rs +++ b/crates/recursion/core/src/exp_reverse_bits/mod.rs @@ -378,8 +378,8 @@ impl ExpReverseBitsLenChip { // Constrain that the x_mem_access_flag is true when `is_first` or `is_last`. builder.when(local.is_real).assert_eq( local.x_mem_access_flag, - local.is_first.result + local.is_last.result - - local.is_first.result * local.is_last.result, + local.is_first.result + local.is_last.result - + local.is_first.result * local.is_last.result, ); // Make sure that x is only accessed when `is_real` is 1. diff --git a/crates/recursion/core/src/multi/mod.rs b/crates/recursion/core/src/multi/mod.rs index 6c4cc566db..9f9bcc88d9 100644 --- a/crates/recursion/core/src/multi/mod.rs +++ b/crates/recursion/core/src/multi/mod.rs @@ -233,13 +233,13 @@ where let next_fri_fold_cols = Self::fri_fold(&next); sub_builder.assert_eq( - local_multi_cols.is_fri_fold - * FriFoldChip::::do_memory_access::(&local_fri_fold_cols), + local_multi_cols.is_fri_fold * + FriFoldChip::::do_memory_access::(&local_fri_fold_cols), local_multi_cols.fri_fold_memory_access, ); sub_builder.assert_eq( - local_multi_cols.is_fri_fold - * FriFoldChip::::do_receive_table::(&local_fri_fold_cols), + local_multi_cols.is_fri_fold * + FriFoldChip::::do_receive_table::(&local_fri_fold_cols), local_multi_cols.fri_fold_receive_table, ); diff --git a/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs b/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs index 6cd28028c1..32f1efde97 100644 --- a/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs +++ b/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs @@ -29,12 +29,12 @@ impl Poseidon2WideChip { let local_control_flow = local_row.control_flow(); let next_control_flow = next_row.control_flow(); - let local_is_real = local_control_flow.is_compress - + local_control_flow.is_absorb - + local_control_flow.is_finalize; - let next_is_real = next_control_flow.is_compress - + next_control_flow.is_absorb - + next_control_flow.is_finalize; + let local_is_real = local_control_flow.is_compress + + local_control_flow.is_absorb + + local_control_flow.is_finalize; + let next_is_real = next_control_flow.is_compress + + next_control_flow.is_absorb + + next_control_flow.is_finalize; builder.assert_bool(local_control_flow.is_compress); builder.assert_bool(local_control_flow.is_compress_output); @@ -165,8 +165,8 @@ impl Poseidon2WideChip { { builder.assert_eq( local_control_flow.is_compress_output, - local_control_flow.is_compress - * (AB::Expr::one() - local_control_flow.is_syscall_row), + local_control_flow.is_compress * + (AB::Expr::one() - local_control_flow.is_syscall_row), ); let mut transition_builder = builder.when_transition(); @@ -179,8 +179,8 @@ impl Poseidon2WideChip { // When we are at a compress output row, then ensure next row is either not real or is a // compress syscall row. transition_builder.when(local_control_flow.is_compress_output).assert_one( - (AB::Expr::one() - next_is_real.clone()) - + next_control_flow.is_compress * next_control_flow.is_syscall_row, + (AB::Expr::one() - next_is_real.clone()) + + next_control_flow.is_compress * next_control_flow.is_syscall_row, ); } @@ -226,8 +226,8 @@ impl Poseidon2WideChip { let mut absorb_builder = builder.when(local_control_flow.is_absorb); absorb_builder.assert_eq( - local_hash_workspace.hash_num * AB::Expr::from_canonical_u32(1 << 12) - + local_hash_workspace.absorb_num, + local_hash_workspace.hash_num * AB::Expr::from_canonical_u32(1 << 12) + + local_hash_workspace.absorb_num, local_syscall_params.absorb().hash_and_absorb_num, ); builder.send_range_check( @@ -248,13 +248,13 @@ impl Poseidon2WideChip { absorb_builder.assert_eq( local_hash_workspace.is_syscall_not_last_row, - local_control_flow.is_syscall_row - * (AB::Expr::one() - local_hash_workspace.is_last_row::()), + local_control_flow.is_syscall_row * + (AB::Expr::one() - local_hash_workspace.is_last_row::()), ); absorb_builder.assert_eq( local_hash_workspace.not_syscall_not_last_row, - (AB::Expr::one() - local_control_flow.is_syscall_row) - * (AB::Expr::one() - local_hash_workspace.is_last_row::()), + (AB::Expr::one() - local_control_flow.is_syscall_row) * + (AB::Expr::one() - local_hash_workspace.is_last_row::()), ); absorb_builder.assert_eq( local_hash_workspace.is_syscall_is_last_row, @@ -262,8 +262,8 @@ impl Poseidon2WideChip { ); absorb_builder.assert_eq( local_hash_workspace.not_syscall_is_last_row, - (AB::Expr::one() - local_control_flow.is_syscall_row) - * local_hash_workspace.is_last_row::(), + (AB::Expr::one() - local_control_flow.is_syscall_row) * + local_hash_workspace.is_last_row::(), ); absorb_builder.assert_eq( local_hash_workspace.is_last_row_ending_cursor_is_seven, @@ -271,14 +271,14 @@ impl Poseidon2WideChip { ); absorb_builder.assert_eq( local_hash_workspace.is_last_row_ending_cursor_not_seven, - local_hash_workspace.is_last_row::() - * (AB::Expr::one() - last_row_ending_cursor_is_seven), + local_hash_workspace.is_last_row::() * + (AB::Expr::one() - last_row_ending_cursor_is_seven), ); builder.assert_eq( local_control_flow.is_absorb_not_last_row, - local_control_flow.is_absorb - * (AB::Expr::one() - local_hash_workspace.is_last_row::()), + local_control_flow.is_absorb * + (AB::Expr::one() - local_hash_workspace.is_last_row::()), ); builder.assert_eq( local_control_flow.is_absorb_last_row, @@ -287,8 +287,8 @@ impl Poseidon2WideChip { builder.assert_eq( local_control_flow.is_absorb_no_perm, - local_control_flow.is_absorb - * (AB::Expr::one() - local_hash_workspace.do_perm::()), + local_control_flow.is_absorb * + (AB::Expr::one() - local_hash_workspace.do_perm::()), ); } @@ -302,10 +302,10 @@ impl Poseidon2WideChip { // `last_row_ending_cursor` is inclusive of the last element, // while state_cursor + syscall input_len is not. absorb_builder.when(local_control_flow.is_syscall_row).assert_eq( - local_hash_workspace.state_cursor + local_syscall_params.absorb().input_len - - AB::Expr::one(), - local_hash_workspace.num_remaining_rows * AB::Expr::from_canonical_usize(RATE) - + local_hash_workspace.last_row_ending_cursor, + local_hash_workspace.state_cursor + local_syscall_params.absorb().input_len - + AB::Expr::one(), + local_hash_workspace.num_remaining_rows * AB::Expr::from_canonical_usize(RATE) + + local_hash_workspace.last_row_ending_cursor, ); // Range check that last_row_ending_cursor is between [0, 7]. diff --git a/crates/recursion/core/src/poseidon2_wide/air/permutation.rs b/crates/recursion/core/src/poseidon2_wide/air/permutation.rs index 673a5c50dc..0176e3eebc 100644 --- a/crates/recursion/core/src/poseidon2_wide/air/permutation.rs +++ b/crates/recursion/core/src/poseidon2_wide/air/permutation.rs @@ -50,9 +50,9 @@ impl Poseidon2WideChip { (compress_input, absorb_input, finalize_input) }; - control_flow.is_compress * compress_input - + control_flow.is_absorb * absorb_input - + control_flow.is_finalize * finalize_input + control_flow.is_compress * compress_input + + control_flow.is_absorb * absorb_input + + control_flow.is_finalize * finalize_input }); // Apply the initial round. @@ -140,8 +140,8 @@ impl Poseidon2WideChip { for r in 0..NUM_INTERNAL_ROUNDS { // Add the round constant. let round = r + NUM_EXTERNAL_ROUNDS / 2; - let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } - + AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); + let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } + + AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); let mut sbox_deg_3 = add_rc.clone() * add_rc.clone() * add_rc.clone(); if let Some(internal_sbox) = perm_cols.internal_rounds_sbox() { diff --git a/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs b/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs index a208065f21..b4a6e9fcc0 100644 --- a/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs +++ b/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs @@ -107,22 +107,23 @@ impl AbsorbWorkspace { where T: Into, { - self.is_syscall_not_last_row.into() - + self.not_syscall_not_last_row.into() - + self.is_last_row_ending_cursor_is_seven.into() + self.is_syscall_not_last_row.into() + + self.not_syscall_not_last_row.into() + + self.is_last_row_ending_cursor_is_seven.into() } pub(crate) fn num_consumed(&self) -> AB::Expr where T: Into, { - self.is_syscall_not_last_row.into() - * (AB::Expr::from_canonical_usize(RATE) - self.state_cursor.into()) - + self.is_syscall_is_last_row.into() - * (self.last_row_ending_cursor.into() - self.state_cursor.into() + AB::Expr::one()) - + self.not_syscall_not_last_row.into() * AB::Expr::from_canonical_usize(RATE) - + self.not_syscall_is_last_row.into() - * (self.last_row_ending_cursor.into() + AB::Expr::one()) + self.is_syscall_not_last_row.into() * + (AB::Expr::from_canonical_usize(RATE) - self.state_cursor.into()) + + self.is_syscall_is_last_row.into() * + (self.last_row_ending_cursor.into() - self.state_cursor.into() + + AB::Expr::one()) + + self.not_syscall_not_last_row.into() * AB::Expr::from_canonical_usize(RATE) + + self.not_syscall_is_last_row.into() * + (self.last_row_ending_cursor.into() + AB::Expr::one()) } } diff --git a/crates/recursion/core/src/poseidon2_wide/trace.rs b/crates/recursion/core/src/poseidon2_wide/trace.rs index db4fa9b3dd..ae6db5f84e 100644 --- a/crates/recursion/core/src/poseidon2_wide/trace.rs +++ b/crates/recursion/core/src/poseidon2_wide/trace.rs @@ -300,10 +300,10 @@ impl Poseidon2WideChip { // the syscall row. For absorb calls that are only one row, // last_row_num_consumed = absorb_event.input_len. if is_syscall_row { - last_row_ending_cursor = (absorb_iter.state_cursor - + absorb_event.input_len.as_canonical_u32() as usize - - 1) - % RATE; + last_row_ending_cursor = (absorb_iter.state_cursor + + absorb_event.input_len.as_canonical_u32() as usize - + 1) % + RATE; } absorb_workspace.last_row_ending_cursor = diff --git a/crates/recursion/core/src/runtime/mod.rs b/crates/recursion/core/src/runtime/mod.rs index 045a6557be..00ba600028 100644 --- a/crates/recursion/core/src/runtime/mod.rs +++ b/crates/recursion/core/src/runtime/mod.rs @@ -986,9 +986,9 @@ where let current_x_val = x_record.value[0]; let prev_accum = accum; - accum = prev_accum - * prev_accum - * if current_bit == F::one() { current_x_val } else { F::one() }; + accum = prev_accum * + prev_accum * + if current_bit == F::one() { current_x_val } else { F::one() }; // On the last iteration, write accum to the address pointed to in `base`. if m == len - F::one() { @@ -1041,9 +1041,9 @@ where self.timestamp += 1; self.access = CpuRecord::default(); - if self.timestamp >= early_exit_ts - || instruction.opcode == Opcode::HALT - || instruction.opcode == Opcode::TRAP + if self.timestamp >= early_exit_ts || + instruction.opcode == Opcode::HALT || + instruction.opcode == Opcode::TRAP { break; } diff --git a/crates/recursion/program/src/constraints.rs b/crates/recursion/program/src/constraints.rs index 3c92440992..a279a0c5a3 100644 --- a/crates/recursion/program/src/constraints.rs +++ b/crates/recursion/program/src/constraints.rs @@ -92,8 +92,8 @@ where .filter(|(j, _)| *j != i) .map(|(_, other_domain)| { let first_point: Ext<_, _> = builder.eval(domain.first_point()); - other_domain.zp_at_point(builder, zeta) - * other_domain.zp_at_point(builder, first_point).inverse() + other_domain.zp_at_point(builder, zeta) * + other_domain.zp_at_point(builder, first_point).inverse() }) .product::>() }) diff --git a/crates/recursion/program/src/fri/domain.rs b/crates/recursion/program/src/fri/domain.rs index bb05f2a7cc..7a6f46b478 100644 --- a/crates/recursion/program/src/fri/domain.rs +++ b/crates/recursion/program/src/fri/domain.rs @@ -67,8 +67,8 @@ where ) -> LagrangeSelectors::F, ::EF>> { let unshifted_point: Ext<_, _> = builder.eval(point * self.shift.inverse()); let z_h_expr = builder - .exp_power_of_2_v::>(unshifted_point, Usize::Var(self.log_n)) - - C::EF::one(); + .exp_power_of_2_v::>(unshifted_point, Usize::Var(self.log_n)) - + C::EF::one(); let z_h: Ext<_, _> = builder.eval(z_h_expr); LagrangeSelectors { diff --git a/crates/stark/src/air/polynomial.rs b/crates/stark/src/air/polynomial.rs index 40f5fdbe84..6e08ba2227 100644 --- a/crates/stark/src/air/polynomial.rs +++ b/crates/stark/src/air/polynomial.rs @@ -246,9 +246,9 @@ impl PartialEq> for Polynomial { (other, self) }; for i in 0..longer.coefficients.len() { - if (i < shorter.coefficients.len() - && shorter.coefficients[i] != longer.coefficients[i]) - || (i >= shorter.coefficients.len() && longer.coefficients[i] != T::zero()) + if (i < shorter.coefficients.len() && + shorter.coefficients[i] != longer.coefficients[i]) || + (i >= shorter.coefficients.len() && longer.coefficients[i] != T::zero()) { return false; } diff --git a/crates/stark/src/machine.rs b/crates/stark/src/machine.rs index 4f983b7e1f..73ff94d2f6 100644 --- a/crates/stark/src/machine.rs +++ b/crates/stark/src/machine.rs @@ -375,8 +375,8 @@ impl>> StarkMachine { for i in 0..chips.len() { let trace_width = traces[i].0.width(); let pre_width = traces[i].1.map_or(0, p3_matrix::Matrix::width); - let permutation_width = permutation_traces[i].width() - * >::D; + let permutation_width = permutation_traces[i].width() * + >::D; let total_width = trace_width + pre_width + permutation_width; tracing::debug!( "{:<11} | Main Cols = {:<5} | Pre Cols = {:<5} | Perm Cols = {:<5} | Rows = {:<10} | Cells = {:<10}", diff --git a/crates/stark/src/permutation.rs b/crates/stark/src/permutation.rs index 583cb80641..79322cb279 100644 --- a/crates/stark/src/permutation.rs +++ b/crates/stark/src/permutation.rs @@ -211,8 +211,8 @@ pub fn eval_permutation_constraints( let mut rlc = alpha.clone(); let mut betas = beta.powers(); - rlc += betas.next().unwrap() - * AB::ExprEF::from_canonical_usize(interaction.argument_index()); + rlc += betas.next().unwrap() * + AB::ExprEF::from_canonical_usize(interaction.argument_index()); for (field, beta) in interaction.values.iter().zip(betas.clone()) { let elem = field.apply::(&preprocessed_local, main_local); rlc += beta * elem; @@ -223,8 +223,8 @@ pub fn eval_permutation_constraints( multiplicities.push( interaction .multiplicity - .apply::(&preprocessed_local, main_local) - * send_factor, + .apply::(&preprocessed_local, main_local) * + send_factor, ); } diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index d3839b3f57..2cd76804c6 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -282,9 +282,9 @@ where let trace_width = traces[i].width(); let prep_width = prep_traces[i].map_or(0, |x| x.width()); let permutation_width = permutation_traces[i].width(); - let total_width = trace_width - + prep_width - + permutation_width * >::D; + let total_width = trace_width + + prep_width + + permutation_width * >::D; tracing::debug!( "{:<15} | Main Cols = {:<5} | Pre Cols = {:<5} | Perm Cols = {:<5} | Rows = {:<5} | Cells = {:<10}", chips[i].name(), diff --git a/crates/stark/src/verifier.rs b/crates/stark/src/verifier.rs index 43bbf61798..2b6e5b8079 100644 --- a/crates/stark/src/verifier.rs +++ b/crates/stark/src/verifier.rs @@ -205,10 +205,7 @@ impl>> Verifier { )); } if opening.main.next.len() != chip.width() { - return Err(OpeningShapeError::MainWidthMismatch( - chip.width(), - opening.main.next.len(), - )); + return Err(OpeningShapeError::MainWidthMismatch(chip.width(), opening.main.next.len())); } // Verify that the permutation width matches the expected value for the chip. @@ -347,8 +344,8 @@ impl>> Verifier { .enumerate() .filter(|(j, _)| *j != i) .map(|(_, other_domain)| { - other_domain.zp_at_point(zeta) - * other_domain.zp_at_point(domain.first_point()).inverse() + other_domain.zp_at_point(zeta) * + other_domain.zp_at_point(domain.first_point()).inverse() }) .product::() }) diff --git a/rustfmt.toml b/rustfmt.toml index 66b2930ca9..68c3c93033 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -8,4 +8,4 @@ trailing_comma = "Vertical" trailing_semicolon = false use_field_init_shorthand = true format_code_in_doc_comments = true -doc_comment_code_block_width = 100 \ No newline at end of file +doc_comment_code_block_width = 100 From 8d78fe813a6934400bb49564efe9b29972526a8f Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 15:14:53 -0700 Subject: [PATCH 092/268] fix issues --- crates/prover/scripts/build_groth16_bn254.rs | 32 +++++++++----------- crates/prover/scripts/build_plonk_bn254.rs | 32 +++++++++----------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/crates/prover/scripts/build_groth16_bn254.rs b/crates/prover/scripts/build_groth16_bn254.rs index aaa7e1eb15..e7b5e1e61f 100644 --- a/crates/prover/scripts/build_groth16_bn254.rs +++ b/crates/prover/scripts/build_groth16_bn254.rs @@ -1,20 +1,18 @@ -// use std::path::PathBuf; +use std::path::PathBuf; -// use clap::Parser; -// use sp1_core_machine::utils::setup_logger; -// use sp1_prover::build::build_groth16_bn254_artifacts_with_dummy; +use clap::Parser; +use sp1_core_machine::utils::setup_logger; +use sp1_prover::build::build_groth16_bn254_artifacts_with_dummy; -// #[derive(Parser, Debug)] -// #[clap(author, version, about, long_about = None)] -// struct Args { -// #[clap(short, long)] -// build_dir: PathBuf, -// } +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Args { + #[clap(short, long)] + build_dir: PathBuf, +} -// pub fn main() { -// setup_logger(); -// let args = Args::parse(); -// build_groth16_bn254_artifacts_with_dummy(args.build_dir); -// } - -pub fn main() {} +pub fn main() { + setup_logger(); + let args = Args::parse(); + build_groth16_bn254_artifacts_with_dummy(args.build_dir); +} diff --git a/crates/prover/scripts/build_plonk_bn254.rs b/crates/prover/scripts/build_plonk_bn254.rs index 4d2143cd26..17d1f9ba19 100644 --- a/crates/prover/scripts/build_plonk_bn254.rs +++ b/crates/prover/scripts/build_plonk_bn254.rs @@ -1,20 +1,18 @@ -// use std::path::PathBuf; +use std::path::PathBuf; -// use clap::Parser; -// use sp1_core_machine::utils::setup_logger; -// use sp1_prover::build::build_plonk_bn254_artifacts_with_dummy; +use clap::Parser; +use sp1_core_machine::utils::setup_logger; +use sp1_prover::build::build_plonk_bn254_artifacts_with_dummy; -// #[derive(Parser, Debug)] -// #[clap(author, version, about, long_about = None)] -// struct Args { -// #[clap(short, long)] -// build_dir: PathBuf, -// } +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Args { + #[clap(short, long)] + build_dir: PathBuf, +} -// pub fn main() { -// setup_logger(); -// let args = Args::parse(); -// build_plonk_bn254_artifacts_with_dummy(args.build_dir); -// } - -pub fn main() {} +pub fn main() { + setup_logger(); + let args = Args::parse(); + build_plonk_bn254_artifacts_with_dummy(args.build_dir); +} From 8ad6f9d8421f230ebe209ac7930fbf1e01202b55 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Thu, 22 Aug 2024 19:24:24 -0700 Subject: [PATCH 093/268] fix: merge conflict --- crates/core/machine/src/utils/prove.rs | 13 +++---- crates/stark/src/prover.rs | 47 +++++++++++++++++++++++--- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 45ea3c5d62..dcea0b3404 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -14,6 +14,7 @@ use p3_field::AbstractField; use p3_maybe_rayon::prelude::*; use serde::{de::DeserializeOwned, Serialize}; use size::Size; +use sp1_stark::MachineProvingKey; use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, MachineVerificationError}; use std::thread::ScopedJoinHandle; use thiserror::Error; @@ -113,7 +114,7 @@ where pub fn prove_with_context>>( prover: &P, - pk: &StarkProvingKey, + pk: &P::DeviceProvingKey, program: Program, stdin: &SP1Stdin, opts: SP1CoreOpts, @@ -323,8 +324,8 @@ where // Create the challenger and observe the verifying key. let mut challenger = prover.config().challenger(); - challenger.observe(pk.commit.clone()); - challenger.observe(pk.pc_start); + challenger.observe(pk.commit()); + challenger.observe(pk.pc_start()); for _ in 0..7 { challenger.observe(Val::::zero()); } @@ -575,7 +576,7 @@ where { let all_records = all_records_rx.iter().flatten().collect::>(); let mut challenger = prover.machine().config().challenger(); - prover.machine().debug_constraints(pk, all_records, &mut challenger); + prover.machine().debug_constraints(&pk.host(), all_records, &mut challenger); } Ok((proof, public_values_stream, cycles)) @@ -641,7 +642,7 @@ pub fn run_test_core>>( pub fn run_test_machine_with_prover>( records: Vec, machine: StarkMachine, - pk: StarkProvingKey, + pk: P::DeviceProvingKey, vk: StarkVerifyingKey, ) -> Result, MachineVerificationError> where @@ -662,7 +663,7 @@ where let prove_span = tracing::debug_span!("prove").entered(); #[cfg(feature = "debug")] - prover.machine().debug_constraints(&pk, records.clone(), &mut challenger.clone()); + prover.machine().debug_constraints(&pk.host(), records.clone(), &mut challenger.clone()); let proof = prover.prove(&pk, records, &mut challenger, SP1CoreOpts::default()).unwrap(); prove_span.exit(); diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index d3839b3f57..18bc7a11eb 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -32,6 +32,9 @@ pub trait MachineProver>: /// The type used to store the polynomial commitment schemes data. type DeviceProverData; + /// The type used to store the proving key. + type DeviceProvingKey: MachineProvingKey; + /// The type used for error handling. type Error: Error + Send + Sync; @@ -42,9 +45,7 @@ pub trait MachineProver>: fn machine(&self) -> &StarkMachine; /// Setup the preprocessed data into a proving and verifying key. - fn setup(&self, program: &A::Program) -> (StarkProvingKey, StarkVerifyingKey) { - self.machine().setup(program) - } + fn setup(&self, program: &A::Program) -> (Self::DeviceProvingKey, StarkVerifyingKey); /// Generate the main traces. fn generate_traces(&self, record: &A::Record) -> Vec<(String, RowMajorMatrix>)> { @@ -96,7 +97,7 @@ pub trait MachineProver>: /// Compute the openings of the traces. fn open( &self, - pk: &StarkProvingKey, + pk: &Self::DeviceProvingKey, data: ShardMainData, challenger: &mut SC::Challenger, ) -> Result, Self::Error>; @@ -104,7 +105,7 @@ pub trait MachineProver>: /// Generate a proof for the given records. fn prove( &self, - pk: &StarkProvingKey, + pk: &Self::DeviceProvingKey, records: Vec, challenger: &mut SC::Challenger, opts: ::Config, @@ -148,6 +149,18 @@ pub trait MachineProver>: } } +/// A proving key for any [`MachineAir`] that is agnostic to hardware. +pub trait MachineProvingKey: Send + Sync { + /// The main commitment. + fn commit(&self) -> Com; + + /// The start pc. + fn pc_start(&self) -> Val; + + /// The proving key on the host. + fn host(&self) -> StarkProvingKey; +} + /// A prover implementation based on x86 and ARM CPUs. pub struct CpuProver { machine: StarkMachine, @@ -173,6 +186,7 @@ where { type DeviceMatrix = RowMajorMatrix>; type DeviceProverData = PcsProverData; + type DeviceProvingKey = StarkProvingKey; type Error = CpuProverError; fn new(machine: StarkMachine) -> Self { @@ -183,6 +197,10 @@ where &self.machine } + fn setup(&self, program: &A::Program) -> (Self::DeviceProvingKey, StarkVerifyingKey) { + self.machine().setup(program) + } + fn commit( &self, record: A::Record, @@ -553,6 +571,25 @@ where } } +impl MachineProvingKey for StarkProvingKey +where + SC: 'static + StarkGenericConfig + Send + Sync, + PcsProverData: Send + Sync + Serialize + DeserializeOwned, + Com: Send + Sync, +{ + fn commit(&self) -> Com { + self.commit.clone() + } + + fn pc_start(&self) -> Val { + self.pc_start + } + + fn host(&self) -> StarkProvingKey { + self.clone() + } +} + impl Display for CpuProverError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "DefaultProverError") From 459fae4a70f0f11ae61e223ee25797d81898a6be Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 16:13:16 -0700 Subject: [PATCH 094/268] merge conflict --- crates/build/src/command/local.rs | 2 +- crates/core/executor/src/hook.rs | 2 +- crates/core/machine/src/utils/prove.rs | 6 +++--- crates/prover/src/lib.rs | 2 +- crates/recursion/circuit-v2/src/utils.rs | 5 +++-- crates/recursion/core/src/range_check/mod.rs | 3 +-- crates/recursion/program/src/machine/deferred.rs | 2 +- crates/stark/src/prover.rs | 6 +++--- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/crates/build/src/command/local.rs b/crates/build/src/command/local.rs index 47e129fd6c..313aaf368a 100644 --- a/crates/build/src/command/local.rs +++ b/crates/build/src/command/local.rs @@ -42,6 +42,6 @@ pub(crate) fn create_local_command( .env("CARGO_ENCODED_RUSTFLAGS", get_rust_compiler_flags()) .env_remove("RUSTC") .env("CARGO_TARGET_DIR", program_metadata.target_directory.join(HELPER_TARGET_SUBDIR)) - .args(&get_program_build_args(args)); + .args(get_program_build_args(args)); command } diff --git a/crates/core/executor/src/hook.rs b/crates/core/executor/src/hook.rs index d04bd92231..3e54eca71c 100644 --- a/crates/core/executor/src/hook.rs +++ b/crates/core/executor/src/hook.rs @@ -108,7 +108,7 @@ pub struct HookEnv<'a, 'b: 'a> { /// * `env` - The environment in which the hook is invoked. /// * `buf` - The buffer containing the signature and message hash. /// - The signature is 65 bytes, the first 64 bytes are the signature and the last byte is the -/// recovery ID. +/// recovery ID. /// - The message hash is 32 bytes. /// /// The result is returned as a pair of bytes, where the first 32 bytes are the X coordinate diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 76f5409b69..bd23c4fec0 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -640,8 +640,8 @@ pub fn run_test_core>>( #[allow(unused_variables)] pub fn run_test_machine_with_prover>( + prover: &P, records: Vec, - machine: StarkMachine, pk: P::DeviceProvingKey, vk: StarkVerifyingKey, ) -> Result, MachineVerificationError> @@ -658,7 +658,6 @@ where PcsProverData: Send + Sync + Serialize + DeserializeOwned, OpeningProof: Send + Sync, { - let prover = P::new(machine); let mut challenger = prover.config().challenger(); let prove_span = tracing::debug_span!("prove").entered(); @@ -696,7 +695,8 @@ where PcsProverData: Send + Sync + Serialize + DeserializeOwned, OpeningProof: Send + Sync, { - run_test_machine_with_prover::>(records, machine, pk, vk) + let prover = CpuProver::new(machine); + run_test_machine_with_prover::>(&prover, records, pk, vk) } fn trace_checkpoint( diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index efbce423b8..23bfef8109 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -643,7 +643,7 @@ impl SP1Prover { // Observe the proving key. let mut challenger = self.compress_prover.config().challenger(); tracing::debug_span!("observe proving key").in_scope(|| { - pk.observe_into(&mut challenger); + vk.observe_into(&mut challenger); }); #[cfg(feature = "debug")] diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index e03d978898..3967f24fef 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -140,8 +140,9 @@ pub(crate) mod tests { // Run with the poseidon2 wide chip. let proof_wide_span = tracing::debug_span!("Run test with wide machine").entered(); let wide_machine = RecursionAir::<_, 3, 0>::compress_machine(SC::default()); - let (pk, vk) = wide_machine.setup(&program); - let result = run_test_machine_with_prover::<_, _, P>(records.clone(), wide_machine, pk, vk); + let prover = P::new(wide_machine); + let (pk, vk) = prover.setup(&program); + let result = run_test_machine_with_prover(&prover, records.clone(), pk, vk); proof_wide_span.exit(); if let Err(e) = result { diff --git a/crates/recursion/core/src/range_check/mod.rs b/crates/recursion/core/src/range_check/mod.rs index f94ccbdc10..b4a2821790 100644 --- a/crates/recursion/core/src/range_check/mod.rs +++ b/crates/recursion/core/src/range_check/mod.rs @@ -33,8 +33,7 @@ impl RangeCheckChip { /// This function returns a pair `(trace, map)`, where: /// - `trace` is a matrix containing all possible range check values. /// - `map` is a map from a range check lookup to the value's corresponding row it appears in - /// the table and - /// the index of the result in the array of multiplicities. + /// the table and the index of the result in the array of multiplicities. pub fn trace_and_map() -> (RowMajorMatrix, BTreeMap) { // A map from a byte lookup to its corresponding row in the table and index in the array of // multiplicities. diff --git a/crates/recursion/program/src/machine/deferred.rs b/crates/recursion/program/src/machine/deferred.rs index ef0b7d4538..eb7e7f6937 100644 --- a/crates/recursion/program/src/machine/deferred.rs +++ b/crates/recursion/program/src/machine/deferred.rs @@ -130,7 +130,7 @@ where /// verifier: /// - Asserts that each of these proofs is valid as a `compress` proof. /// - Asserts that each of these proofs is complete by checking the `is_complete` flag in the - /// proof's public values. + /// proof's public values. /// - Aggregates the proof information into the accumulated deferred digest. pub fn verify( builder: &mut Builder, diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index fb34d875ad..18bc7a11eb 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -300,9 +300,9 @@ where let trace_width = traces[i].width(); let prep_width = prep_traces[i].map_or(0, |x| x.width()); let permutation_width = permutation_traces[i].width(); - let total_width = trace_width + - prep_width + - permutation_width * >::D; + let total_width = trace_width + + prep_width + + permutation_width * >::D; tracing::debug!( "{:<15} | Main Cols = {:<5} | Pre Cols = {:<5} | Perm Cols = {:<5} | Rows = {:<5} | Cells = {:<10}", chips[i].name(), From 3d3e15a50295b625568c1b9df158ff0b8f57cf46 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 16:15:59 -0700 Subject: [PATCH 095/268] fix --- crates/core/machine/src/utils/prove.rs | 6 +++--- crates/prover/src/lib.rs | 28 +++++++++++++++----------- crates/stark/src/prover.rs | 11 ++++++++-- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index dcea0b3404..a30d5ff15b 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -361,7 +361,7 @@ where }) .collect::>(); - // Observe the commitments. + // the commitments. for (commit, public_values) in commitments.into_iter().zip(public_values.into_iter()) { @@ -576,7 +576,7 @@ where { let all_records = all_records_rx.iter().flatten().collect::>(); let mut challenger = prover.machine().config().challenger(); - prover.machine().debug_constraints(&pk.host(), all_records, &mut challenger); + prover.machine().debug_constraints(&pk.to_host(), all_records, &mut challenger); } Ok((proof, public_values_stream, cycles)) @@ -663,7 +663,7 @@ where let prove_span = tracing::debug_span!("prove").entered(); #[cfg(feature = "debug")] - prover.machine().debug_constraints(&pk.host(), records.clone(), &mut challenger.clone()); + prover.machine().debug_constraints(&pk.to_host(), records.clone(), &mut challenger.clone()); let proof = prover.prove(&pk, records, &mut challenger, SP1CoreOpts::default()).unwrap(); prove_span.exit(); diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 320b42f305..9358266564 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -39,12 +39,12 @@ use p3_challenger::CanObserve; use p3_field::{AbstractField, PrimeField}; use p3_matrix::dense::RowMajorMatrix; use sp1_core_executor::{ExecutionError, ExecutionReport, Executor, Program, SP1Context}; - use sp1_core_machine::{ io::{SP1PublicValues, SP1Stdin}, riscv::RiscvAir, utils::{concurrency::TurnBasedSync, SP1CoreProverError}, }; +use sp1_stark::MachineProvingKey; use sp1_primitives::hash_deferred_proof; @@ -188,7 +188,7 @@ impl SP1Prover { let program = Program::from(elf).unwrap(); let (pk, vk) = self.core_prover.setup(&program); let vk = SP1VerifyingKey { vk }; - let pk = SP1ProvingKey { pk, elf: elf.to_vec(), vk: vk.clone() }; + let pk = SP1ProvingKey { pk: pk.to_host(), elf: elf.to_vec(), vk: vk.clone() }; (pk, vk) } @@ -224,15 +224,19 @@ impl SP1Prover { ) -> Result { context.subproof_verifier.replace(Arc::new(self)); let program = Program::from(&pk.elf).unwrap(); - let (proof, public_values_stream, cycles) = - sp1_core_machine::utils::prove_with_context::<_, C::CoreProver>( - &self.core_prover, - &pk.pk, - program, - stdin, - opts.core_opts, - context, - )?; + let (proof, public_values_stream, cycles) = sp1_core_machine::utils::prove_with_context::< + _, + C::CoreProver, + >( + &self.core_prover, + &>>::DeviceProvingKey::from_host( + pk.pk.clone(), + ), + program, + stdin, + opts.core_opts, + context, + )?; Self::check_for_high_cycles(cycles); let public_values = SP1PublicValues::from(&public_values_stream); Ok(SP1CoreProof { @@ -643,7 +647,7 @@ impl SP1Prover { // Observe the proving key. let mut challenger = self.compress_prover.config().challenger(); tracing::debug_span!("observe proving key").in_scope(|| { - pk.observe_into(&mut challenger); + pk.to_host().observe_into(&mut challenger); }); #[cfg(feature = "debug")] diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index 18bc7a11eb..b05a08ee16 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -158,7 +158,10 @@ pub trait MachineProvingKey: Send + Sync { fn pc_start(&self) -> Val; /// The proving key on the host. - fn host(&self) -> StarkProvingKey; + fn to_host(&self) -> StarkProvingKey; + + /// The proving key on the device. + fn from_host(host: StarkProvingKey) -> Self; } /// A prover implementation based on x86 and ARM CPUs. @@ -585,9 +588,13 @@ where self.pc_start } - fn host(&self) -> StarkProvingKey { + fn to_host(&self) -> StarkProvingKey { self.clone() } + + fn from_host(host: StarkProvingKey) -> Self { + host + } } impl Display for CpuProverError { From 4ff7612a0b2033f6659ccef23288da833a71840d Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 16:24:52 -0700 Subject: [PATCH 096/268] optimizations --- crates/prover/src/lib.rs | 2 +- crates/stark/src/prover.rs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 9358266564..c20c522578 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -647,7 +647,7 @@ impl SP1Prover { // Observe the proving key. let mut challenger = self.compress_prover.config().challenger(); tracing::debug_span!("observe proving key").in_scope(|| { - pk.to_host().observe_into(&mut challenger); + pk.observe_into(&mut challenger); }); #[cfg(feature = "debug")] diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index b05a08ee16..031d6737a8 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -16,6 +16,7 @@ use super::{ quotient_values, Com, OpeningProof, StarkGenericConfig, StarkMachine, StarkProvingKey, Val, VerifierConstraintFolder, }; +use crate::Challenger; use crate::{ air::MachineAir, lookup::InteractionBuilder, opts::SP1CoreOpts, record::MachineRecord, DebugConstraintBuilder, MachineChip, MachineProof, PackedChallenge, PcsProverData, @@ -162,6 +163,9 @@ pub trait MachineProvingKey: Send + Sync { /// The proving key on the device. fn from_host(host: StarkProvingKey) -> Self; + + /// Observe itself in the challenger. + fn observe_into(&self, challenger: &mut Challenger); } /// A prover implementation based on x86 and ARM CPUs. @@ -595,6 +599,15 @@ where fn from_host(host: StarkProvingKey) -> Self { host } + + fn observe_into(&self, challenger: &mut Challenger) { + challenger.observe(self.commit.clone()); + challenger.observe(self.pc_start); + let zero = Val::::zero(); + for _ in 0..7 { + challenger.observe(zero); + } + } } impl Display for CpuProverError { From 10efd45c0d8f8cb22b5e0a0cd45cba2f49458fff Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 16:51:30 -0700 Subject: [PATCH 097/268] fmt --- crates/core/machine/src/utils/prove.rs | 5 +++-- crates/stark/src/prover.rs | 9 ++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index d28252ff99..2ecfb4e4be 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -14,8 +14,9 @@ use p3_field::AbstractField; use p3_maybe_rayon::prelude::*; use serde::{de::DeserializeOwned, Serialize}; use size::Size; -use sp1_stark::MachineProvingKey; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, MachineVerificationError}; +use sp1_stark::{ + baby_bear_poseidon2::BabyBearPoseidon2, MachineProvingKey, MachineVerificationError, +}; use std::thread::ScopedJoinHandle; use thiserror::Error; diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index 031d6737a8..3fcbeb9f13 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -16,10 +16,9 @@ use super::{ quotient_values, Com, OpeningProof, StarkGenericConfig, StarkMachine, StarkProvingKey, Val, VerifierConstraintFolder, }; -use crate::Challenger; use crate::{ air::MachineAir, lookup::InteractionBuilder, opts::SP1CoreOpts, record::MachineRecord, - DebugConstraintBuilder, MachineChip, MachineProof, PackedChallenge, PcsProverData, + Challenger, DebugConstraintBuilder, MachineChip, MachineProof, PackedChallenge, PcsProverData, ProverConstraintFolder, ShardCommitment, ShardMainData, ShardProof, StarkVerifyingKey, }; @@ -307,9 +306,9 @@ where let trace_width = traces[i].width(); let prep_width = prep_traces[i].map_or(0, |x| x.width()); let permutation_width = permutation_traces[i].width(); - let total_width = trace_width - + prep_width - + permutation_width * >::D; + let total_width = trace_width + + prep_width + + permutation_width * >::D; tracing::debug!( "{:<15} | Main Cols = {:<5} | Pre Cols = {:<5} | Perm Cols = {:<5} | Rows = {:<5} | Cells = {:<10}", chips[i].name(), From d528d5596a08bc447e3de6f1e120ba6d6d125508 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 26 Aug 2024 17:02:15 -0700 Subject: [PATCH 098/268] fmt stable --- crates/cli/src/commands/install_toolchain.rs | 8 +- crates/cli/src/commands/prove.rs | 4 +- crates/core/executor/src/executor.rs | 8 +- crates/core/executor/src/instruction.rs | 52 +++++------ crates/core/executor/src/syscalls/mod.rs | 1 + crates/core/machine/src/air/memory.rs | 4 +- crates/core/machine/src/alu/bitwise/mod.rs | 12 +-- crates/core/machine/src/alu/divrem/mod.rs | 26 +++--- crates/core/machine/src/alu/lt/mod.rs | 4 +- crates/core/machine/src/alu/mul/mod.rs | 20 ++--- crates/core/machine/src/alu/sll/mod.rs | 4 +- crates/core/machine/src/alu/sr/mod.rs | 8 +- crates/core/machine/src/cpu/air/branch.rs | 22 ++--- crates/core/machine/src/cpu/air/ecall.rs | 20 ++--- crates/core/machine/src/cpu/air/memory.rs | 90 +++++++++---------- crates/core/machine/src/cpu/air/mod.rs | 10 +-- crates/core/machine/src/cpu/trace.rs | 32 +++---- crates/core/machine/src/operations/add4.rs | 14 +-- crates/core/machine/src/operations/add5.rs | 18 ++-- .../machine/src/operations/field/field_op.rs | 4 +- crates/core/machine/src/riscv/cost.rs | 54 +++++------ .../src/syscall/precompiles/fptower/fp.rs | 6 +- .../precompiles/sha256/compress/air.rs | 26 +++--- .../src/syscall/precompiles/uint256/air.rs | 6 +- .../weierstrass/weierstrass_add.rs | 6 +- .../weierstrass/weierstrass_decompress.rs | 9 +- .../weierstrass/weierstrass_double.rs | 6 +- crates/curves/src/edwards/mod.rs | 4 +- crates/prover/src/verify.rs | 26 +++--- .../recursion/circuit-v2/src/constraints.rs | 17 ++-- crates/recursion/circuit-v2/src/domain.rs | 8 +- crates/recursion/circuit/src/constraints.rs | 4 +- crates/recursion/circuit/src/domain.rs | 8 +- .../compiler/src/circuit/compiler.rs | 10 +-- .../core-v2/src/chips/exp_reverse_bits.rs | 6 +- .../recursion/core-v2/src/chips/fri_fold.rs | 8 +- .../core-v2/src/chips/mem/variable.rs | 4 +- .../core-v2/src/chips/poseidon2_wide/air.rs | 4 +- crates/recursion/core/src/air/builder.rs | 4 +- crates/recursion/core/src/cpu/air/jump.rs | 10 +-- crates/recursion/core/src/cpu/air/mod.rs | 42 ++++----- .../recursion/core/src/cpu/columns/opcode.rs | 12 +-- .../core/src/exp_reverse_bits/mod.rs | 4 +- crates/recursion/core/src/multi/mod.rs | 8 +- .../src/poseidon2_wide/air/control_flow.rs | 56 ++++++------ .../src/poseidon2_wide/air/permutation.rs | 10 +-- .../columns/opcode_workspace.rs | 21 +++-- .../core/src/poseidon2_wide/trace.rs | 8 +- crates/recursion/core/src/runtime/mod.rs | 12 +-- crates/recursion/program/src/constraints.rs | 4 +- crates/recursion/program/src/fri/domain.rs | 4 +- crates/stark/src/air/polynomial.rs | 6 +- crates/stark/src/machine.rs | 4 +- crates/stark/src/permutation.rs | 8 +- crates/stark/src/prover.rs | 6 +- crates/stark/src/verifier.rs | 9 +- rustfmt.toml | 16 ++-- 57 files changed, 412 insertions(+), 405 deletions(-) diff --git a/crates/cli/src/commands/install_toolchain.rs b/crates/cli/src/commands/install_toolchain.rs index eb8084d047..de09773cef 100644 --- a/crates/cli/src/commands/install_toolchain.rs +++ b/crates/cli/src/commands/install_toolchain.rs @@ -67,10 +67,10 @@ impl InstallToolchainCmd { if let Ok(entry) = entry { let entry_path = entry.path(); let entry_name = entry_path.file_name().unwrap(); - if entry_path.is_dir() && - entry_name != "bin" && - entry_name != "circuits" && - entry_name != "toolchains" + if entry_path.is_dir() + && entry_name != "bin" + && entry_name != "circuits" + && entry_name != "toolchains" { if let Err(err) = fs::remove_dir_all(&entry_path) { println!("Failed to remove directory {:?}: {}", entry_path, err); diff --git a/crates/cli/src/commands/prove.rs b/crates/cli/src/commands/prove.rs index 293f779810..0e2951dc23 100644 --- a/crates/cli/src/commands/prove.rs +++ b/crates/cli/src/commands/prove.rs @@ -22,8 +22,8 @@ fn is_valid_hex_string(s: &str) -> bool { return false; } // All hex digits with optional 0x prefix - s.starts_with("0x") && s[2..].chars().all(|c| c.is_ascii_hexdigit()) || - s.chars().all(|c| c.is_ascii_hexdigit()) + s.starts_with("0x") && s[2..].chars().all(|c| c.is_ascii_hexdigit()) + || s.chars().all(|c| c.is_ascii_hexdigit()) } impl FromStr for Input { diff --git a/crates/core/executor/src/executor.rs b/crates/core/executor/src/executor.rs index 179dbcc206..a5361a1d5c 100644 --- a/crates/core/executor/src/executor.rs +++ b/crates/core/executor/src/executor.rs @@ -925,8 +925,8 @@ impl<'a> Executor<'a> { // which is not permitted in unconstrained mode. This will result in // non-zero memory interactions when generating a proof. - if self.unconstrained && - (syscall != SyscallCode::EXIT_UNCONSTRAINED && syscall != SyscallCode::WRITE) + if self.unconstrained + && (syscall != SyscallCode::EXIT_UNCONSTRAINED && syscall != SyscallCode::WRITE) { return Err(ExecutionError::InvalidSyscallUsage(syscall_id as u64)); } @@ -1119,8 +1119,8 @@ impl<'a> Executor<'a> { } } - Ok(self.state.pc.wrapping_sub(self.program.pc_base) >= - (self.program.instructions.len() * 4) as u32) + Ok(self.state.pc.wrapping_sub(self.program.pc_base) + >= (self.program.instructions.len() * 4) as u32) } /// Bump the record. diff --git a/crates/core/executor/src/instruction.rs b/crates/core/executor/src/instruction.rs index 322ed91096..bc1df27ba0 100644 --- a/crates/core/executor/src/instruction.rs +++ b/crates/core/executor/src/instruction.rs @@ -45,24 +45,24 @@ impl Instruction { pub const fn is_alu_instruction(&self) -> bool { matches!( self.opcode, - Opcode::ADD | - Opcode::SUB | - Opcode::XOR | - Opcode::OR | - Opcode::AND | - Opcode::SLL | - Opcode::SRL | - Opcode::SRA | - Opcode::SLT | - Opcode::SLTU | - Opcode::MUL | - Opcode::MULH | - Opcode::MULHU | - Opcode::MULHSU | - Opcode::DIV | - Opcode::DIVU | - Opcode::REM | - Opcode::REMU + Opcode::ADD + | Opcode::SUB + | Opcode::XOR + | Opcode::OR + | Opcode::AND + | Opcode::SLL + | Opcode::SRL + | Opcode::SRA + | Opcode::SLT + | Opcode::SLTU + | Opcode::MUL + | Opcode::MULH + | Opcode::MULHU + | Opcode::MULHSU + | Opcode::DIV + | Opcode::DIVU + | Opcode::REM + | Opcode::REMU ) } @@ -77,14 +77,14 @@ impl Instruction { pub const fn is_memory_instruction(&self) -> bool { matches!( self.opcode, - Opcode::LB | - Opcode::LH | - Opcode::LW | - Opcode::LBU | - Opcode::LHU | - Opcode::SB | - Opcode::SH | - Opcode::SW + Opcode::LB + | Opcode::LH + | Opcode::LW + | Opcode::LBU + | Opcode::LHU + | Opcode::SB + | Opcode::SH + | Opcode::SW ) } diff --git a/crates/core/executor/src/syscalls/mod.rs b/crates/core/executor/src/syscalls/mod.rs index e4286bdaab..da24a3ab49 100644 --- a/crates/core/executor/src/syscalls/mod.rs +++ b/crates/core/executor/src/syscalls/mod.rs @@ -69,6 +69,7 @@ pub trait Syscall: Send + Sync { /// Creates the default syscall map. #[must_use] +#[allow(clippy::too_many_lines)] pub fn default_syscall_map() -> HashMap> { let mut syscall_map = HashMap::>::default(); diff --git a/crates/core/machine/src/air/memory.rs b/crates/core/machine/src/air/memory.rs index 00dc54c580..8d0c9fb909 100644 --- a/crates/core/machine/src/air/memory.rs +++ b/crates/core/machine/src/air/memory.rs @@ -162,8 +162,8 @@ pub trait MemoryAirBuilder: BaseAirBuilder { // Verify that value = limb_16 + limb_8 * 2^16. self.when(do_check.clone()).assert_eq( value, - limb_16.clone().into() + - limb_8.clone().into() * Self::Expr::from_canonical_u32(1 << 16), + limb_16.clone().into() + + limb_8.clone().into() * Self::Expr::from_canonical_u32(1 << 16), ); // Send the range checks for the limbs. diff --git a/crates/core/machine/src/alu/bitwise/mod.rs b/crates/core/machine/src/alu/bitwise/mod.rs index 7a1d2cb434..556bd22dcc 100644 --- a/crates/core/machine/src/alu/bitwise/mod.rs +++ b/crates/core/machine/src/alu/bitwise/mod.rs @@ -186,9 +186,9 @@ where builder.when_transition().assert_eq(local.nonce + AB::Expr::one(), next.nonce); // Get the opcode for the operation. - let opcode = local.is_xor * ByteOpcode::XOR.as_field::() + - local.is_or * ByteOpcode::OR.as_field::() + - local.is_and * ByteOpcode::AND.as_field::(); + let opcode = local.is_xor * ByteOpcode::XOR.as_field::() + + local.is_or * ByteOpcode::OR.as_field::() + + local.is_and * ByteOpcode::AND.as_field::(); // Get a multiplicity of `1` only for a true row. let mult = local.is_xor + local.is_or + local.is_and; @@ -197,9 +197,9 @@ where } // Get the cpu opcode, which corresponds to the opcode being sent in the CPU table. - let cpu_opcode = local.is_xor * Opcode::XOR.as_field::() + - local.is_or * Opcode::OR.as_field::() + - local.is_and * Opcode::AND.as_field::(); + let cpu_opcode = local.is_xor * Opcode::XOR.as_field::() + + local.is_or * Opcode::OR.as_field::() + + local.is_and * Opcode::AND.as_field::(); // Receive the arguments. builder.receive_alu( diff --git a/crates/core/machine/src/alu/divrem/mod.rs b/crates/core/machine/src/alu/divrem/mod.rs index b7911551be..9beb1ddf13 100644 --- a/crates/core/machine/src/alu/divrem/mod.rs +++ b/crates/core/machine/src/alu/divrem/mod.rs @@ -234,10 +234,10 @@ impl MachineAir for DivRemChip { let divrem_events = input.divrem_events.clone(); for event in divrem_events.iter() { assert!( - event.opcode == Opcode::DIVU || - event.opcode == Opcode::REMU || - event.opcode == Opcode::REM || - event.opcode == Opcode::DIV + event.opcode == Opcode::DIVU + || event.opcode == Opcode::REMU + || event.opcode == Opcode::REM + || event.opcode == Opcode::DIV ); let mut row = [F::zero(); NUM_DIVREM_COLS]; let cols: &mut DivRemCols = row.as_mut_slice().borrow_mut(); @@ -649,9 +649,9 @@ where builder.assert_eq( local.is_overflow, - local.is_overflow_b.is_diff_zero.result * - local.is_overflow_c.is_diff_zero.result * - is_signed, + local.is_overflow_b.is_diff_zero.result + * local.is_overflow_c.is_diff_zero.result + * is_signed, ); } @@ -796,8 +796,8 @@ where let mut v = vec![zero.clone(); WORD_SIZE]; // Set the least significant byte to 1 if is_c_0 is true. - v[0] = local.is_c_0.result * one.clone() + - (one.clone() - local.is_c_0.result) * local.abs_c[0]; + v[0] = local.is_c_0.result * one.clone() + + (one.clone() - local.is_c_0.result) * local.abs_c[0]; // Set the remaining bytes to 0 if is_c_0 is true. for i in 1..WORD_SIZE { @@ -927,10 +927,10 @@ where let div: AB::Expr = AB::F::from_canonical_u32(Opcode::DIV as u32).into(); let rem: AB::Expr = AB::F::from_canonical_u32(Opcode::REM as u32).into(); - local.is_divu * divu + - local.is_remu * remu + - local.is_div * div + - local.is_rem * rem + local.is_divu * divu + + local.is_remu * remu + + local.is_div * div + + local.is_rem * rem }; builder.receive_alu( diff --git a/crates/core/machine/src/alu/lt/mod.rs b/crates/core/machine/src/alu/lt/mod.rs index 82647631e5..1ae8b47893 100644 --- a/crates/core/machine/src/alu/lt/mod.rs +++ b/crates/core/machine/src/alu/lt/mod.rs @@ -454,8 +454,8 @@ where // Receive the arguments. builder.receive_alu( - local.is_slt * AB::F::from_canonical_u32(Opcode::SLT as u32) + - local.is_sltu * AB::F::from_canonical_u32(Opcode::SLTU as u32), + local.is_slt * AB::F::from_canonical_u32(Opcode::SLT as u32) + + local.is_sltu * AB::F::from_canonical_u32(Opcode::SLTU as u32), local.a, local.b, local.c, diff --git a/crates/core/machine/src/alu/mul/mod.rs b/crates/core/machine/src/alu/mul/mod.rs index 185f1de682..98dbc7a80e 100644 --- a/crates/core/machine/src/alu/mul/mod.rs +++ b/crates/core/machine/src/alu/mul/mod.rs @@ -150,10 +150,10 @@ impl MachineAir for MulChip { .map(|event| { // Ensure that the opcode is MUL, MULHU, MULH, or MULHSU. assert!( - event.opcode == Opcode::MUL || - event.opcode == Opcode::MULHU || - event.opcode == Opcode::MULH || - event.opcode == Opcode::MULHSU + event.opcode == Opcode::MUL + || event.opcode == Opcode::MULHU + || event.opcode == Opcode::MULH + || event.opcode == Opcode::MULHSU ); let mut row = [F::zero(); NUM_MUL_COLS]; let cols: &mut MulCols = row.as_mut_slice().borrow_mut(); @@ -173,8 +173,8 @@ impl MachineAir for MulChip { cols.c_msb = F::from_canonical_u8(c_msb); // If b is signed and it is negative, sign extend b. - if (event.opcode == Opcode::MULH || event.opcode == Opcode::MULHSU) && - b_msb == 1 + if (event.opcode == Opcode::MULH || event.opcode == Opcode::MULHSU) + && b_msb == 1 { cols.b_sign_extend = F::one(); b.resize(PRODUCT_SIZE, BYTE_MASK); @@ -432,10 +432,10 @@ where let mulh: AB::Expr = AB::F::from_canonical_u32(Opcode::MULH as u32).into(); let mulhu: AB::Expr = AB::F::from_canonical_u32(Opcode::MULHU as u32).into(); let mulhsu: AB::Expr = AB::F::from_canonical_u32(Opcode::MULHSU as u32).into(); - local.is_mul * mul + - local.is_mulh * mulh + - local.is_mulhu * mulhu + - local.is_mulhsu * mulhsu + local.is_mul * mul + + local.is_mulh * mulh + + local.is_mulhu * mulhu + + local.is_mulhsu * mulhsu }; // Range check. diff --git a/crates/core/machine/src/alu/sll/mod.rs b/crates/core/machine/src/alu/sll/mod.rs index 81f8b64375..50b3694073 100644 --- a/crates/core/machine/src/alu/sll/mod.rs +++ b/crates/core/machine/src/alu/sll/mod.rs @@ -314,8 +314,8 @@ where // Check bit_shift_result = b * bit_shift_multiplier by using bit_shift_result_carry to // carry-propagate. for i in 0..WORD_SIZE { - let mut v = local.b[i] * local.bit_shift_multiplier - - local.bit_shift_result_carry[i] * base.clone(); + let mut v = local.b[i] * local.bit_shift_multiplier + - local.bit_shift_result_carry[i] * base.clone(); if i > 0 { v += local.bit_shift_result_carry[i - 1].into(); } diff --git a/crates/core/machine/src/alu/sr/mod.rs b/crates/core/machine/src/alu/sr/mod.rs index 087d3b78b2..88ca2eacd4 100644 --- a/crates/core/machine/src/alu/sr/mod.rs +++ b/crates/core/machine/src/alu/sr/mod.rs @@ -405,8 +405,8 @@ where // The 2-bit number represented by the 3rd and 4th least significant bits of c is the // number of bytes to shift. - let num_bytes_to_shift = local.c_least_sig_byte[3] + - local.c_least_sig_byte[4] * AB::F::from_canonical_u32(2); + let num_bytes_to_shift = local.c_least_sig_byte[3] + + local.c_least_sig_byte[4] * AB::F::from_canonical_u32(2); // If shift_by_n_bytes[i] = 1, then i = num_bytes_to_shift. for i in 0..WORD_SIZE { @@ -534,8 +534,8 @@ where // Receive the arguments. builder.receive_alu( - local.is_srl * AB::F::from_canonical_u32(Opcode::SRL as u32) + - local.is_sra * AB::F::from_canonical_u32(Opcode::SRA as u32), + local.is_srl * AB::F::from_canonical_u32(Opcode::SRL as u32) + + local.is_sra * AB::F::from_canonical_u32(Opcode::SRA as u32), local.a, local.b, local.c, diff --git a/crates/core/machine/src/cpu/air/branch.rs b/crates/core/machine/src/cpu/air/branch.rs index 42d77540a0..1377d1a14e 100644 --- a/crates/core/machine/src/cpu/air/branch.rs +++ b/crates/core/machine/src/cpu/air/branch.rs @@ -22,12 +22,12 @@ impl CpuChip { &self, opcode_selectors: &OpcodeSelectorCols, ) -> AB::Expr { - opcode_selectors.is_beq + - opcode_selectors.is_bne + - opcode_selectors.is_blt + - opcode_selectors.is_bge + - opcode_selectors.is_bltu + - opcode_selectors.is_bgeu + opcode_selectors.is_beq + + opcode_selectors.is_bne + + opcode_selectors.is_blt + + opcode_selectors.is_bge + + opcode_selectors.is_bltu + + opcode_selectors.is_bgeu } /// Verifies all the branching related columns. @@ -179,9 +179,9 @@ impl CpuChip { // Calculate a_lt_b <==> a < b (using appropriate signedness). let use_signed_comparison = local.selectors.is_blt + local.selectors.is_bge; builder.send_alu( - use_signed_comparison.clone() * Opcode::SLT.as_field::() + - (AB::Expr::one() - use_signed_comparison.clone()) * - Opcode::SLTU.as_field::(), + use_signed_comparison.clone() * Opcode::SLT.as_field::() + + (AB::Expr::one() - use_signed_comparison.clone()) + * Opcode::SLTU.as_field::(), Word::extend_var::(branch_cols.a_lt_b), local.op_a_val(), local.op_b_val(), @@ -193,8 +193,8 @@ impl CpuChip { // Calculate a_gt_b <==> a > b (using appropriate signedness). builder.send_alu( - use_signed_comparison.clone() * Opcode::SLT.as_field::() + - (AB::Expr::one() - use_signed_comparison) * Opcode::SLTU.as_field::(), + use_signed_comparison.clone() * Opcode::SLT.as_field::() + + (AB::Expr::one() - use_signed_comparison) * Opcode::SLTU.as_field::(), Word::extend_var::(branch_cols.a_gt_b), local.op_b_val(), local.op_a_val(), diff --git a/crates/core/machine/src/cpu/air/ecall.rs b/crates/core/machine/src/cpu/air/ecall.rs index 785c0a9585..8a88453a7a 100644 --- a/crates/core/machine/src/cpu/air/ecall.rs +++ b/crates/core/machine/src/cpu/air/ecall.rs @@ -63,8 +63,8 @@ impl CpuChip { let is_enter_unconstrained = { IsZeroOperation::::eval( builder, - syscall_id - - AB::Expr::from_canonical_u32(SyscallCode::ENTER_UNCONSTRAINED.syscall_id()), + syscall_id + - AB::Expr::from_canonical_u32(SyscallCode::ENTER_UNCONSTRAINED.syscall_id()), ecall_cols.is_enter_unconstrained, is_ecall_instruction.clone(), ); @@ -97,8 +97,8 @@ impl CpuChip { // Verify value of ecall_range_check_operand column. builder.assert_eq( local.ecall_range_check_operand, - is_ecall_instruction * - (ecall_cols.is_halt.result + ecall_cols.is_commit_deferred_proofs.result), + is_ecall_instruction + * (ecall_cols.is_halt.result + ecall_cols.is_commit_deferred_proofs.result), ); // Babybear range check the operand_to_check word. @@ -140,8 +140,8 @@ impl CpuChip { // When it's some other syscall, there should be no set bits. builder .when( - local.selectors.is_ecall * - (AB::Expr::one() - (is_commit.clone() + is_commit_deferred_proofs.clone())), + local.selectors.is_ecall + * (AB::Expr::one() - (is_commit.clone() + is_commit_deferred_proofs.clone())), ) .assert_zero(bitmap_sum); @@ -156,8 +156,8 @@ impl CpuChip { for i in 0..3 { builder .when( - local.selectors.is_ecall * - (is_commit.clone() + is_commit_deferred_proofs.clone()), + local.selectors.is_ecall + * (is_commit.clone() + is_commit_deferred_proofs.clone()), ) .assert_eq(local.op_b_access.prev_value()[i + 1], AB::Expr::from_canonical_u32(0)); } @@ -278,8 +278,8 @@ impl CpuChip { let is_commit_deferred_proofs = { IsZeroOperation::::eval( builder, - syscall_id - - AB::Expr::from_canonical_u32( + syscall_id + - AB::Expr::from_canonical_u32( SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id(), ), ecall_cols.is_commit_deferred_proofs, diff --git a/crates/core/machine/src/cpu/air/memory.rs b/crates/core/machine/src/cpu/air/memory.rs index 3d7fde3996..876bd0b956 100644 --- a/crates/core/machine/src/cpu/air/memory.rs +++ b/crates/core/machine/src/cpu/air/memory.rs @@ -22,14 +22,14 @@ impl CpuChip { &self, opcode_selectors: &OpcodeSelectorCols, ) -> AB::Expr { - opcode_selectors.is_lb + - opcode_selectors.is_lbu + - opcode_selectors.is_lh + - opcode_selectors.is_lhu + - opcode_selectors.is_lw + - opcode_selectors.is_sb + - opcode_selectors.is_sh + - opcode_selectors.is_sw + opcode_selectors.is_lb + + opcode_selectors.is_lbu + + opcode_selectors.is_lh + + opcode_selectors.is_lhu + + opcode_selectors.is_lw + + opcode_selectors.is_sb + + opcode_selectors.is_sh + + opcode_selectors.is_sw } /// Computes whether the opcode is a load instruction. @@ -37,11 +37,11 @@ impl CpuChip { &self, opcode_selectors: &OpcodeSelectorCols, ) -> AB::Expr { - opcode_selectors.is_lb + - opcode_selectors.is_lbu + - opcode_selectors.is_lh + - opcode_selectors.is_lhu + - opcode_selectors.is_lw + opcode_selectors.is_lb + + opcode_selectors.is_lbu + + opcode_selectors.is_lh + + opcode_selectors.is_lhu + + opcode_selectors.is_lw } /// Computes whether the opcode is a store instruction. @@ -169,8 +169,8 @@ impl CpuChip { // matches the value of `local.mem_value_is_neg`. builder.assert_eq( local.mem_value_is_neg, - (local.selectors.is_lb + local.selectors.is_lh) * - memory_columns.most_sig_byte_decomp[7], + (local.selectors.is_lb + local.selectors.is_lh) + * memory_columns.most_sig_byte_decomp[7], ); // When the memory value is negative, use the SUB opcode to compute the signed value of @@ -213,10 +213,10 @@ impl CpuChip { // Compute the offset_is_zero flag. The other offset flags are already contrained by the // method `eval_memory_address_and_access`, which is called in // `eval_memory_address_and_access`. - let offset_is_zero = AB::Expr::one() - - memory_columns.offset_is_one - - memory_columns.offset_is_two - - memory_columns.offset_is_three; + let offset_is_zero = AB::Expr::one() + - memory_columns.offset_is_one + - memory_columns.offset_is_two + - memory_columns.offset_is_three; // Compute the expected stored value for a SB instruction. let one = AB::Expr::one(); @@ -224,14 +224,14 @@ impl CpuChip { let mem_val = *memory_columns.memory_access.value(); let prev_mem_val = *memory_columns.memory_access.prev_value(); let sb_expected_stored_value = Word([ - a_val[0] * offset_is_zero.clone() + - (one.clone() - offset_is_zero.clone()) * prev_mem_val[0], - a_val[0] * memory_columns.offset_is_one + - (one.clone() - memory_columns.offset_is_one) * prev_mem_val[1], - a_val[0] * memory_columns.offset_is_two + - (one.clone() - memory_columns.offset_is_two) * prev_mem_val[2], - a_val[0] * memory_columns.offset_is_three + - (one.clone() - memory_columns.offset_is_three) * prev_mem_val[3], + a_val[0] * offset_is_zero.clone() + + (one.clone() - offset_is_zero.clone()) * prev_mem_val[0], + a_val[0] * memory_columns.offset_is_one + + (one.clone() - memory_columns.offset_is_one) * prev_mem_val[1], + a_val[0] * memory_columns.offset_is_two + + (one.clone() - memory_columns.offset_is_two) * prev_mem_val[2], + a_val[0] * memory_columns.offset_is_three + + (one.clone() - memory_columns.offset_is_three) * prev_mem_val[3], ]); builder .when(local.selectors.is_sb) @@ -249,8 +249,8 @@ impl CpuChip { let a_is_lower_half = offset_is_zero; let a_is_upper_half = memory_columns.offset_is_two; let sh_expected_stored_value = Word([ - a_val[0] * a_is_lower_half.clone() + - (one.clone() - a_is_lower_half.clone()) * prev_mem_val[0], + a_val[0] * a_is_lower_half.clone() + + (one.clone() - a_is_lower_half.clone()) * prev_mem_val[0], a_val[1] * a_is_lower_half.clone() + (one.clone() - a_is_lower_half) * prev_mem_val[1], a_val[0] * a_is_upper_half + (one.clone() - a_is_upper_half) * prev_mem_val[2], a_val[1] * a_is_upper_half + (one.clone() - a_is_upper_half) * prev_mem_val[3], @@ -278,16 +278,16 @@ impl CpuChip { // Compute the offset_is_zero flag. The other offset flags are already contrained by the // method `eval_memory_address_and_access`, which is called in // `eval_memory_address_and_access`. - let offset_is_zero = AB::Expr::one() - - memory_columns.offset_is_one - - memory_columns.offset_is_two - - memory_columns.offset_is_three; + let offset_is_zero = AB::Expr::one() + - memory_columns.offset_is_one + - memory_columns.offset_is_two + - memory_columns.offset_is_three; // Compute the byte value. - let mem_byte = mem_val[0] * offset_is_zero.clone() + - mem_val[1] * memory_columns.offset_is_one + - mem_val[2] * memory_columns.offset_is_two + - mem_val[3] * memory_columns.offset_is_three; + let mem_byte = mem_val[0] * offset_is_zero.clone() + + mem_val[1] * memory_columns.offset_is_one + + mem_val[2] * memory_columns.offset_is_two + + mem_val[3] * memory_columns.offset_is_three; let byte_value = Word::extend_expr::(mem_byte.clone()); // When the instruciton is LB or LBU, just use the lower byte. @@ -346,10 +346,10 @@ impl CpuChip { local: &CpuCols, ) { let is_mem_op = self.is_memory_instruction::(&local.selectors); - let offset_is_zero = AB::Expr::one() - - memory_columns.offset_is_one - - memory_columns.offset_is_two - - memory_columns.offset_is_three; + let offset_is_zero = AB::Expr::one() + - memory_columns.offset_is_one + - memory_columns.offset_is_two + - memory_columns.offset_is_three; let mut filtered_builder = builder.when(is_mem_op); @@ -360,10 +360,10 @@ impl CpuChip { // Assert that only one of the value flags is true filtered_builder.assert_one( - offset_is_zero.clone() + - memory_columns.offset_is_one + - memory_columns.offset_is_two + - memory_columns.offset_is_three, + offset_is_zero.clone() + + memory_columns.offset_is_one + + memory_columns.offset_is_two + + memory_columns.offset_is_three, ); // Assert that the correct value flag is set diff --git a/crates/core/machine/src/cpu/air/mod.rs b/crates/core/machine/src/cpu/air/mod.rs index 0aa64c4491..880e76e36c 100644 --- a/crates/core/machine/src/cpu/air/mod.rs +++ b/crates/core/machine/src/cpu/air/mod.rs @@ -323,11 +323,11 @@ impl CpuChip { let is_halt = self.get_is_halt_syscall::(builder, local); builder.when(local.is_real).assert_eq( local.is_sequential_instr, - AB::Expr::one() - - (is_branch_instruction + - local.selectors.is_jal + - local.selectors.is_jalr + - is_halt), + AB::Expr::one() + - (is_branch_instruction + + local.selectors.is_jal + + local.selectors.is_jalr + + is_halt), ); // Verify that the pc increments by 4 for all instructions except branch, jump and halt diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index 9dab9c8d56..f82810f818 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -186,9 +186,9 @@ impl CpuChip { let is_halt = self.populate_ecall(cols, event, nonce_lookup); cols.is_sequential_instr = F::from_bool( - !event.instruction.is_branch_instruction() && - !event.instruction.is_jump_instruction() && - !is_halt, + !event.instruction.is_branch_instruction() + && !event.instruction.is_jump_instruction() + && !is_halt, ); // Assert that the instruction is not a no-op. @@ -255,14 +255,14 @@ impl CpuChip { ) { if !matches!( event.instruction.opcode, - Opcode::LB | - Opcode::LH | - Opcode::LW | - Opcode::LBU | - Opcode::LHU | - Opcode::SB | - Opcode::SH | - Opcode::SW + Opcode::LB + | Opcode::LH + | Opcode::LW + | Opcode::LBU + | Opcode::LHU + | Opcode::SB + | Opcode::SH + | Opcode::SW ) { return; } @@ -656,15 +656,15 @@ impl CpuChip { // Populate `is_commit_deferred_proofs`. ecall_cols.is_commit_deferred_proofs.populate_from_field_element( - syscall_id - - F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()), + syscall_id + - F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()), ); // If the syscall is `COMMIT` or `COMMIT_DEFERRED_PROOFS`, set the index bitmap and // digest word. - if syscall_id == F::from_canonical_u32(SyscallCode::COMMIT.syscall_id()) || - syscall_id == - F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()) + if syscall_id == F::from_canonical_u32(SyscallCode::COMMIT.syscall_id()) + || syscall_id + == F::from_canonical_u32(SyscallCode::COMMIT_DEFERRED_PROOFS.syscall_id()) { let digest_idx = cols.op_b_access.value().to_u32() as usize; ecall_cols.index_bitmap[digest_idx] = F::one(); diff --git a/crates/core/machine/src/operations/add4.rs b/crates/core/machine/src/operations/add4.rs index 95cdddbe14..5fe5ec0fd1 100644 --- a/crates/core/machine/src/operations/add4.rs +++ b/crates/core/machine/src/operations/add4.rs @@ -111,10 +111,10 @@ impl Add4Operation { builder_is_real.assert_bool(cols.is_carry_2[i]); builder_is_real.assert_bool(cols.is_carry_3[i]); builder_is_real.assert_eq( - cols.is_carry_0[i] + - cols.is_carry_1[i] + - cols.is_carry_2[i] + - cols.is_carry_3[i], + cols.is_carry_0[i] + + cols.is_carry_1[i] + + cols.is_carry_2[i] + + cols.is_carry_3[i], AB::Expr::one(), ); } @@ -129,9 +129,9 @@ impl Add4Operation { for i in 0..WORD_SIZE { builder_is_real.assert_eq( cols.carry[i], - cols.is_carry_1[i] * one.clone() + - cols.is_carry_2[i] * two + - cols.is_carry_3[i] * three, + cols.is_carry_1[i] * one.clone() + + cols.is_carry_2[i] * two + + cols.is_carry_3[i] * three, ); } } diff --git a/crates/core/machine/src/operations/add5.rs b/crates/core/machine/src/operations/add5.rs index 7112517eb8..959d06dd10 100644 --- a/crates/core/machine/src/operations/add5.rs +++ b/crates/core/machine/src/operations/add5.rs @@ -116,11 +116,11 @@ impl Add5Operation { builder_is_real.assert_bool(cols.is_carry_3[i]); builder_is_real.assert_bool(cols.is_carry_4[i]); builder_is_real.assert_eq( - cols.is_carry_0[i] + - cols.is_carry_1[i] + - cols.is_carry_2[i] + - cols.is_carry_3[i] + - cols.is_carry_4[i], + cols.is_carry_0[i] + + cols.is_carry_1[i] + + cols.is_carry_2[i] + + cols.is_carry_3[i] + + cols.is_carry_4[i], AB::Expr::one(), ); } @@ -136,10 +136,10 @@ impl Add5Operation { for i in 0..WORD_SIZE { builder_is_real.assert_eq( cols.carry[i], - cols.is_carry_1[i] * one.clone() + - cols.is_carry_2[i] * two + - cols.is_carry_3[i] * three + - cols.is_carry_4[i] * four, + cols.is_carry_1[i] * one.clone() + + cols.is_carry_2[i] * two + + cols.is_carry_3[i] * three + + cols.is_carry_4[i] * four, ); } } diff --git a/crates/core/machine/src/operations/field/field_op.rs b/crates/core/machine/src/operations/field/field_op.rs index e521907eb7..b2120dad99 100644 --- a/crates/core/machine/src/operations/field/field_op.rs +++ b/crates/core/machine/src/operations/field/field_op.rs @@ -204,8 +204,8 @@ impl FieldOpCols { let is_mul: AB::Expr = is_mul.into(); let is_div: AB::Expr = is_div.into(); - let p_result = p_res_param.clone() * (is_add.clone() + is_mul.clone()) + - p_a_param.clone() * (is_sub.clone() + is_div.clone()); + let p_result = p_res_param.clone() * (is_add.clone() + is_mul.clone()) + + p_a_param.clone() * (is_sub.clone() + is_div.clone()); let p_add = p_a_param.clone() + p_b.clone(); let p_sub = p_res_param.clone() + p_b.clone(); diff --git a/crates/core/machine/src/riscv/cost.rs b/crates/core/machine/src/riscv/cost.rs index 64bd3c1e15..685e683711 100644 --- a/crates/core/machine/src/riscv/cost.rs +++ b/crates/core/machine/src/riscv/cost.rs @@ -99,15 +99,15 @@ impl CostEstimator for ExecutionReport { total_chips += 1; let bls12381_fp_events = - *self.syscall_counts.get(&SyscallCode::BLS12381_FP_ADD).unwrap_or(&0) + - *self.syscall_counts.get(&SyscallCode::BLS12381_FP_SUB).unwrap_or(&0) + - *self.syscall_counts.get(&SyscallCode::BLS12381_FP_MUL).unwrap_or(&0); + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_SUB).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BLS12381_FP_MUL).unwrap_or(&0); total_area += (bls12381_fp_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Fp]; total_chips += 1; let bls12381_fp2_addsub_events = - *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_ADD).unwrap_or(&0) + - *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_SUB).unwrap_or(&0); + *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BLS12381_FP2_SUB).unwrap_or(&0); total_area += (bls12381_fp2_addsub_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Fp2AddSub]; total_chips += 1; @@ -118,15 +118,15 @@ impl CostEstimator for ExecutionReport { (bls12381_fp2_mul_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Fp2Mul]; total_chips += 1; - let bn254_fp_events = *self.syscall_counts.get(&SyscallCode::BN254_FP_ADD).unwrap_or(&0) + - *self.syscall_counts.get(&SyscallCode::BN254_FP_SUB).unwrap_or(&0) + - *self.syscall_counts.get(&SyscallCode::BN254_FP_MUL).unwrap_or(&0); + let bn254_fp_events = *self.syscall_counts.get(&SyscallCode::BN254_FP_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BN254_FP_SUB).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BN254_FP_MUL).unwrap_or(&0); total_area += (bn254_fp_events as u64) * costs[&RiscvAirDiscriminants::Bn254Fp]; total_chips += 1; let bn254_fp2_addsub_events = - *self.syscall_counts.get(&SyscallCode::BN254_FP2_ADD).unwrap_or(&0) + - *self.syscall_counts.get(&SyscallCode::BN254_FP2_SUB).unwrap_or(&0); + *self.syscall_counts.get(&SyscallCode::BN254_FP2_ADD).unwrap_or(&0) + + *self.syscall_counts.get(&SyscallCode::BN254_FP2_SUB).unwrap_or(&0); total_area += (bn254_fp2_addsub_events as u64) * costs[&RiscvAirDiscriminants::Bn254Fp2AddSub]; total_chips += 1; @@ -142,33 +142,33 @@ impl CostEstimator for ExecutionReport { (bls12381_decompress_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Decompress]; total_chips += 1; - let divrem_events = *self.opcode_counts.get(&Opcode::DIV).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::REM).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::DIVU).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::REMU).unwrap_or(&0); + let divrem_events = *self.opcode_counts.get(&Opcode::DIV).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::REM).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::DIVU).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::REMU).unwrap_or(&0); total_area += (divrem_events as u64) * costs[&RiscvAirDiscriminants::DivRem]; total_chips += 1; - let addsub_events = *self.opcode_counts.get(&Opcode::ADD).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::SUB).unwrap_or(&0); + let addsub_events = *self.opcode_counts.get(&Opcode::ADD).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::SUB).unwrap_or(&0); total_area += (addsub_events as u64) * costs[&RiscvAirDiscriminants::Add]; total_chips += 1; - let bitwise_events = *self.opcode_counts.get(&Opcode::AND).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::OR).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::XOR).unwrap_or(&0); + let bitwise_events = *self.opcode_counts.get(&Opcode::AND).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::OR).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::XOR).unwrap_or(&0); total_area += (bitwise_events as u64) * costs[&RiscvAirDiscriminants::Bitwise]; total_chips += 1; - let mul_events = *self.opcode_counts.get(&Opcode::MUL).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::MULH).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::MULHU).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::MULHSU).unwrap_or(&0); + let mul_events = *self.opcode_counts.get(&Opcode::MUL).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::MULH).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::MULHU).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::MULHSU).unwrap_or(&0); total_area += (mul_events as u64) * costs[&RiscvAirDiscriminants::Mul]; total_chips += 1; - let shift_right_events = *self.opcode_counts.get(&Opcode::SRL).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::SRA).unwrap_or(&0); + let shift_right_events = *self.opcode_counts.get(&Opcode::SRL).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::SRA).unwrap_or(&0); total_area += (shift_right_events as u64) * costs[&RiscvAirDiscriminants::ShiftRight]; total_chips += 1; @@ -176,8 +176,8 @@ impl CostEstimator for ExecutionReport { total_area += (shift_left_events as u64) * costs[&RiscvAirDiscriminants::ShiftLeft]; total_chips += 1; - let lt_events = *self.opcode_counts.get(&Opcode::SLT).unwrap_or(&0) + - *self.opcode_counts.get(&Opcode::SLTU).unwrap_or(&0); + let lt_events = *self.opcode_counts.get(&Opcode::SLT).unwrap_or(&0) + + *self.opcode_counts.get(&Opcode::SLTU).unwrap_or(&0); total_area += (lt_events as u64) * costs[&RiscvAirDiscriminants::Lt]; total_chips += 1; diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs index c2b95bb83d..a87170afc2 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs @@ -268,9 +268,9 @@ where AB::F::from_canonical_u32(SyscallCode::BLS12381_FP_MUL.syscall_id()), ), }; - let syscall_id_felt = local.is_add * add_syscall_id + - local.is_sub * sub_syscall_id + - local.is_mul * mul_syscall_id; + let syscall_id_felt = local.is_add * add_syscall_id + + local.is_sub * sub_syscall_id + + local.is_mul * mul_syscall_id; builder.receive_syscall( local.shard, diff --git a/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs b/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs index 497fec8f44..db1a58a7f0 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs @@ -145,15 +145,15 @@ impl ShaCompressChip { // Assert that the is_compression flag is correct. builder.assert_eq( local.is_compression, - (local.octet_num[1] + - local.octet_num[2] + - local.octet_num[3] + - local.octet_num[4] + - local.octet_num[5] + - local.octet_num[6] + - local.octet_num[7] + - local.octet_num[8]) * - local.is_real, + (local.octet_num[1] + + local.octet_num[2] + + local.octet_num[3] + + local.octet_num[4] + + local.octet_num[5] + + local.octet_num[6] + + local.octet_num[7] + + local.octet_num[8]) + * local.is_real, ); // Assert that the is_finalize flag is correct. @@ -237,10 +237,10 @@ impl ShaCompressChip { // Verify correct mem address for compression phase builder.when(local.is_compression).assert_eq( local.mem_addr, - local.w_ptr + - (((cycle_num - AB::Expr::one()) * AB::Expr::from_canonical_u32(8)) + - cycle_step.clone()) * - AB::Expr::from_canonical_u32(4), + local.w_ptr + + (((cycle_num - AB::Expr::one()) * AB::Expr::from_canonical_u32(8)) + + cycle_step.clone()) + * AB::Expr::from_canonical_u32(4), ); // Verify correct mem address for finalize phase diff --git a/crates/core/machine/src/syscall/precompiles/uint256/air.rs b/crates/core/machine/src/syscall/precompiles/uint256/air.rs index ebd438c6d0..b0e77a6e51 100644 --- a/crates/core/machine/src/syscall/precompiles/uint256/air.rs +++ b/crates/core/machine/src/syscall/precompiles/uint256/air.rs @@ -276,9 +276,9 @@ where coeff_2_256.resize(32, AB::Expr::zero()); coeff_2_256.push(AB::Expr::one()); let modulus_polynomial: Polynomial = modulus_limbs.into(); - let p_modulus: Polynomial = modulus_polynomial * - (AB::Expr::one() - modulus_is_zero.into()) + - Polynomial::from_coefficients(&coeff_2_256) * modulus_is_zero.into(); + let p_modulus: Polynomial = modulus_polynomial + * (AB::Expr::one() - modulus_is_zero.into()) + + Polynomial::from_coefficients(&coeff_2_256) * modulus_is_zero.into(); // Evaluate the uint256 multiplication local.output.eval_with_modulus( diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs index c37189b9a1..40d82b9adb 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs @@ -283,9 +283,9 @@ impl MachineAir // Write the nonces to the trace. for i in 0..trace.height() { - let cols: &mut WeierstrassAddAssignCols = trace.values[i * - num_weierstrass_add_cols::().. - (i + 1) * num_weierstrass_add_cols::()] + let cols: &mut WeierstrassAddAssignCols = trace.values[i + * num_weierstrass_add_cols::() + ..(i + 1) * num_weierstrass_add_cols::()] .borrow_mut(); cols.nonce = F::from_canonical_usize(i); } diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs index 31b43409d5..01fed80a01 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs @@ -299,8 +299,8 @@ impl MachineAir impl BaseAir for WeierstrassDecompressChip { fn width(&self) -> usize { - num_weierstrass_decompress_cols::() + - match self.sign_rule { + num_weierstrass_decompress_cols::() + + match self.sign_rule { SignChoiceRule::LeastSignificantBit => 0, SignChoiceRule::Lexicographic => { size_of::>() @@ -423,8 +423,9 @@ where // Get the choice columns from the row slice let choice_cols: &LexicographicChoiceCols = (*local_slice) - [weierstrass_cols.. - weierstrass_cols + size_of::>()] + [weierstrass_cols + ..weierstrass_cols + + size_of::>()] .borrow(); // Range check the neg_y value since we are now using a lexicographic comparison. diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs index 82d9ec4941..16dfe59264 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -300,9 +300,9 @@ impl MachineAir // Write the nonces to the trace. for i in 0..trace.height() { - let cols: &mut WeierstrassDoubleAssignCols = trace.values[i * - num_weierstrass_double_cols::().. - (i + 1) * num_weierstrass_double_cols::()] + let cols: &mut WeierstrassDoubleAssignCols = trace.values[i + * num_weierstrass_double_cols::() + ..(i + 1) * num_weierstrass_double_cols::()] .borrow_mut(); cols.nonce = F::from_canonical_usize(i); } diff --git a/crates/curves/src/edwards/mod.rs b/crates/curves/src/edwards/mod.rs index cacd5fb527..1344dff6bc 100644 --- a/crates/curves/src/edwards/mod.rs +++ b/crates/curves/src/edwards/mod.rs @@ -174,8 +174,8 @@ mod tests { assert_eq!(y_x_base, xy_base); } - let order = BigUint::from(2u32).pow(252) + - BigUint::from(27742317777372353535851937790883648493u128); + let order = BigUint::from(2u32).pow(252) + + BigUint::from(27742317777372353535851937790883648493u128); assert_eq!(base, &base + &(&base * &order)); } } diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index e0618183cb..d095b90fb1 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -201,15 +201,15 @@ impl SP1Prover { return Err(MachineVerificationError::InvalidPublicValues( "last_init_addr_bits != last_finalize_addr_bits_prev", )); - } else if !shard_proof.contains_memory_init() && - public_values.previous_init_addr_bits != public_values.last_init_addr_bits + } else if !shard_proof.contains_memory_init() + && public_values.previous_init_addr_bits != public_values.last_init_addr_bits { return Err(MachineVerificationError::InvalidPublicValues( "previous_init_addr_bits != last_init_addr_bits", )); - } else if !shard_proof.contains_memory_finalize() && - public_values.previous_finalize_addr_bits != - public_values.last_finalize_addr_bits + } else if !shard_proof.contains_memory_finalize() + && public_values.previous_finalize_addr_bits + != public_values.last_finalize_addr_bits { return Err(MachineVerificationError::InvalidPublicValues( "previous_finalize_addr_bits != last_finalize_addr_bits", @@ -243,26 +243,26 @@ impl SP1Prover { for shard_proof in proof.0.iter() { let public_values: &PublicValues, _> = shard_proof.public_values.as_slice().borrow(); - if commited_value_digest_prev != zero_commited_value_digest && - public_values.committed_value_digest != commited_value_digest_prev + if commited_value_digest_prev != zero_commited_value_digest + && public_values.committed_value_digest != commited_value_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "committed_value_digest != commited_value_digest_prev", )); - } else if deferred_proofs_digest_prev != zero_deferred_proofs_digest && - public_values.deferred_proofs_digest != deferred_proofs_digest_prev + } else if deferred_proofs_digest_prev != zero_deferred_proofs_digest + && public_values.deferred_proofs_digest != deferred_proofs_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "deferred_proofs_digest != deferred_proofs_digest_prev", )); - } else if !shard_proof.contains_cpu() && - public_values.committed_value_digest != commited_value_digest_prev + } else if !shard_proof.contains_cpu() + && public_values.committed_value_digest != commited_value_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "committed_value_digest != commited_value_digest_prev", )); - } else if !shard_proof.contains_cpu() && - public_values.deferred_proofs_digest != deferred_proofs_digest_prev + } else if !shard_proof.contains_cpu() + && public_values.deferred_proofs_digest != deferred_proofs_digest_prev { return Err(MachineVerificationError::InvalidPublicValues( "deferred_proofs_digest != deferred_proofs_digest_prev", diff --git a/crates/recursion/circuit-v2/src/constraints.rs b/crates/recursion/circuit-v2/src/constraints.rs index 03a6659c06..1512d144ae 100644 --- a/crates/recursion/circuit-v2/src/constraints.rs +++ b/crates/recursion/circuit-v2/src/constraints.rs @@ -140,8 +140,8 @@ where ) }) .unzip::<_, _, Vec<_>, Vec<_>>(); - zs.into_iter().product::>() * - zinvs.into_iter().product::>() + zs.into_iter().product::>() + * zinvs.into_iter().product::>() }) .collect::>>() .into_iter() @@ -190,20 +190,23 @@ where )); } if opening.main.next.len() != chip.width() { - return Err(OpeningShapeError::MainWidthMismatch(chip.width(), opening.main.next.len())); + return Err(OpeningShapeError::MainWidthMismatch( + chip.width(), + opening.main.next.len(), + )); } // Verify that the permutation width matches the expected value for the chip. - if opening.permutation.local.len() != - chip.permutation_width() * >::D + if opening.permutation.local.len() + != chip.permutation_width() * >::D { return Err(OpeningShapeError::PermutationWidthMismatch( chip.permutation_width(), opening.permutation.local.len(), )); } - if opening.permutation.next.len() != - chip.permutation_width() * >::D + if opening.permutation.next.len() + != chip.permutation_width() * >::D { return Err(OpeningShapeError::PermutationWidthMismatch( chip.permutation_width(), diff --git a/crates/recursion/circuit-v2/src/domain.rs b/crates/recursion/circuit-v2/src/domain.rs index ca7d9eafc2..7c16673615 100644 --- a/crates/recursion/circuit-v2/src/domain.rs +++ b/crates/recursion/circuit-v2/src/domain.rs @@ -50,8 +50,8 @@ where ) -> LagrangeSelectors::F, ::EF>> { let unshifted_point: Ext<_, _> = builder.eval(point * self.shift.inverse()); let z_h_expr = builder - .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) - - C::EF::one(); + .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) + - C::EF::one(); let z_h: Ext<_, _> = builder.eval(z_h_expr); let g = C::F::two_adic_generator(self.log_n); let ginv = g.inverse(); @@ -69,8 +69,8 @@ where point: Ext<::F, ::EF>, ) -> Ext<::F, ::EF> { let unshifted_power = builder.exp_power_of_2_v::>( - point * - C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) + point + * C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) .inverse() .cons(), Usize::Const(self.log_n), diff --git a/crates/recursion/circuit/src/constraints.rs b/crates/recursion/circuit/src/constraints.rs index e0968de092..f2df585d09 100644 --- a/crates/recursion/circuit/src/constraints.rs +++ b/crates/recursion/circuit/src/constraints.rs @@ -104,8 +104,8 @@ where ) }) .unzip::<_, _, Vec<_>, Vec<_>>(); - zs.into_iter().product::>() * - zinvs.into_iter().product::>() + zs.into_iter().product::>() + * zinvs.into_iter().product::>() }) .collect::>>() .into_iter() diff --git a/crates/recursion/circuit/src/domain.rs b/crates/recursion/circuit/src/domain.rs index 0e9a96becb..52b96536f2 100644 --- a/crates/recursion/circuit/src/domain.rs +++ b/crates/recursion/circuit/src/domain.rs @@ -88,8 +88,8 @@ where ) -> LagrangeSelectors::F, ::EF>> { let unshifted_point: Ext<_, _> = builder.eval(point * self.shift.inverse()); let z_h_expr = builder - .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) - - C::EF::one(); + .exp_power_of_2_v::>(unshifted_point, Usize::Const(self.log_n)) + - C::EF::one(); let z_h: Ext<_, _> = builder.eval(z_h_expr); let ginv = self.geninv(builder); LagrangeSelectors { @@ -106,8 +106,8 @@ where point: Ext<::F, ::EF>, ) -> Ext<::F, ::EF> { let unshifted_power = builder.exp_power_of_2_v::>( - point * - C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) + point + * C::EF::from_base_slice(&[self.shift, C::F::zero(), C::F::zero(), C::F::zero()]) .inverse() .cons(), Usize::Const(self.log_n), diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 236d809efc..07e7c7caf4 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -564,8 +564,8 @@ where addrs: ExpReverseBitsIo { result: ref addr, .. }, mult, }) => backfill((mult, addr)), - Instruction::HintBits(HintBitsInstr { output_addrs_mults, .. }) | - Instruction::Hint(HintInstr { output_addrs_mults, .. }) => { + Instruction::HintBits(HintBitsInstr { output_addrs_mults, .. }) + | Instruction::Hint(HintInstr { output_addrs_mults, .. }) => { output_addrs_mults .iter_mut() .for_each(|(addr, mult)| backfill((mult, addr))); @@ -590,9 +590,9 @@ where .for_each(|(addr, mult)| backfill((mult, addr))); } // Instructions that do not write to memory. - Instruction::Mem(MemInstr { kind: MemAccessKind::Read, .. }) | - Instruction::CommitPublicValues(_) | - Instruction::Print(_) => (), + Instruction::Mem(MemInstr { kind: MemAccessKind::Read, .. }) + | Instruction::CommitPublicValues(_) + | Instruction::Print(_) => (), } } }); diff --git a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs index 80b32bb079..db4206cea6 100644 --- a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs +++ b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs @@ -154,9 +154,9 @@ impl MachineAir for ExpReverseBitsLenCh let cols: &mut ExpReverseBitsLenCols = row.as_mut_slice().borrow_mut(); let prev_accum = accum; - accum = prev_accum * - prev_accum * - if event.exp[i] == F::one() { event.base } else { F::one() }; + accum = prev_accum + * prev_accum + * if event.exp[i] == F::one() { event.base } else { F::one() }; cols.x = event.base; cols.current_bit = event.exp[i]; diff --git a/crates/recursion/core-v2/src/chips/fri_fold.rs b/crates/recursion/core-v2/src/chips/fri_fold.rs index 0bd38ea238..875fce491b 100644 --- a/crates/recursion/core-v2/src/chips/fri_fold.rs +++ b/crates/recursion/core-v2/src/chips/fri_fold.rs @@ -428,10 +428,10 @@ mod tests { let ro_output = (0..i) .map(|i| { let i = i as usize; - ro_input[i].ext::() + - alpha_pow_input[i].ext::() * - (-ps_at_z[i].ext::() + mat_opening[i].ext::()) / - (-z.ext::() + x) + ro_input[i].ext::() + + alpha_pow_input[i].ext::() + * (-ps_at_z[i].ext::() + mat_opening[i].ext::()) + / (-z.ext::() + x) }) .collect::>(); diff --git a/crates/recursion/core-v2/src/chips/mem/variable.rs b/crates/recursion/core-v2/src/chips/mem/variable.rs index 71d123fd74..35793de3e7 100644 --- a/crates/recursion/core-v2/src/chips/mem/variable.rs +++ b/crates/recursion/core-v2/src/chips/mem/variable.rs @@ -62,8 +62,8 @@ impl MachineAir for MemoryChip { .instructions .par_iter() // Using `rayon` here provides a big speedup. .flat_map_iter(|instruction| match instruction { - Instruction::Hint(HintInstr { output_addrs_mults }) | - Instruction::HintBits(HintBitsInstr { + Instruction::Hint(HintInstr { output_addrs_mults }) + | Instruction::HintBits(HintBitsInstr { output_addrs_mults, input_addr: _, // No receive interaction for the hint operation }) => output_addrs_mults.iter().collect(), diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs index 89f80738aa..393910bdac 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/air.rs @@ -148,8 +148,8 @@ impl Poseidon2WideChip { for r in 0..NUM_INTERNAL_ROUNDS { // Add the round constant. let round = r + NUM_EXTERNAL_ROUNDS / 2; - let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } + - AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); + let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } + + AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); let mut sbox_deg_3 = add_rc.clone() * add_rc.clone() * add_rc.clone(); if let Some(internal_sbox) = local_row.internal_rounds_sbox() { diff --git a/crates/recursion/core/src/air/builder.rs b/crates/recursion/core/src/air/builder.rs index 4fe097503b..0794f09bd9 100644 --- a/crates/recursion/core/src/air/builder.rs +++ b/crates/recursion/core/src/air/builder.rs @@ -123,8 +123,8 @@ pub trait RecursionMemoryAirBuilder: RecursionInteractionAirBuilder { // Verify that value = limb_16 + limb_12 * 2^16. self.when(is_real.clone()).assert_eq( value, - limb_16.clone().into() + - limb_12.clone().into() * Self::Expr::from_canonical_u32(1 << 16), + limb_16.clone().into() + + limb_12.clone().into() * Self::Expr::from_canonical_u32(1 << 16), ); // Send the range checks for the limbs. diff --git a/crates/recursion/core/src/cpu/air/jump.rs b/crates/recursion/core/src/cpu/air/jump.rs index 7f14d492ca..8dbd002c02 100644 --- a/crates/recursion/core/src/cpu/air/jump.rs +++ b/crates/recursion/core/src/cpu/air/jump.rs @@ -26,14 +26,14 @@ impl CpuChip { // Verify the next row's fp. builder.when_first_row().assert_eq(local.fp, F::from_canonical_usize(STACK_SIZE)); let not_jump_instruction = AB::Expr::one() - is_jump_instr.clone(); - let expected_next_fp = local.selectors.is_jal * (local.fp + local.c.value()[0]) + - local.selectors.is_jalr * local.c.value()[0] + - not_jump_instruction * local.fp; + let expected_next_fp = local.selectors.is_jal * (local.fp + local.c.value()[0]) + + local.selectors.is_jalr * local.c.value()[0] + + not_jump_instruction * local.fp; builder.when_transition().when(next.is_real).assert_eq(next.fp, expected_next_fp); // Verify the a operand values. - let expected_a_val = local.selectors.is_jal * local.pc + - local.selectors.is_jalr * (local.pc + AB::Expr::one()); + let expected_a_val = local.selectors.is_jal * local.pc + + local.selectors.is_jalr * (local.pc + AB::Expr::one()); let expected_a_val_block = Block::from(expected_a_val); builder.when(is_jump_instr).assert_block_eq(*local.a.value(), expected_a_val_block); diff --git a/crates/recursion/core/src/cpu/air/mod.rs b/crates/recursion/core/src/cpu/air/mod.rs index f1046f71d6..437696a0ca 100644 --- a/crates/recursion/core/src/cpu/air/mod.rs +++ b/crates/recursion/core/src/cpu/air/mod.rs @@ -77,18 +77,18 @@ where self.eval_jump(builder, local, next, &mut next_pc); // If the instruction is not a jump or branch instruction, then next pc = pc + 1. - let not_branch_or_jump = one.clone() - - self.is_branch_instruction::(local) - - self.is_jump_instruction::(local); + let not_branch_or_jump = one.clone() + - self.is_branch_instruction::(local) + - self.is_jump_instruction::(local); next_pc += not_branch_or_jump.clone() * (local.pc + one); builder.when_transition().when(next.is_real).assert_eq(next_pc, next.pc); } // Constrain the syscalls. - let send_syscall = local.selectors.is_poseidon + - local.selectors.is_fri_fold + - local.selectors.is_exp_reverse_bits_len; + let send_syscall = local.selectors.is_poseidon + + local.selectors.is_fri_fold + + local.selectors.is_exp_reverse_bits_len; let operands = [ local.clk.into(), @@ -174,10 +174,10 @@ impl CpuChip { where AB: SP1RecursionAirBuilder, { - local.selectors.is_add + - local.selectors.is_sub + - local.selectors.is_mul + - local.selectors.is_div + local.selectors.is_add + + local.selectors.is_sub + + local.selectors.is_mul + + local.selectors.is_div } /// Expr to check for branch instructions. @@ -209,17 +209,17 @@ impl CpuChip { where AB: SP1RecursionAirBuilder, { - local.selectors.is_beq + - local.selectors.is_bne + - local.selectors.is_fri_fold + - local.selectors.is_poseidon + - local.selectors.is_store + - local.selectors.is_noop + - local.selectors.is_ext_to_felt + - local.selectors.is_commit + - local.selectors.is_trap + - local.selectors.is_halt + - local.selectors.is_exp_reverse_bits_len + local.selectors.is_beq + + local.selectors.is_bne + + local.selectors.is_fri_fold + + local.selectors.is_poseidon + + local.selectors.is_store + + local.selectors.is_noop + + local.selectors.is_ext_to_felt + + local.selectors.is_commit + + local.selectors.is_trap + + local.selectors.is_halt + + local.selectors.is_exp_reverse_bits_len } /// Expr to check for instructions that are commit instructions. diff --git a/crates/recursion/core/src/cpu/columns/opcode.rs b/crates/recursion/core/src/cpu/columns/opcode.rs index 657dfd2a2b..9bc733b83e 100644 --- a/crates/recursion/core/src/cpu/columns/opcode.rs +++ b/crates/recursion/core/src/cpu/columns/opcode.rs @@ -87,12 +87,12 @@ impl OpcodeSelectorCols { Opcode::Commit => self.is_commit = F::one(), Opcode::HintExt2Felt => self.is_ext_to_felt = F::one(), - Opcode::Hint | - Opcode::HintBits | - Opcode::PrintF | - Opcode::PrintE | - Opcode::RegisterPublicValue | - Opcode::CycleTracker => { + Opcode::Hint + | Opcode::HintBits + | Opcode::PrintF + | Opcode::PrintE + | Opcode::RegisterPublicValue + | Opcode::CycleTracker => { self.is_noop = F::one(); } diff --git a/crates/recursion/core/src/exp_reverse_bits/mod.rs b/crates/recursion/core/src/exp_reverse_bits/mod.rs index 1356b65ab0..06c9de7d98 100644 --- a/crates/recursion/core/src/exp_reverse_bits/mod.rs +++ b/crates/recursion/core/src/exp_reverse_bits/mod.rs @@ -378,8 +378,8 @@ impl ExpReverseBitsLenChip { // Constrain that the x_mem_access_flag is true when `is_first` or `is_last`. builder.when(local.is_real).assert_eq( local.x_mem_access_flag, - local.is_first.result + local.is_last.result - - local.is_first.result * local.is_last.result, + local.is_first.result + local.is_last.result + - local.is_first.result * local.is_last.result, ); // Make sure that x is only accessed when `is_real` is 1. diff --git a/crates/recursion/core/src/multi/mod.rs b/crates/recursion/core/src/multi/mod.rs index 9f9bcc88d9..6c4cc566db 100644 --- a/crates/recursion/core/src/multi/mod.rs +++ b/crates/recursion/core/src/multi/mod.rs @@ -233,13 +233,13 @@ where let next_fri_fold_cols = Self::fri_fold(&next); sub_builder.assert_eq( - local_multi_cols.is_fri_fold * - FriFoldChip::::do_memory_access::(&local_fri_fold_cols), + local_multi_cols.is_fri_fold + * FriFoldChip::::do_memory_access::(&local_fri_fold_cols), local_multi_cols.fri_fold_memory_access, ); sub_builder.assert_eq( - local_multi_cols.is_fri_fold * - FriFoldChip::::do_receive_table::(&local_fri_fold_cols), + local_multi_cols.is_fri_fold + * FriFoldChip::::do_receive_table::(&local_fri_fold_cols), local_multi_cols.fri_fold_receive_table, ); diff --git a/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs b/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs index 32f1efde97..6cd28028c1 100644 --- a/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs +++ b/crates/recursion/core/src/poseidon2_wide/air/control_flow.rs @@ -29,12 +29,12 @@ impl Poseidon2WideChip { let local_control_flow = local_row.control_flow(); let next_control_flow = next_row.control_flow(); - let local_is_real = local_control_flow.is_compress + - local_control_flow.is_absorb + - local_control_flow.is_finalize; - let next_is_real = next_control_flow.is_compress + - next_control_flow.is_absorb + - next_control_flow.is_finalize; + let local_is_real = local_control_flow.is_compress + + local_control_flow.is_absorb + + local_control_flow.is_finalize; + let next_is_real = next_control_flow.is_compress + + next_control_flow.is_absorb + + next_control_flow.is_finalize; builder.assert_bool(local_control_flow.is_compress); builder.assert_bool(local_control_flow.is_compress_output); @@ -165,8 +165,8 @@ impl Poseidon2WideChip { { builder.assert_eq( local_control_flow.is_compress_output, - local_control_flow.is_compress * - (AB::Expr::one() - local_control_flow.is_syscall_row), + local_control_flow.is_compress + * (AB::Expr::one() - local_control_flow.is_syscall_row), ); let mut transition_builder = builder.when_transition(); @@ -179,8 +179,8 @@ impl Poseidon2WideChip { // When we are at a compress output row, then ensure next row is either not real or is a // compress syscall row. transition_builder.when(local_control_flow.is_compress_output).assert_one( - (AB::Expr::one() - next_is_real.clone()) + - next_control_flow.is_compress * next_control_flow.is_syscall_row, + (AB::Expr::one() - next_is_real.clone()) + + next_control_flow.is_compress * next_control_flow.is_syscall_row, ); } @@ -226,8 +226,8 @@ impl Poseidon2WideChip { let mut absorb_builder = builder.when(local_control_flow.is_absorb); absorb_builder.assert_eq( - local_hash_workspace.hash_num * AB::Expr::from_canonical_u32(1 << 12) + - local_hash_workspace.absorb_num, + local_hash_workspace.hash_num * AB::Expr::from_canonical_u32(1 << 12) + + local_hash_workspace.absorb_num, local_syscall_params.absorb().hash_and_absorb_num, ); builder.send_range_check( @@ -248,13 +248,13 @@ impl Poseidon2WideChip { absorb_builder.assert_eq( local_hash_workspace.is_syscall_not_last_row, - local_control_flow.is_syscall_row * - (AB::Expr::one() - local_hash_workspace.is_last_row::()), + local_control_flow.is_syscall_row + * (AB::Expr::one() - local_hash_workspace.is_last_row::()), ); absorb_builder.assert_eq( local_hash_workspace.not_syscall_not_last_row, - (AB::Expr::one() - local_control_flow.is_syscall_row) * - (AB::Expr::one() - local_hash_workspace.is_last_row::()), + (AB::Expr::one() - local_control_flow.is_syscall_row) + * (AB::Expr::one() - local_hash_workspace.is_last_row::()), ); absorb_builder.assert_eq( local_hash_workspace.is_syscall_is_last_row, @@ -262,8 +262,8 @@ impl Poseidon2WideChip { ); absorb_builder.assert_eq( local_hash_workspace.not_syscall_is_last_row, - (AB::Expr::one() - local_control_flow.is_syscall_row) * - local_hash_workspace.is_last_row::(), + (AB::Expr::one() - local_control_flow.is_syscall_row) + * local_hash_workspace.is_last_row::(), ); absorb_builder.assert_eq( local_hash_workspace.is_last_row_ending_cursor_is_seven, @@ -271,14 +271,14 @@ impl Poseidon2WideChip { ); absorb_builder.assert_eq( local_hash_workspace.is_last_row_ending_cursor_not_seven, - local_hash_workspace.is_last_row::() * - (AB::Expr::one() - last_row_ending_cursor_is_seven), + local_hash_workspace.is_last_row::() + * (AB::Expr::one() - last_row_ending_cursor_is_seven), ); builder.assert_eq( local_control_flow.is_absorb_not_last_row, - local_control_flow.is_absorb * - (AB::Expr::one() - local_hash_workspace.is_last_row::()), + local_control_flow.is_absorb + * (AB::Expr::one() - local_hash_workspace.is_last_row::()), ); builder.assert_eq( local_control_flow.is_absorb_last_row, @@ -287,8 +287,8 @@ impl Poseidon2WideChip { builder.assert_eq( local_control_flow.is_absorb_no_perm, - local_control_flow.is_absorb * - (AB::Expr::one() - local_hash_workspace.do_perm::()), + local_control_flow.is_absorb + * (AB::Expr::one() - local_hash_workspace.do_perm::()), ); } @@ -302,10 +302,10 @@ impl Poseidon2WideChip { // `last_row_ending_cursor` is inclusive of the last element, // while state_cursor + syscall input_len is not. absorb_builder.when(local_control_flow.is_syscall_row).assert_eq( - local_hash_workspace.state_cursor + local_syscall_params.absorb().input_len - - AB::Expr::one(), - local_hash_workspace.num_remaining_rows * AB::Expr::from_canonical_usize(RATE) + - local_hash_workspace.last_row_ending_cursor, + local_hash_workspace.state_cursor + local_syscall_params.absorb().input_len + - AB::Expr::one(), + local_hash_workspace.num_remaining_rows * AB::Expr::from_canonical_usize(RATE) + + local_hash_workspace.last_row_ending_cursor, ); // Range check that last_row_ending_cursor is between [0, 7]. diff --git a/crates/recursion/core/src/poseidon2_wide/air/permutation.rs b/crates/recursion/core/src/poseidon2_wide/air/permutation.rs index 0176e3eebc..673a5c50dc 100644 --- a/crates/recursion/core/src/poseidon2_wide/air/permutation.rs +++ b/crates/recursion/core/src/poseidon2_wide/air/permutation.rs @@ -50,9 +50,9 @@ impl Poseidon2WideChip { (compress_input, absorb_input, finalize_input) }; - control_flow.is_compress * compress_input + - control_flow.is_absorb * absorb_input + - control_flow.is_finalize * finalize_input + control_flow.is_compress * compress_input + + control_flow.is_absorb * absorb_input + + control_flow.is_finalize * finalize_input }); // Apply the initial round. @@ -140,8 +140,8 @@ impl Poseidon2WideChip { for r in 0..NUM_INTERNAL_ROUNDS { // Add the round constant. let round = r + NUM_EXTERNAL_ROUNDS / 2; - let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } + - AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); + let add_rc = if r == 0 { state[0].clone() } else { s0[r - 1].into() } + + AB::Expr::from_wrapped_u32(RC_16_30_U32[round][0]); let mut sbox_deg_3 = add_rc.clone() * add_rc.clone() * add_rc.clone(); if let Some(internal_sbox) = perm_cols.internal_rounds_sbox() { diff --git a/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs b/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs index b4a6e9fcc0..a208065f21 100644 --- a/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs +++ b/crates/recursion/core/src/poseidon2_wide/columns/opcode_workspace.rs @@ -107,23 +107,22 @@ impl AbsorbWorkspace { where T: Into, { - self.is_syscall_not_last_row.into() + - self.not_syscall_not_last_row.into() + - self.is_last_row_ending_cursor_is_seven.into() + self.is_syscall_not_last_row.into() + + self.not_syscall_not_last_row.into() + + self.is_last_row_ending_cursor_is_seven.into() } pub(crate) fn num_consumed(&self) -> AB::Expr where T: Into, { - self.is_syscall_not_last_row.into() * - (AB::Expr::from_canonical_usize(RATE) - self.state_cursor.into()) + - self.is_syscall_is_last_row.into() * - (self.last_row_ending_cursor.into() - self.state_cursor.into() + - AB::Expr::one()) + - self.not_syscall_not_last_row.into() * AB::Expr::from_canonical_usize(RATE) + - self.not_syscall_is_last_row.into() * - (self.last_row_ending_cursor.into() + AB::Expr::one()) + self.is_syscall_not_last_row.into() + * (AB::Expr::from_canonical_usize(RATE) - self.state_cursor.into()) + + self.is_syscall_is_last_row.into() + * (self.last_row_ending_cursor.into() - self.state_cursor.into() + AB::Expr::one()) + + self.not_syscall_not_last_row.into() * AB::Expr::from_canonical_usize(RATE) + + self.not_syscall_is_last_row.into() + * (self.last_row_ending_cursor.into() + AB::Expr::one()) } } diff --git a/crates/recursion/core/src/poseidon2_wide/trace.rs b/crates/recursion/core/src/poseidon2_wide/trace.rs index ae6db5f84e..db4fa9b3dd 100644 --- a/crates/recursion/core/src/poseidon2_wide/trace.rs +++ b/crates/recursion/core/src/poseidon2_wide/trace.rs @@ -300,10 +300,10 @@ impl Poseidon2WideChip { // the syscall row. For absorb calls that are only one row, // last_row_num_consumed = absorb_event.input_len. if is_syscall_row { - last_row_ending_cursor = (absorb_iter.state_cursor + - absorb_event.input_len.as_canonical_u32() as usize - - 1) % - RATE; + last_row_ending_cursor = (absorb_iter.state_cursor + + absorb_event.input_len.as_canonical_u32() as usize + - 1) + % RATE; } absorb_workspace.last_row_ending_cursor = diff --git a/crates/recursion/core/src/runtime/mod.rs b/crates/recursion/core/src/runtime/mod.rs index 00ba600028..045a6557be 100644 --- a/crates/recursion/core/src/runtime/mod.rs +++ b/crates/recursion/core/src/runtime/mod.rs @@ -986,9 +986,9 @@ where let current_x_val = x_record.value[0]; let prev_accum = accum; - accum = prev_accum * - prev_accum * - if current_bit == F::one() { current_x_val } else { F::one() }; + accum = prev_accum + * prev_accum + * if current_bit == F::one() { current_x_val } else { F::one() }; // On the last iteration, write accum to the address pointed to in `base`. if m == len - F::one() { @@ -1041,9 +1041,9 @@ where self.timestamp += 1; self.access = CpuRecord::default(); - if self.timestamp >= early_exit_ts || - instruction.opcode == Opcode::HALT || - instruction.opcode == Opcode::TRAP + if self.timestamp >= early_exit_ts + || instruction.opcode == Opcode::HALT + || instruction.opcode == Opcode::TRAP { break; } diff --git a/crates/recursion/program/src/constraints.rs b/crates/recursion/program/src/constraints.rs index a279a0c5a3..3c92440992 100644 --- a/crates/recursion/program/src/constraints.rs +++ b/crates/recursion/program/src/constraints.rs @@ -92,8 +92,8 @@ where .filter(|(j, _)| *j != i) .map(|(_, other_domain)| { let first_point: Ext<_, _> = builder.eval(domain.first_point()); - other_domain.zp_at_point(builder, zeta) * - other_domain.zp_at_point(builder, first_point).inverse() + other_domain.zp_at_point(builder, zeta) + * other_domain.zp_at_point(builder, first_point).inverse() }) .product::>() }) diff --git a/crates/recursion/program/src/fri/domain.rs b/crates/recursion/program/src/fri/domain.rs index 7a6f46b478..bb05f2a7cc 100644 --- a/crates/recursion/program/src/fri/domain.rs +++ b/crates/recursion/program/src/fri/domain.rs @@ -67,8 +67,8 @@ where ) -> LagrangeSelectors::F, ::EF>> { let unshifted_point: Ext<_, _> = builder.eval(point * self.shift.inverse()); let z_h_expr = builder - .exp_power_of_2_v::>(unshifted_point, Usize::Var(self.log_n)) - - C::EF::one(); + .exp_power_of_2_v::>(unshifted_point, Usize::Var(self.log_n)) + - C::EF::one(); let z_h: Ext<_, _> = builder.eval(z_h_expr); LagrangeSelectors { diff --git a/crates/stark/src/air/polynomial.rs b/crates/stark/src/air/polynomial.rs index 6e08ba2227..40f5fdbe84 100644 --- a/crates/stark/src/air/polynomial.rs +++ b/crates/stark/src/air/polynomial.rs @@ -246,9 +246,9 @@ impl PartialEq> for Polynomial { (other, self) }; for i in 0..longer.coefficients.len() { - if (i < shorter.coefficients.len() && - shorter.coefficients[i] != longer.coefficients[i]) || - (i >= shorter.coefficients.len() && longer.coefficients[i] != T::zero()) + if (i < shorter.coefficients.len() + && shorter.coefficients[i] != longer.coefficients[i]) + || (i >= shorter.coefficients.len() && longer.coefficients[i] != T::zero()) { return false; } diff --git a/crates/stark/src/machine.rs b/crates/stark/src/machine.rs index 73ff94d2f6..4f983b7e1f 100644 --- a/crates/stark/src/machine.rs +++ b/crates/stark/src/machine.rs @@ -375,8 +375,8 @@ impl>> StarkMachine { for i in 0..chips.len() { let trace_width = traces[i].0.width(); let pre_width = traces[i].1.map_or(0, p3_matrix::Matrix::width); - let permutation_width = permutation_traces[i].width() * - >::D; + let permutation_width = permutation_traces[i].width() + * >::D; let total_width = trace_width + pre_width + permutation_width; tracing::debug!( "{:<11} | Main Cols = {:<5} | Pre Cols = {:<5} | Perm Cols = {:<5} | Rows = {:<10} | Cells = {:<10}", diff --git a/crates/stark/src/permutation.rs b/crates/stark/src/permutation.rs index 79322cb279..583cb80641 100644 --- a/crates/stark/src/permutation.rs +++ b/crates/stark/src/permutation.rs @@ -211,8 +211,8 @@ pub fn eval_permutation_constraints( let mut rlc = alpha.clone(); let mut betas = beta.powers(); - rlc += betas.next().unwrap() * - AB::ExprEF::from_canonical_usize(interaction.argument_index()); + rlc += betas.next().unwrap() + * AB::ExprEF::from_canonical_usize(interaction.argument_index()); for (field, beta) in interaction.values.iter().zip(betas.clone()) { let elem = field.apply::(&preprocessed_local, main_local); rlc += beta * elem; @@ -223,8 +223,8 @@ pub fn eval_permutation_constraints( multiplicities.push( interaction .multiplicity - .apply::(&preprocessed_local, main_local) * - send_factor, + .apply::(&preprocessed_local, main_local) + * send_factor, ); } diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index 3fcbeb9f13..4a87112831 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -306,9 +306,9 @@ where let trace_width = traces[i].width(); let prep_width = prep_traces[i].map_or(0, |x| x.width()); let permutation_width = permutation_traces[i].width(); - let total_width = trace_width + - prep_width + - permutation_width * >::D; + let total_width = trace_width + + prep_width + + permutation_width * >::D; tracing::debug!( "{:<15} | Main Cols = {:<5} | Pre Cols = {:<5} | Perm Cols = {:<5} | Rows = {:<5} | Cells = {:<10}", chips[i].name(), diff --git a/crates/stark/src/verifier.rs b/crates/stark/src/verifier.rs index 2b6e5b8079..43bbf61798 100644 --- a/crates/stark/src/verifier.rs +++ b/crates/stark/src/verifier.rs @@ -205,7 +205,10 @@ impl>> Verifier { )); } if opening.main.next.len() != chip.width() { - return Err(OpeningShapeError::MainWidthMismatch(chip.width(), opening.main.next.len())); + return Err(OpeningShapeError::MainWidthMismatch( + chip.width(), + opening.main.next.len(), + )); } // Verify that the permutation width matches the expected value for the chip. @@ -344,8 +347,8 @@ impl>> Verifier { .enumerate() .filter(|(j, _)| *j != i) .map(|(_, other_domain)| { - other_domain.zp_at_point(zeta) * - other_domain.zp_at_point(domain.first_point()).inverse() + other_domain.zp_at_point(zeta) + * other_domain.zp_at_point(domain.first_point()).inverse() }) .product::() }) diff --git a/rustfmt.toml b/rustfmt.toml index 68c3c93033..21efa865c0 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,11 +1,11 @@ reorder_imports = true -imports_granularity = "Crate" +# imports_granularity = "Crate" use_small_heuristics = "Max" -comment_width = 100 -wrap_comments = true -binop_separator = "Back" -trailing_comma = "Vertical" -trailing_semicolon = false +# comment_width = 100 +# wrap_comments = true +# binop_separator = "Back" +# trailing_comma = "Vertical" +# trailing_semicolon = false use_field_init_shorthand = true -format_code_in_doc_comments = true -doc_comment_code_block_width = 100 +# format_code_in_doc_comments = true +# doc_comment_code_block_width = 100 From ee0dec7b04f4181b7ae0c5ab2548455b6005d8cc Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 17:19:04 -0700 Subject: [PATCH 099/268] fix fmt --- crates/cli/src/commands/vkey.rs | 3 +- crates/core/machine/src/utils/prove.rs | 7 ++- crates/prover/scripts/e2e.rs | 4 +- crates/recursion/circuit-v2/src/fri.rs | 7 ++- .../circuit-v2/src/machine/compress.rs | 29 ++++----- .../recursion/circuit-v2/src/machine/core.rs | 60 ++++++++++--------- .../circuit-v2/src/machine/deferred.rs | 8 +-- crates/recursion/circuit-v2/src/utils.rs | 6 +- crates/stark/src/prover.rs | 3 +- 9 files changed, 66 insertions(+), 61 deletions(-) diff --git a/crates/cli/src/commands/vkey.rs b/crates/cli/src/commands/vkey.rs index 58fd64e3d7..a8aeb1c183 100644 --- a/crates/cli/src/commands/vkey.rs +++ b/crates/cli/src/commands/vkey.rs @@ -2,8 +2,7 @@ use std::fs::File; use anyhow::Result; use clap::Parser; -use sp1_sdk::HashableKey; -use sp1_sdk::ProverClient; +use sp1_sdk::{HashableKey, ProverClient}; use std::io::Read; #[derive(Parser)] diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index a30d5ff15b..b2655c8089 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -14,17 +14,18 @@ use p3_field::AbstractField; use p3_maybe_rayon::prelude::*; use serde::{de::DeserializeOwned, Serialize}; use size::Size; -use sp1_stark::MachineProvingKey; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, MachineVerificationError}; +use sp1_stark::{ + baby_bear_poseidon2::BabyBearPoseidon2, MachineProvingKey, MachineVerificationError, +}; use std::thread::ScopedJoinHandle; use thiserror::Error; use p3_baby_bear::BabyBear; use p3_field::PrimeField32; -use crate::riscv::cost::CostEstimator; use crate::{ io::{SP1PublicValues, SP1Stdin}, + riscv::cost::CostEstimator, utils::{chunk_vec, concurrency::TurnBasedSync}, }; use sp1_core_executor::events::sorted_table_lines; diff --git a/crates/prover/scripts/e2e.rs b/crates/prover/scripts/e2e.rs index bf969077f0..30415f432c 100644 --- a/crates/prover/scripts/e2e.rs +++ b/crates/prover/scripts/e2e.rs @@ -113,7 +113,7 @@ // &build_dir, // ); -// println!("groth16 proof: {:?}", String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); -// } +// println!("groth16 proof: {:?}", +// String::from_utf8(hex::encode(proof.encoded_proof)).unwrap()); } pub fn main() {} diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 413c64422b..ae4b12c457 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -134,7 +134,8 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let pow = log_height_pow[log_height]; // Fill in any missing powers of alpha. for _ in alpha_pows.len()..pow + 1 { - // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * alpha); + // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * + // alpha); let new_alpha: Ext<_, _> = builder.uninit(); builder.operations.push(DslIr::MulE( new_alpha, @@ -281,8 +282,8 @@ pub fn verify_query, SC: BabyBearFriConfigVariable // Unroll the `folded_eval` calculation to avoid symbolic expression overhead. // folded_eval = builder - // .eval(evals_ext[0] + (beta - xs[0]) * (evals_ext[1] - evals_ext[0]) / (xs[1] - xs[0])); - // x = builder.eval(x * x); + // .eval(evals_ext[0] + (beta - xs[0]) * (evals_ext[1] - evals_ext[0]) / (xs[1] - + // xs[0])); x = builder.eval(x * x); // let temp_1 = xs[1] - xs[0]; let temp_1: Felt<_> = builder.uninit(); diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 10ee4dca1d..6f67f90279 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -75,11 +75,11 @@ where /// implementation in this function assumes a fixed recursive verifier speicified by /// `recursive_vk`. /// - Deferred proofs: proofs which are recursive proof of a batch of deferred proofs. The - /// implementation in this function assumes a fixed deferred verification program specified - /// by `deferred_vk`. - /// - Compress proofs: these are proofs which refer to a prove of this program. The key for - /// it is part of public values will be propagated accross all levels of recursion and will - /// be checked against itself as in [sp1_prover::Prover] or as in [super::SP1RootVerifier]. + /// implementation in this function assumes a fixed deferred verification program specified by + /// `deferred_vk`. + /// - Compress proofs: these are proofs which refer to a prove of this program. The key for it + /// is part of public values will be propagated accross all levels of recursion and will be + /// checked against itself as in [sp1_prover::Prover] or as in [super::SP1RootVerifier]. pub fn verify( builder: &mut Builder, machine: &StarkMachine, @@ -259,7 +259,8 @@ where // // Consistency checks for all accumulated values. // Assert that the sp1_vk digest is always the same. - // for (digest, current) in sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { + // for (digest, current) in + // sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { // builder.assert_felt_eq(*digest, current); // } @@ -305,9 +306,9 @@ where // Digest constraints. { - // // If `commited_value_digest` is not zero, then `public_values.commited_value_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `commited_value_digest` is not zero, then + // `public_values.commited_value_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -339,9 +340,9 @@ where } } - // // If `deferred_proofs_digest` is not zero, then `public_values.deferred_proofs_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `deferred_proofs_digest` is not zero, then + // `public_values.deferred_proofs_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // let d = felt2var(builder, deferred_proofs_digest[i]); @@ -457,8 +458,8 @@ where // Set the exit code. compress_public_values.exit_code = exit_code; - // // If the proof is complete, make completeness assertions and set the flag. Otherwise, check - // // the flag is zero and set the public value to zero. + // // If the proof is complete, make completeness assertions and set the flag. Otherwise, + // check // the flag is zero and set the public value to zero. // builder.if_eq(is_complete, C::N::one()).then_or_else( // |builder| { // builder.assign(compress_public_values.is_complete, C::F::one()); diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 6465b6b7b6..56800b147b 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -289,10 +289,12 @@ where // Execution shard constraints. // let execution_shard = felt2var(builder, public_values.execution_shard); { - // If the shard has a "CPU" chip, then the execution shard should be incremented by 1. + // If the shard has a "CPU" chip, then the execution shard should be incremented by + // 1. if contains_cpu { // Assert that the shard of the proof is equal to the current shard. - // builder.assert_felt_eq(current_execution_shard, public_values.execution_shard); + // builder.assert_felt_eq(current_execution_shard, + // public_values.execution_shard); current_execution_shard = builder.eval(current_execution_shard + C::F::one()); } @@ -300,8 +302,8 @@ where // Program counter constraints. { - // // If it's the first shard (which is the first execution shard), then the start_pc - // // should be vk.pc_start. + // // If it's the first shard (which is the first execution shard), then the + // start_pc // should be vk.pc_start. // builder.if_eq(shard, C::N::one()).then(|builder| { // builder.assert_felt_eq(public_values.start_pc, vk.pc_start); // }); @@ -309,10 +311,10 @@ where // // Assert that the start_pc of the proof is equal to the current pc. // builder.assert_felt_eq(current_pc, public_values.start_pc); - // // If it's not a shard with "CPU", then assert that the start_pc equals the next_pc. - // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { - // builder.assert_felt_eq(public_values.start_pc, public_values.next_pc); - // }); + // // If it's not a shard with "CPU", then assert that the start_pc equals the + // next_pc. builder.if_ne(contains_cpu, C::N::one()).then(|builder| + // { builder.assert_felt_eq(public_values.start_pc, + // public_values.next_pc); }); // // If it's a shard with "CPU", then assert that the start_pc is not zero. // builder.if_eq(contains_cpu, C::N::one()).then(|builder| { @@ -331,12 +333,12 @@ where // Memory initialization & finalization constraints. { - // // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first execution shard. - // builder.if_eq(execution_shard, C::N::one()).then(|builder| { - // // Assert that the MemoryInitialize address bits are zero. - // for bit in current_init_addr_bits.iter() { - // builder.assert_felt_eq(*bit, C::F::zero()); - // } + // // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first + // execution shard. builder.if_eq(execution_shard, + // C::N::one()).then(|builder| { // Assert that the + // MemoryInitialize address bits are zero. for bit in + // current_init_addr_bits.iter() { builder.assert_felt_eq(* + // bit, C::F::zero()); } // // Assert that the MemoryFinalize address bits are zero. // for bit in current_finalize_addr_bits.iter() { @@ -373,8 +375,8 @@ where // } // }); - // // Assert that if MemoryFinalize is not present, then the address bits are the same. - // builder + // // Assert that if MemoryFinalize is not present, then the address bits are the + // same. builder // .if_ne(contains_memory_finalize, C::N::one()) // .then(|builder| { // for (prev_bit, last_bit) in public_values @@ -404,9 +406,9 @@ where // Digest constraints. { - // // If `commited_value_digest` is not zero, then `public_values.commited_value_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `commited_value_digest` is not zero, then + // `public_values.commited_value_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -428,8 +430,8 @@ where // } // }); - // // If it's not a shard with "CPU", then the committed value digest should not change. - // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { + // // If it's not a shard with "CPU", then the committed value digest should not + // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { // for j in 0..WORD_SIZE { @@ -449,9 +451,9 @@ where } } - // // If `deferred_proofs_digest` is not zero, then `public_values.deferred_proofs_digest - // // should be the current value. - // let is_zero: Var<_> = builder.eval(C::N::one()); + // // If `deferred_proofs_digest` is not zero, then + // `public_values.deferred_proofs_digest // should be the current + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // let d = felt2var(builder, deferred_proofs_digest[i]); @@ -469,8 +471,8 @@ where // } // }); - // // If it's not a shard with "CPU", then the deferred proofs digest should not change. - // builder.if_ne(contains_cpu, C::N::one()).then(|builder| { + // // If it's not a shard with "CPU", then the deferred proofs digest should not + // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { // #[allow(clippy::needless_range_loop)] // for i in 0..deferred_proofs_digest.len() { // builder.assert_felt_eq( @@ -552,9 +554,9 @@ where // // If the proof represents a complete proof, make completeness assertions. // // - // // *Remark*: In this program, this only happends if there is one shard and the program has - // // no deferred proofs to verify. However, the completeness check is independent of these - // // facts. + // // *Remark*: In this program, this only happends if there is one shard and the + // program has // no deferred proofs to verify. However, the completeness + // check is independent of these // facts. // builder.if_eq(is_complete, C::N::one()).then(|builder| { // assert_complete(builder, recursion_public_values, &reconstruct_challenger) // }); diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 25d125548f..48e6da7325 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -69,10 +69,10 @@ pub struct SP1DeferredWitnessVariable< impl SP1DeferredVerifier where SC: BabyBearFriConfigVariable< - C, - FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], - >, + C, + FriChallengerVariable = DuplexChallengerVariable, + Digest = [Felt; DIGEST_SIZE], + >, C: CircuitConfig>, >::ProverData>: Clone, A: MachineAir + for<'a> Air>, diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index 8feb69d78d..9790840095 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -2,11 +2,11 @@ use std::mem::MaybeUninit; use p3_baby_bear::BabyBear; use p3_bn254_fr::Bn254Fr; -use p3_field::AbstractField; -use p3_field::PrimeField32; +use p3_field::{AbstractField, PrimeField32}; use sp1_recursion_compiler::ir::{Builder, Config, Felt, Var}; use sp1_recursion_core_v2::{air::ChallengerPublicValues, DIGEST_SIZE}; + use sp1_stark::Word; pub(crate) unsafe fn uninit_challenger_pv( @@ -105,6 +105,7 @@ pub(crate) mod tests { use sp1_recursion_core_v2::{machine::RecursionAir, Runtime}; use sp1_stark::{ baby_bear_poseidon2::BabyBearPoseidon2, CpuProver, InnerChallenge, InnerVal, MachineProver, + MachineProvingKey, }; use crate::witness::WitnessBlock; @@ -142,6 +143,7 @@ pub(crate) mod tests { let proof_wide_span = tracing::debug_span!("Run test with wide machine").entered(); let wide_machine = RecursionAir::<_, 3, 0>::compress_machine(SC::default()); let (pk, vk) = wide_machine.setup(&program); + let pk = P::DeviceProvingKey::from_host(pk); let result = run_test_machine_with_prover::<_, _, P>(records.clone(), wide_machine, pk, vk); proof_wide_span.exit(); diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index 031d6737a8..4a87112831 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -16,10 +16,9 @@ use super::{ quotient_values, Com, OpeningProof, StarkGenericConfig, StarkMachine, StarkProvingKey, Val, VerifierConstraintFolder, }; -use crate::Challenger; use crate::{ air::MachineAir, lookup::InteractionBuilder, opts::SP1CoreOpts, record::MachineRecord, - DebugConstraintBuilder, MachineChip, MachineProof, PackedChallenge, PcsProverData, + Challenger, DebugConstraintBuilder, MachineChip, MachineProof, PackedChallenge, PcsProverData, ProverConstraintFolder, ShardCommitment, ShardMainData, ShardProof, StarkVerifyingKey, }; From 1d3dbde85574250329e750a21c4ca7a914fe92b7 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 17:36:06 -0700 Subject: [PATCH 100/268] fix some bugs --- .../src/chips/poseidon2_skinny/trace.rs | 2 +- .../core-v2/src/chips/poseidon2_wide/trace.rs | 2 +- crates/recursion/core-v2/src/machine.rs | 3 ++- crates/stark/src/bb31_poseidon2.rs | 25 +++++++++++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs index 359de4fa9e..282e587ba7 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs @@ -6,7 +6,7 @@ use std::{ use itertools::Itertools; use p3_field::PrimeField32; -use p3_matrix::{dense::RowMajorMatrix, Matrix}; +use p3_matrix::dense::RowMajorMatrix; use sp1_core_machine::utils::pad_rows_fixed; use sp1_primitives::RC_16_30_U32; use sp1_stark::air::MachineAir; diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index dfe81855c9..90329b6596 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -2,7 +2,7 @@ use std::{borrow::BorrowMut, mem::size_of}; use p3_air::BaseAir; use p3_field::PrimeField32; -use p3_matrix::{dense::RowMajorMatrix, Matrix}; +use p3_matrix::dense::RowMajorMatrix; use p3_maybe_rayon::prelude::*; use sp1_core_machine::utils::next_power_of_two; use sp1_primitives::RC_16_30_U32; diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index 5c5c725ddb..c16ae11d43 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -185,7 +185,8 @@ pub mod tests { } // Run with the poseidon2 skinny chip. - let skinny_machine = B::machine_skinny_with_all_chips(BabyBearPoseidon2::compressed()); + let skinny_machine = + B::machine_skinny_with_all_chips(BabyBearPoseidon2::ultra_compressed()); let (pk, vk) = skinny_machine.setup(&program); let result = run_test_machine(vec![runtime.record], skinny_machine, pk, vk); if let Err(e) = result { diff --git a/crates/stark/src/bb31_poseidon2.rs b/crates/stark/src/bb31_poseidon2.rs index cba6beaa8e..0ad00e86ac 100644 --- a/crates/stark/src/bb31_poseidon2.rs +++ b/crates/stark/src/bb31_poseidon2.rs @@ -226,6 +226,19 @@ pub mod baby_bear_poseidon2 { FriConfig { log_blowup: 2, num_queries, proof_of_work_bits: 16, mmcs: challenge_mmcs } } + #[must_use] + pub fn ultra_compressed_fri_config() -> FriConfig { + let perm = my_perm(); + let hash = MyHash::new(perm.clone()); + let compress = MyCompress::new(perm.clone()); + let challenge_mmcs = ChallengeMmcs::new(ValMmcs::new(hash, compress)); + let num_queries = match std::env::var("FRI_QUERIES") { + Ok(value) => value.parse().unwrap(), + Err(_) => 33, + }; + FriConfig { log_blowup: 3, num_queries, proof_of_work_bits: 16, mmcs: challenge_mmcs } + } + enum BabyBearPoseidon2Type { Default, Compressed, @@ -263,6 +276,18 @@ pub mod baby_bear_poseidon2 { let pcs = Pcs::new(27, dft, val_mmcs, fri_config); Self { pcs, perm, config_type: BabyBearPoseidon2Type::Compressed } } + + #[must_use] + pub fn ultra_compressed() -> Self { + let perm = my_perm(); + let hash = MyHash::new(perm.clone()); + let compress = MyCompress::new(perm.clone()); + let val_mmcs = ValMmcs::new(hash, compress); + let dft = Dft {}; + let fri_config = ultra_compressed_fri_config(); + let pcs = Pcs::new(27, dft, val_mmcs, fri_config); + Self { pcs, perm, config_type: BabyBearPoseidon2Type::Compressed } + } } impl Clone for BabyBearPoseidon2 { From 0801d419d62ee81bd2d1c6dd69fb6b3a0951826a Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 17:36:42 -0700 Subject: [PATCH 101/268] hm --- crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs | 1 + crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs index 282e587ba7..768f4d0126 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs @@ -7,6 +7,7 @@ use std::{ use itertools::Itertools; use p3_field::PrimeField32; use p3_matrix::dense::RowMajorMatrix; +use p3_matrix::Matrix; use sp1_core_machine::utils::pad_rows_fixed; use sp1_primitives::RC_16_30_U32; use sp1_stark::air::MachineAir; diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index 90329b6596..f233648a41 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -3,6 +3,7 @@ use std::{borrow::BorrowMut, mem::size_of}; use p3_air::BaseAir; use p3_field::PrimeField32; use p3_matrix::dense::RowMajorMatrix; +use p3_matrix::Matrix; use p3_maybe_rayon::prelude::*; use sp1_core_machine::utils::next_power_of_two; use sp1_primitives::RC_16_30_U32; From 27e978fb3229258e60ff64010c061913630db032 Mon Sep 17 00:00:00 2001 From: Bhargav Annem Date: Mon, 26 Aug 2024 17:39:09 -0700 Subject: [PATCH 102/268] feat: v1.3.0-rc1 --- crates/core/machine/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/core/machine/src/lib.rs b/crates/core/machine/src/lib.rs index de273e65c3..bf99370ec4 100644 --- a/crates/core/machine/src/lib.rs +++ b/crates/core/machine/src/lib.rs @@ -30,4 +30,4 @@ pub mod utils; /// This string should be updated whenever any step in verifying an SP1 proof changes, including /// core, recursion, and plonk-bn254. This string is used to download SP1 artifacts and the gnark /// docker image. -pub const SP1_CIRCUIT_VERSION: &str = "v1.2.0-rc1"; +pub const SP1_CIRCUIT_VERSION: &str = "v1.3.0-rc1"; From 5dede3f76bb1f596e3f10da95c073e133d8d869c Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 18:01:48 -0700 Subject: [PATCH 103/268] feat: update gpu image --- crates/cuda/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/cuda/src/lib.rs b/crates/cuda/src/lib.rs index e5aabfcaca..6654acd4ab 100644 --- a/crates/cuda/src/lib.rs +++ b/crates/cuda/src/lib.rs @@ -85,7 +85,7 @@ impl SP1CudaProver { /// [SP1ProverClient] that can be used to communicate with the container. pub fn new() -> Self { let container_name = "sp1-gpu"; - let image_name = "jtguibas/sp1-gpu:v1.2.0-rc1"; + let image_name = "jtguibas/sp1-gpu:v1.3.0-rc1"; let cleaned_up = Arc::new(AtomicBool::new(false)); let cleanup_name = container_name; From d211540cc7216e255d3ee5532c3c98c1dbb1a656 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Mon, 26 Aug 2024 19:08:29 -0700 Subject: [PATCH 104/268] improve --- crates/sdk/src/provers/cuda.rs | 35 +++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/crates/sdk/src/provers/cuda.rs b/crates/sdk/src/provers/cuda.rs index 04558794fc..944ef9d44d 100644 --- a/crates/sdk/src/provers/cuda.rs +++ b/crates/sdk/src/provers/cuda.rs @@ -86,22 +86,39 @@ impl Prover for CudaProver { // Genenerate the wrap proof. let outer_proof = self.cuda_prover.wrap_bn254(compress_proof)?; - let plonk_bn254_aritfacts = if sp1_prover::build::sp1_dev_mode() { - sp1_prover::build::try_build_plonk_bn254_artifacts_dev( - &outer_proof.vk, - &outer_proof.proof, - ) - } else { - try_install_circuit_artifacts() - }; - let proof = self.prover.wrap_plonk_bn254(outer_proof, &plonk_bn254_aritfacts); if kind == SP1ProofKind::Plonk { + let plonk_bn254_aritfacts = if sp1_prover::build::sp1_dev_mode() { + sp1_prover::build::try_build_plonk_bn254_artifacts_dev( + &outer_proof.vk, + &outer_proof.proof, + ) + } else { + try_install_circuit_artifacts() + }; + let proof = self.prover.wrap_plonk_bn254(outer_proof, &plonk_bn254_aritfacts); return Ok(SP1ProofWithPublicValues { proof: SP1Proof::Plonk(proof), stdin, public_values, sp1_version: self.version().to_string(), }); + } else if kind == SP1ProofKind::Groth16 { + let groth16_bn254_artifacts = if sp1_prover::build::sp1_dev_mode() { + sp1_prover::build::try_build_groth16_bn254_artifacts_dev( + &outer_proof.vk, + &outer_proof.proof, + ) + } else { + try_install_circuit_artifacts() + }; + + let proof = self.prover.wrap_groth16_bn254(outer_proof, &groth16_bn254_artifacts); + return Ok(SP1ProofWithPublicValues { + proof: SP1Proof::Groth16(proof), + stdin, + public_values, + sp1_version: self.version().to_string(), + }); } unreachable!() From e64133f3a659041a2c79c2d412f8199354c8099f Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 27 Aug 2024 09:23:18 -0700 Subject: [PATCH 105/268] switch to ultra compressed --- crates/recursion/compiler/src/circuit/compiler.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 07e7c7caf4..886ea6c945 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -821,8 +821,9 @@ mod tests { } // Run with the poseidon2 skinny chip. - let skinny_machine = - RecursionAir::<_, 9, 0>::machine_skinny_with_all_chips(BabyBearPoseidon2::compressed()); + let skinny_machine = RecursionAir::<_, 9, 0>::machine_skinny_with_all_chips( + BabyBearPoseidon2::ultra_compressed(), + ); let (pk, vk) = skinny_machine.setup(&program); let result = run_test_machine(vec![record.clone()], skinny_machine, pk, vk); if let Err(e) = result { From 22e094676d52ead73dc5391bfc7058d29613ebe1 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 27 Aug 2024 09:47:30 -0700 Subject: [PATCH 106/268] ignore tests --- .github/workflows/pr.yml | 33 ------------------- crates/recursion/core/src/multi/mod.rs | 1 + .../recursion/core/src/poseidon2_wide/mod.rs | 9 ----- 3 files changed, 1 insertion(+), 42 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2d7673efe7..3eff61d8c9 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -18,39 +18,6 @@ concurrency: cancel-in-progress: true jobs: - test-fast: - name: Test (fast-experimental) - runs-on: runs-on,runner=64cpu-linux-x64,spot=false - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Setup CI - uses: ./.github/actions/setup - - - name: Run cargo check - uses: actions-rs/cargo@v1 - with: - command: check - toolchain: 1.79.0 - args: --all-targets --all-features - - - name: Run cargo test core-v2 - uses: actions-rs/cargo@v1 - with: - command: test - toolchain: 1.79.0 - args: --release --package sp1-recursion-core-v2 --package sp1-recursion-circuit-v2 --features native-gnark - env: - RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native - RUST_BACKTRACE: 1 - FRI_QUERIES: 1 - SP1_DEV: 1 - - - test-x86: name: Test (x86-64) runs-on: diff --git a/crates/recursion/core/src/multi/mod.rs b/crates/recursion/core/src/multi/mod.rs index 6c4cc566db..cb3f0604bb 100644 --- a/crates/recursion/core/src/multi/mod.rs +++ b/crates/recursion/core/src/multi/mod.rs @@ -344,6 +344,7 @@ mod tests { }; #[test] + #[ignore] fn prove_babybear() { let config = BabyBearPoseidon2::compressed(); let mut challenger = config.challenger(); diff --git a/crates/recursion/core/src/poseidon2_wide/mod.rs b/crates/recursion/core/src/poseidon2_wide/mod.rs index e7e6f9cc11..0019552e8a 100644 --- a/crates/recursion/core/src/poseidon2_wide/mod.rs +++ b/crates/recursion/core/src/poseidon2_wide/mod.rs @@ -298,15 +298,6 @@ pub(crate) mod tests { input_exec } - #[test] - fn poseidon2_wide_prove_babybear_success() { - // Generate test input exec record. - let input_exec = generate_test_execution_record(false); - - poseidon2_wide_prove_babybear_degree::<3>(input_exec.clone()); - poseidon2_wide_prove_babybear_degree::<9>(input_exec); - } - #[test] #[should_panic] fn poseidon2_wide_prove_babybear_failure() { From d7b71a10c4442240e00df0f021ddc8fff0cc6752 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 27 Aug 2024 10:11:06 -0700 Subject: [PATCH 107/268] fix pr --- .github/workflows/pr.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3eff61d8c9..79e90643be 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -48,7 +48,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark + args: --release --features native-gnark --workspace --exclude sp1-recursion-core env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 @@ -85,7 +85,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark + args: --release --features native-gnark --workspace --exclude sp1-recursion-core env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 From eb7acf2ff9517e807aef7cb695dbb7032ce29fa3 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 27 Aug 2024 10:52:13 -0700 Subject: [PATCH 108/268] cleanup --- .github/workflows/pr.yml | 2 +- crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 79e90643be..f3e689febb 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -85,7 +85,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark --workspace --exclude sp1-recursion-core + args: --release --features native-gnark --workspace --exclude sp1-recursion-core sp1-recursion-program sp1-recursion-circuit env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index f233648a41..dfe81855c9 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -2,8 +2,7 @@ use std::{borrow::BorrowMut, mem::size_of}; use p3_air::BaseAir; use p3_field::PrimeField32; -use p3_matrix::dense::RowMajorMatrix; -use p3_matrix::Matrix; +use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::*; use sp1_core_machine::utils::next_power_of_two; use sp1_primitives::RC_16_30_U32; From 6665e9d107066354aa751fe10d350bafcea89d5c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 27 Aug 2024 11:11:42 -0700 Subject: [PATCH 109/268] exlude old recursion --- .github/workflows/pr.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f3e689febb..9cdf5340b5 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -48,7 +48,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark --workspace --exclude sp1-recursion-core + args: --release --features native-gnark --workspace --exclude sp1-recursion-core --exclude sp1-recursion-program --exclude sp1-recursion-circuit env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 @@ -85,7 +85,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark --workspace --exclude sp1-recursion-core sp1-recursion-program sp1-recursion-circuit + args: --release --features native-gnark --workspace --exclude sp1-recursion-core --exclude sp1-recursion-program --exclude sp1-recursion-circuit env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 From f099b741874117d70b2d8e7ef458e4c0d5644c01 Mon Sep 17 00:00:00 2001 From: Eugene Rabinovich Date: Tue, 27 Aug 2024 12:48:31 -0700 Subject: [PATCH 110/268] feat: merkle tree-based vector commitments (#1415) --- crates/recursion/circuit-v2/src/fri.rs | 10 +- crates/recursion/circuit-v2/src/hash.rs | 104 +++++++-- crates/recursion/circuit-v2/src/lib.rs | 5 +- .../recursion/circuit-v2/src/machine/core.rs | 2 +- .../circuit-v2/src/machine/deferred.rs | 2 +- .../circuit-v2/src/machine/witness.rs | 4 +- .../recursion/circuit-v2/src/merkle_tree.rs | 197 ++++++++++++++++++ crates/recursion/circuit-v2/src/stark.rs | 2 +- crates/recursion/circuit-v2/src/types.rs | 16 +- .../recursion/circuit-v2/src/witness/mod.rs | 2 +- 10 files changed, 301 insertions(+), 43 deletions(-) create mode 100644 crates/recursion/circuit-v2/src/merkle_tree.rs diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index ae4b12c457..fc6df56139 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -223,7 +223,7 @@ pub fn verify_challenges, SC: BabyBearFriConfigVar pub fn verify_query, SC: BabyBearFriConfigVariable>( builder: &mut Builder, - commit_phase_commits: &[SC::Digest], + commit_phase_commits: &[SC::DigestVariable], index_bits: &[C::Bit], proof: FriQueryProofVariable, betas: &[Ext], @@ -323,11 +323,11 @@ pub fn verify_query, SC: BabyBearFriConfigVariable pub fn verify_batch, SC: BabyBearFriConfigVariable>( builder: &mut Builder, - commit: SC::Digest, + commit: SC::DigestVariable, heights: &[usize], index_bits: &[C::Bit], opened_values: Vec>>>, - proof: Vec, + proof: Vec, ) { let mut heights_tallest_first = heights.iter().enumerate().sorted_by_key(|(_, height)| Reverse(*height)).peekable(); @@ -340,9 +340,9 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable .cloned() .collect::>(); let felt_slice: Vec> = ext_slice.into_iter().flatten().collect::>(); - let mut root: SC::Digest = SC::hash(builder, &felt_slice[..]); + let mut root: SC::DigestVariable = SC::hash(builder, &felt_slice[..]); - zip(index_bits.iter(), proof).for_each(|(&bit, sibling): (&C::Bit, SC::Digest)| { + zip(index_bits.iter(), proof).for_each(|(&bit, sibling): (&C::Bit, SC::DigestVariable)| { let compress_args = SC::select_chain_digest(builder, bit, [root, sibling]); root = SC::compress(builder, compress_args); diff --git a/crates/recursion/circuit-v2/src/hash.rs b/crates/recursion/circuit-v2/src/hash.rs index 135d4ceba8..5c59e8d08d 100644 --- a/crates/recursion/circuit-v2/src/hash.rs +++ b/crates/recursion/circuit-v2/src/hash.rs @@ -1,61 +1,92 @@ -use std::iter::zip; +use std::fmt::Debug; +use std::iter::{repeat, zip}; use itertools::Itertools; use p3_baby_bear::BabyBear; use p3_field::{AbstractField, Field}; use p3_bn254_fr::Bn254Fr; +use p3_symmetric::Permutation; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, ir::{Builder, Config, DslIr, Felt, Var}, }; +use sp1_recursion_core_v2::stark::config::outer_perm; use sp1_recursion_core_v2::{stark::config::BabyBearPoseidon2Outer, DIGEST_SIZE}; use sp1_stark::baby_bear_poseidon2::BabyBearPoseidon2; +use sp1_stark::inner_perm; use crate::{ challenger::{reduce_32, RATE, SPONGE_SIZE}, select_chain, CircuitConfig, }; -pub trait FieldHasherVariable { - type Digest: Clone + Copy; +pub trait FieldHasher { + type Digest: Clone + Copy + Default + PartialEq + Eq + Copy + Debug; - fn hash(builder: &mut Builder, input: &[Felt]) -> Self::Digest; + fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest; +} + +pub trait FieldHasherVariable: FieldHasher { + type DigestVariable: Clone + Copy; + + fn hash(builder: &mut Builder, input: &[Felt]) -> Self::DigestVariable; - fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest; + fn compress(builder: &mut Builder, input: [Self::DigestVariable; 2]) + -> Self::DigestVariable; - fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest); + fn assert_digest_eq(builder: &mut Builder, a: Self::DigestVariable, b: Self::DigestVariable); // Encountered many issues trying to make the following two parametrically polymorphic. fn select_chain_digest( builder: &mut Builder, should_swap: C::Bit, - input: [Self::Digest; 2], - ) -> [Self::Digest; 2]; + input: [Self::DigestVariable; 2], + ) -> [Self::DigestVariable; 2]; + + fn print_digest(builder: &mut Builder, digest: Self::DigestVariable); +} + +impl FieldHasher for BabyBearPoseidon2 { + type Digest = [BabyBear; DIGEST_SIZE]; + + fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest { + let mut pre_iter = input.into_iter().flatten().chain(repeat(BabyBear::zero())); + let mut pre = core::array::from_fn(move |_| pre_iter.next().unwrap()); + (inner_perm()).permute_mut(&mut pre); + pre[..DIGEST_SIZE].try_into().unwrap() + } } impl>> FieldHasherVariable for BabyBearPoseidon2 { - type Digest = [Felt; DIGEST_SIZE]; + type DigestVariable = [Felt; DIGEST_SIZE]; - fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::Digest { + fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::DigestVariable { builder.poseidon2_hash_v2(input) } - fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest { + fn compress( + builder: &mut Builder, + input: [Self::DigestVariable; 2], + ) -> Self::DigestVariable { builder.poseidon2_compress_v2(input.into_iter().flatten()) } - fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest) { + fn assert_digest_eq( + builder: &mut Builder, + a: Self::DigestVariable, + b: Self::DigestVariable, + ) { zip(a, b).for_each(|(e1, e2)| builder.assert_felt_eq(e1, e2)); } fn select_chain_digest( builder: &mut Builder, should_swap: ::Bit, - input: [Self::Digest; 2], - ) -> [Self::Digest; 2] { + input: [Self::DigestVariable; 2], + ) -> [Self::DigestVariable; 2] { let err_msg = "select_chain's return value should have length the sum of its inputs"; let mut selected = select_chain(builder, should_swap, input[0], input[1]); let ret = [ @@ -65,15 +96,31 @@ impl>> FieldHasherVariable, digest: Self::DigestVariable) { + for d in digest.iter() { + builder.print_f(*d); + } + } } pub const BN254_DIGEST_SIZE: usize = 1; + +impl FieldHasher for BabyBearPoseidon2Outer { + type Digest = [Bn254Fr; BN254_DIGEST_SIZE]; + + fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest { + let mut state = [input[0][0], input[1][0], Bn254Fr::zero()]; + outer_perm().permute_mut(&mut state); + [state[0]; BN254_DIGEST_SIZE] + } +} impl>> FieldHasherVariable for BabyBearPoseidon2Outer { - type Digest = [Var; BN254_DIGEST_SIZE]; + type DigestVariable = [Var; BN254_DIGEST_SIZE]; - fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::Digest { + fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::DigestVariable { assert!(C::N::bits() == p3_bn254_fr::Bn254Fr::bits()); assert!(C::F::bits() == p3_baby_bear::BabyBear::bits()); let num_f_elms = C::N::bits() / C::F::bits(); @@ -90,28 +137,35 @@ impl>> FieldHashe [state[0]; BN254_DIGEST_SIZE] } - fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest { + fn compress( + builder: &mut Builder, + input: [Self::DigestVariable; 2], + ) -> Self::DigestVariable { let state: [Var; SPONGE_SIZE] = [builder.eval(input[0][0]), builder.eval(input[1][0]), builder.eval(C::N::zero())]; builder.push(DslIr::CircuitPoseidon2Permute(state)); [state[0]; BN254_DIGEST_SIZE] } - fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest) { + fn assert_digest_eq( + builder: &mut Builder, + a: Self::DigestVariable, + b: Self::DigestVariable, + ) { zip(a, b).for_each(|(e1, e2)| builder.assert_var_eq(e1, e2)); } fn select_chain_digest( builder: &mut Builder, should_swap: ::Bit, - input: [Self::Digest; 2], - ) -> [Self::Digest; 2] { - let result0: [Var<_>; 1] = core::array::from_fn(|j| { + input: [Self::DigestVariable; 2], + ) -> [Self::DigestVariable; 2] { + let result0: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { let result = builder.uninit(); builder.push(DslIr::CircuitSelectV(should_swap, input[1][j], input[0][j], result)); result }); - let result1: [Var<_>; 1] = core::array::from_fn(|j| { + let result1: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { let result = builder.uninit(); builder.push(DslIr::CircuitSelectV(should_swap, input[0][j], input[1][j], result)); result @@ -119,6 +173,12 @@ impl>> FieldHashe [result0, result1] } + + fn print_digest(builder: &mut Builder, digest: Self::DigestVariable) { + for d in digest.iter() { + builder.print_v(*d); + } + } } // impl> FieldHasherVariable for OuterHash { diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 6ef75b1c35..0f70e7108f 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -27,6 +27,7 @@ pub mod domain; pub mod fri; pub mod hash; pub mod machine; +pub mod merkle_tree; pub mod stark; pub(crate) mod utils; pub mod witness; @@ -60,7 +61,7 @@ pub type PcsConfig = FriConfig< >, >; -pub type Digest = >::Digest; +pub type Digest = >::DigestVariable; pub type FriMmcs = ExtensionMmcs::ValMmcs>; @@ -95,7 +96,7 @@ pub trait BabyBearFriConfigVariable>: BabyBearFriConfig + FieldHasherVariable { type FriChallengerVariable: FieldChallengerVariable::Bit> - + CanObserveVariable>::Digest> + + CanObserveVariable>::DigestVariable> + CanCopyChallenger; /// Get a new challenger corresponding to the given config. diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 56800b147b..20a0c15918 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -73,7 +73,7 @@ where SC: BabyBearFriConfigVariable< C, FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], + DigestVariable = [Felt; DIGEST_SIZE], >, C: CircuitConfig>, >::ProverData>: Clone, diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index a16c3a9bcd..0246480cc2 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -71,7 +71,7 @@ where SC: BabyBearFriConfigVariable< C, FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], + DigestVariable = [Felt; DIGEST_SIZE], >, C: CircuitConfig>, >::ProverData>: Clone, diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index b8f4bcf750..015f938c5d 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -77,7 +77,7 @@ where impl, SC: BabyBearFriConfigVariable> Witnessable for StarkVerifyingKey where - Com: Witnessable>::Digest>, + Com: Witnessable>::DigestVariable>, OpeningProof: Witnessable>, { type WitnessVariable = VerifyingKeyVariable; @@ -148,7 +148,7 @@ where impl, SC: BabyBearFriConfigVariable> Witnessable for SP1CompressWitnessValues where - Com: Witnessable>::Digest>, + Com: Witnessable>::DigestVariable>, OpeningProof: Witnessable>, { type WitnessVariable = SP1CompressWitnessVariable; diff --git a/crates/recursion/circuit-v2/src/merkle_tree.rs b/crates/recursion/circuit-v2/src/merkle_tree.rs new file mode 100644 index 0000000000..d50edac6e9 --- /dev/null +++ b/crates/recursion/circuit-v2/src/merkle_tree.rs @@ -0,0 +1,197 @@ +use std::fmt::Debug; + +use itertools::Itertools; +use p3_field::Field; +use p3_util::{reverse_bits_len, reverse_slice_index_bits}; +use sp1_core_machine::utils::log2_strict_usize; +use sp1_recursion_compiler::ir::Builder; + +use crate::{ + hash::{FieldHasher, FieldHasherVariable}, + CircuitConfig, +}; + +#[derive(Debug, Clone)] +pub struct MerkleTree> { + /// The height of the tree, not counting the root layer. This is the same as the logarithm of the + /// number of leaves. + pub height: usize, + + /// All the layers but the root. If there are `n` leaves where `n` is a power of 2, there are + /// `2n - 2` elements in this vector. The leaves are at the beginning of the vector. + pub digest_layers: Vec, +} +pub struct VcsError; + +impl Debug for VcsError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "VcsError") + } +} + +impl> MerkleTree { + pub fn commit(leaves: Vec) -> (HV::Digest, Self) { + assert!(!leaves.is_empty()); + let new_len = leaves.len().next_power_of_two(); + let height = log2_strict_usize(new_len); + + // Pre-allocate the vector. + let mut digest_layers = Vec::with_capacity(2 * new_len - 2); + + // If `leaves.len()` is not a power of 2, we pad the leaves with default values. + let mut last_layer = leaves; + let old_len = last_layer.len(); + for _ in old_len..new_len { + last_layer.push(HV::Digest::default()); + } + + // Store the leaves in bit-reversed order. + reverse_slice_index_bits(&mut last_layer); + + digest_layers.extend(last_layer.iter()); + + // Compute the rest of the layers. + for _ in 0..height - 1 { + let mut next_layer = Vec::with_capacity(last_layer.len() / 2); + for (a, b) in last_layer.iter().tuples() { + next_layer.push(HV::constant_compress([*a, *b])); + } + digest_layers.extend(next_layer.iter()); + + last_layer = next_layer; + } + + debug_assert_eq!(digest_layers.len(), 2 * new_len - 2); + + let root = HV::constant_compress([last_layer[0], last_layer[1]]); + (root, Self { height, digest_layers }) + } + + pub fn open(&self, index: usize) -> (HV::Digest, Vec) { + let mut path = Vec::with_capacity(self.height); + let mut bit_rev_index = reverse_bits_len(index, self.height); + let value = self.digest_layers[bit_rev_index]; + + // Variable to keep track index of the first element in the current layer. + let mut offset = 0; + for i in 0..self.height { + let sibling = if bit_rev_index % 2 == 0 { + self.digest_layers[offset + bit_rev_index + 1] + } else { + self.digest_layers[offset + bit_rev_index - 1] + }; + path.push(sibling); + bit_rev_index >>= 1; + + // The current layer has 1 << (height - i) elements, so we shift offset by that amount. + offset += 1 << (self.height - i); + } + debug_assert_eq!(path.len(), self.height); + (value, path) + } + + pub fn verify( + index: usize, + value: HV::Digest, + path: &[HV::Digest], + commitment: HV::Digest, + ) -> Result<(), VcsError> { + let mut value = value; + + let mut index = reverse_bits_len(index, path.len()); + + for sibling in path { + let sibling = *sibling; + + // If the index is odd, swap the order of [value, sibling]. + let new_pair = if index % 2 == 0 { [value, sibling] } else { [sibling, value] }; + value = HV::constant_compress(new_pair); + index >>= 1; + } + if value == commitment { + Ok(()) + } else { + Err(VcsError) + } + } +} + +pub fn verify>( + builder: &mut Builder, + index: Vec, + value: HV::DigestVariable, + path: &[HV::DigestVariable], + commitment: HV::DigestVariable, +) { + let mut value = value; + for (sibling, bit) in path.iter().zip(index.iter().rev()) { + let sibling = *sibling; + + // If the index is odd, swap the order of [value, sibling]. + let new_pair = HV::select_chain_digest(builder, *bit, [value, sibling]); + value = HV::compress(builder, new_pair); + } + HV::assert_digest_eq(builder, value, commitment); +} + +#[cfg(test)] +mod tests { + use itertools::Itertools; + use p3_baby_bear::BabyBear; + use p3_field::AbstractField; + use rand::rngs::OsRng; + use sp1_recursion_compiler::{ + config::InnerConfig, + ir::{Builder, Felt}, + }; + use sp1_recursion_core_v2::DIGEST_SIZE; + use sp1_stark::baby_bear_poseidon2::BabyBearPoseidon2; + use zkhash::ark_ff::UniformRand; + + use crate::{ + merkle_tree::{verify, MerkleTree}, + utils::tests::run_test_recursion, + CircuitConfig, + }; + type C = InnerConfig; + type F = BabyBear; + type HV = BabyBearPoseidon2; + + #[test] + fn test_merkle_tree_inner() { + let mut rng = OsRng; + let mut builder = Builder::::default(); + for _ in 0..20 { + let leaves: Vec<[F; DIGEST_SIZE]> = + (0..17).map(|_| std::array::from_fn(|_| F::rand(&mut rng))).collect(); + let (root, tree) = MerkleTree::::commit(leaves.to_vec()); + for (i, leaf) in leaves.iter().enumerate() { + let (value, proof) = MerkleTree::::open(&tree, i); + assert!(value == *leaf); + MerkleTree::::verify(i, value, &proof, root).unwrap(); + let (value_variable, proof_variable): ([Felt<_>; 8], Vec<[Felt<_>; 8]>) = ( + std::array::from_fn(|i| builder.constant(value[i])), + proof + .iter() + .map(|x| std::array::from_fn(|i| builder.constant(x[i]))) + .collect_vec(), + ); + + let index_var = builder.constant(BabyBear::from_canonical_usize(i)); + let index_bits = C::num2bits(&mut builder, index_var, 5); + let root_variable: [Felt<_>; 8] = + root.iter().map(|x| builder.constant(*x)).collect_vec().try_into().unwrap(); + + verify::( + &mut builder, + index_bits, + value_variable, + &proof_variable, + root_variable, + ); + } + } + + run_test_recursion(builder.operations, std::iter::empty()); + } +} diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index f559a61e32..b6b0c1b56f 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -31,7 +31,7 @@ use crate::{ /// Reference: [sp1_core::stark::ShardProof] #[derive(Clone)] pub struct ShardProofVariable, SC: BabyBearFriConfigVariable> { - pub commitment: ShardCommitment, + pub commitment: ShardCommitment, pub opened_values: ShardOpenedValues>, pub opening_proof: TwoAdicPcsProofVariable, pub chip_ordering: HashMap, diff --git a/crates/recursion/circuit-v2/src/types.rs b/crates/recursion/circuit-v2/src/types.rs index 8906494405..57a1458255 100644 --- a/crates/recursion/circuit-v2/src/types.rs +++ b/crates/recursion/circuit-v2/src/types.rs @@ -15,7 +15,7 @@ use crate::{ /// Reference: [sp1_core::stark::StarkVerifyingKey] #[derive(Clone)] pub struct VerifyingKeyVariable, SC: BabyBearFriConfigVariable> { - pub commitment: SC::Digest, + pub commitment: SC::DigestVariable, pub pc_start: Felt, pub chip_information: Vec<(String, TwoAdicMultiplicativeCoset, Dimensions)>, pub chip_ordering: HashMap, @@ -23,7 +23,7 @@ pub struct VerifyingKeyVariable, SC: BabyBearFriCo #[derive(Clone)] pub struct FriProofVariable> { - pub commit_phase_commits: Vec, + pub commit_phase_commits: Vec, pub query_proofs: Vec>, pub final_poly: Ext, pub pow_witness: Felt, @@ -33,7 +33,7 @@ pub struct FriProofVariable> { #[derive(Clone)] pub struct FriCommitPhaseProofStepVariable> { pub sibling_value: Ext, - pub opening_proof: Vec, + pub opening_proof: Vec, } /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/fri/src/proof.rs#L23 @@ -58,12 +58,12 @@ pub struct TwoAdicPcsProofVariable> #[derive(Clone)] pub struct BatchOpeningVariable> { pub opened_values: Vec>>>, - pub opening_proof: Vec, + pub opening_proof: Vec, } #[derive(Clone)] pub struct TwoAdicPcsRoundVariable> { - pub batch_commit: H::Digest, + pub batch_commit: H::DigestVariable, pub domains_points_and_opens: Vec>, } @@ -77,7 +77,7 @@ pub struct TwoAdicPcsMatsVariable { impl, SC: BabyBearFriConfigVariable> VerifyingKeyVariable { pub fn observe_into(&self, builder: &mut Builder, challenger: &mut Challenger) where - Challenger: CanObserveVariable> + CanObserveVariable, + Challenger: CanObserveVariable> + CanObserveVariable, { // Observe the commitment. challenger.observe(builder, self.commitment); @@ -92,10 +92,10 @@ impl, SC: BabyBearFriConfigVariable> VerifyingK /// Hash the verifying key + prep domains into a single digest. /// poseidon2( commit[0..8] || pc_start || prep_domains[N].{log_n, .size, .shift, .g}) - pub fn hash(&self, builder: &mut Builder) -> SC::Digest + pub fn hash(&self, builder: &mut Builder) -> SC::DigestVariable where C::F: TwoAdicField, - SC::Digest: IntoIterator>, + SC::DigestVariable: IntoIterator>, { let prep_domains = self.chip_information.iter().map(|(_, domain, _)| domain); let num_inputs = DIGEST_SIZE + 1 + (4 * prep_domains.len()); diff --git a/crates/recursion/circuit-v2/src/witness/mod.rs b/crates/recursion/circuit-v2/src/witness/mod.rs index e472661ca1..92811f7dc0 100644 --- a/crates/recursion/circuit-v2/src/witness/mod.rs +++ b/crates/recursion/circuit-v2/src/witness/mod.rs @@ -132,7 +132,7 @@ impl> Witnessable for Vec { impl, SC: BabyBearFriConfigVariable> Witnessable for ShardProof where - Com: Witnessable>::Digest>, + Com: Witnessable>::DigestVariable>, OpeningProof: Witnessable>, { type WitnessVariable = ShardProofVariable; From 5d4b6c7bca26df2e111234ea7f58c37ffd74fe2a Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 13:27:55 -0700 Subject: [PATCH 111/268] check if commit worked --- crates/prover/src/lib.rs | 36 +++++++++++++++++++++++ crates/recursion/circuit-v2/src/lib.rs | 40 +++++++++++++------------- 2 files changed, 56 insertions(+), 20 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 2bc4ccacee..5f75a16259 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1072,6 +1072,7 @@ pub mod tests { tracing::info!("wrap bn254"); let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; + println!("vk wrap bn254: {:?}", wrapped_bn254_proof.vk); let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); // Save the proof. @@ -1197,6 +1198,7 @@ pub mod tests { tracing::info!("proving verify program (core)"); let verify_proof = prover.prove_core(&verify_pk, &stdin, opts, Default::default())?; + // let public_values = verify_proof.public_values.clone(); // Generate recursive proof of verify program tracing::info!("compress verify program"); @@ -1214,6 +1216,40 @@ pub mod tests { tracing::info!("verify verify program"); prover.verify_compressed(&verify_reduce, &verify_vk)?; + // let shrink_proof = prover.shrink(verify_reduce, opts)?; + + // tracing::info!("verify shrink"); + // prover.verify_shrink(&shrink_proof, &verify_vk)?; + + // tracing::info!("wrap bn254"); + // let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; + + // tracing::info!("verify wrap bn254"); + // prover.verify_wrap_bn254(&wrapped_bn254_proof, &verify_vk).unwrap(); + + // tracing::info!("checking vkey hash babybear"); + // let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); + // assert_eq!(vk_digest_babybear, verify_vk.hash_babybear()); + + // tracing::info!("checking vkey hash bn254"); + // let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); + // assert_eq!(vk_digest_bn254, verify_vk.hash_bn254()); + + // tracing::info!("generate groth16 bn254 proof"); + // let artifacts_dir = try_build_groth16_bn254_artifacts_dev( + // &wrapped_bn254_proof.vk, + // &wrapped_bn254_proof.proof, + // ); + // let groth16_bn254_proof = prover.wrap_groth16_bn254(wrapped_bn254_proof, &artifacts_dir); + // println!("{:?}", groth16_bn254_proof); + + // prover.verify_groth16_bn254( + // &groth16_bn254_proof, + // &verify_vk, + // &public_values, + // &artifacts_dir, + // )?; + Ok(()) } diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 6ef75b1c35..bf83b17b5d 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -66,16 +66,16 @@ pub type FriMmcs = ExtensionMmcs::ValM pub trait BabyBearFriConfig: StarkGenericConfig< - Val = BabyBear, - Challenge = EF, - Challenger = Self::FriChallenger, - Pcs = TwoAdicFriPcs< - BabyBear, - Radix2DitParallel, - Self::ValMmcs, - ExtensionMmcs, - >, -> + Val = BabyBear, + Challenge = EF, + Challenger = Self::FriChallenger, + Pcs = TwoAdicFriPcs< + BabyBear, + Radix2DitParallel, + Self::ValMmcs, + ExtensionMmcs, + >, + > { type ValMmcs: Mmcs> = Self::RowMajorProverData> + Send @@ -394,17 +394,17 @@ impl>> BabyBearFr } fn commit_recursion_public_values( - builder: &mut Builder, - public_values: RecursionPublicValues::F>>, + _builder: &mut Builder, + _public_values: RecursionPublicValues::F>>, ) { - let committed_values_digest_bytes_felts: [Felt<_>; 32] = - words_to_bytes(&public_values.committed_value_digest).try_into().unwrap(); - let committed_values_digest_bytes: Var<_> = - felt_bytes_to_bn254_var(builder, &committed_values_digest_bytes_felts); - builder.commit_commited_values_digest_circuit(committed_values_digest_bytes); - - let vkey_hash = felts_to_bn254_var(builder, &public_values.sp1_vk_digest); - builder.commit_vkey_hash_circuit(vkey_hash); + // let committed_values_digest_bytes_felts: [Felt<_>; 32] = + // words_to_bytes(&public_values.committed_value_digest).try_into().unwrap(); + // let committed_values_digest_bytes: Var<_> = + // felt_bytes_to_bn254_var(builder, &committed_values_digest_bytes_felts); + // builder.commit_commited_values_digest_circuit(committed_values_digest_bytes); + + // let vkey_hash = felts_to_bn254_var(builder, &public_values.sp1_vk_digest); + // builder.commit_vkey_hash_circuit(vkey_hash); } } From d27436eb526f8de83d88aed05809d7ca402119ea Mon Sep 17 00:00:00 2001 From: Eugene Rabinovich Date: Tue, 27 Aug 2024 13:29:00 -0700 Subject: [PATCH 112/268] perf: GROTH16 improvements (#1417) --- .../recursion/circuit-v2/src/constraints.rs | 61 +++++++++++++------ crates/recursion/circuit-v2/src/fri.rs | 20 ++++-- crates/recursion/circuit-v2/src/lib.rs | 34 +++++++++++ .../recursion/compiler/src/constraints/mod.rs | 4 ++ 4 files changed, 95 insertions(+), 24 deletions(-) diff --git a/crates/recursion/circuit-v2/src/constraints.rs b/crates/recursion/circuit-v2/src/constraints.rs index 1512d144ae..5f1b4aebbe 100644 --- a/crates/recursion/circuit-v2/src/constraints.rs +++ b/crates/recursion/circuit-v2/src/constraints.rs @@ -1,11 +1,11 @@ use p3_air::{Air, BaseAir}; use p3_baby_bear::BabyBear; use p3_commit::{LagrangeSelectors, Mmcs, PolynomialSpace, TwoAdicMultiplicativeCoset}; -use p3_field::{AbstractExtensionField, AbstractField, TwoAdicField}; +use p3_field::{AbstractExtensionField, AbstractField, Field, TwoAdicField}; use p3_matrix::dense::RowMajorMatrix; use sp1_recursion_compiler::ir::{ - Builder, Config, Ext, ExtensionOperand, Felt, SymbolicExt, SymbolicFelt, + Builder, Config, Ext, ExtConst, ExtensionOperand, Felt, SymbolicExt, SymbolicFelt, }; use sp1_stark::{ air::MachineAir, AirOpenedValues, ChipOpenedValues, GenericVerifierConstraintFolder, @@ -121,6 +121,17 @@ where qc_domains: &[TwoAdicMultiplicativeCoset], zeta: Ext, ) -> Ext { + // Compute the maximum power of zeta we will need. + let max_domain_log_n = qc_domains.iter().map(|d| d.log_n).max().unwrap(); + + // Compute all powers of zeta of the form zeta^(2^i) up to `zeta^(2^max_domain_log_n)`. + let mut zetas: Vec> = vec![zeta]; + for _ in 1..max_domain_log_n + 1 { + let last_zeta = zetas.last().unwrap(); + let new_zeta = builder.eval(*last_zeta * *last_zeta); + builder.reduce_e(new_zeta); + zetas.push(new_zeta); + } let zps = qc_domains .iter() .enumerate() @@ -130,24 +141,37 @@ where .enumerate() .filter(|(j, _)| *j != i) .map(|(_, other_domain)| { - let first_point = builder.eval(domain.first_point()); + // `shift_power` is used in the computation of + let shift_power = + other_domain.shift.exp_power_of_2(other_domain.log_n).inverse(); + // This is `other_domain.zp_at_point_f(builder, domain.first_point())`. + // We compute it as a constant here. + let z_f = domain.first_point().exp_power_of_2(other_domain.log_n) + * shift_power + - C::F::one(); ( - other_domain - .zp_at_point_variable(builder, zeta) - .to_operand() - .symbolic(), - other_domain.zp_at_point_f(builder, first_point).inverse(), + { + // We use the precomputed powers of zeta to compute (inline) the value of + // `other_domain.zp_at_point_variable(builder, zeta)`. + let z: Ext<_, _> = builder.eval( + zetas[other_domain.log_n] * SymbolicFelt::from_f(shift_power) + - SymbolicExt::from_f(C::EF::one()), + ); + z.to_operand().symbolic() + }, + builder.constant::>(z_f), ) }) - .unzip::<_, _, Vec<_>, Vec<_>>(); - zs.into_iter().product::>() - * zinvs.into_iter().product::>() + .unzip::<_, _, Vec>, Vec>>(); + let symbolic_prod: SymbolicFelt<_> = + zinvs.into_iter().map(|x| x.into()).product::>(); + (zs.into_iter().product::>(), symbolic_prod) }) - .collect::>>() + .collect::, SymbolicFelt<_>)>>() .into_iter() - .map(|x| builder.eval(x)) + .map(|(x, y)| builder.eval(x / y)) .collect::>>(); - + zps.iter().for_each(|zp| builder.reduce_e(*zp)); builder.eval( opening .quotient @@ -155,10 +179,11 @@ where .enumerate() .map(|(ch_i, ch)| { assert_eq!(ch.len(), C::EF::D); - ch.iter() - .enumerate() - .map(|(e_i, &c)| zps[ch_i] * C::EF::monomial(e_i) * c) - .sum::>() + zps[ch_i].to_operand().symbolic() + * ch.iter() + .enumerate() + .map(|(e_i, &c)| C::EF::monomial(e_i).cons() * SymbolicExt::from(c)) + .sum::>() }) .sum::>(), ) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index fc6df56139..f3bd075323 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -66,6 +66,14 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let log_global_max_height = proof.fri_proof.commit_phase_commits.len() + config.log_blowup; + // Precompute the two-adic powers of the two-adic generator. They can be loaded in as constants. + // The ith element has order 2^(log_global_max_height - i). + let mut precomputed_generator_powers: Vec> = vec![]; + for i in 0..log_global_max_height + 1 { + precomputed_generator_powers + .push(builder.constant(C::F::two_adic_generator(log_global_max_height - i))); + } + // The powers of alpha, where the ith element is alpha^i. let mut alpha_pows: Vec> = vec![builder.eval(SymbolicExt::from_f(C::EF::one()))]; @@ -112,10 +120,11 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV index_bits[bits_reduced..(bits_reduced + log_height)].to_vec(); let g = builder.generator(); - let two_adic_generator: Felt<_> = - builder.eval(C::F::two_adic_generator(log_height)); - let two_adic_generator_exp = - C::exp_reverse_bits(builder, two_adic_generator, reduced_index_bits_trunc); + let two_adic_generator_exp = C::exp_f_bits_precomputed( + builder, + &reduced_index_bits_trunc.into_iter().rev().collect_vec(), + &precomputed_generator_powers[bits_reduced..], + ); // Unroll the following to avoid symbolic expression overhead // let x: Felt<_> = builder.eval(g * two_adic_generator_exp); @@ -125,8 +134,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV for (z, ps_at_z) in izip!(mat_points, mat_values) { // Unroll the loop calculation to avoid symbolic expression overhead - // let mut acc: Ext = - // builder.eval(SymbolicExt::from_f(C::EF::zero())); + // let mut acc: Ext = builder.constant(C::EF::zero()); let mut acc: Ext<_, _> = builder.uninit(); builder.operations.push(DslIr::ImmE(acc, C::EF::zero())); diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 0f70e7108f..c58358e3e8 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -128,6 +128,14 @@ pub trait CircuitConfig: Config { power_bits: Vec, ) -> Felt<::F>; + /// Exponentiates a felt x to a list of bits in little endian. Uses precomputed powers + /// of x. + fn exp_f_bits_precomputed( + builder: &mut Builder, + power_bits: &[Self::Bit], + two_adic_powers_of_x: &[Felt], + ) -> Felt; + fn num2bits( builder: &mut Builder, num: Felt<::F>, @@ -232,6 +240,18 @@ impl CircuitConfig for InnerConfig { .map(|((id_v, sw_v), (id_c, sw_c))| builder.eval(id_v * id_c + sw_v * sw_c)) .collect() } + + fn exp_f_bits_precomputed( + builder: &mut Builder, + power_bits: &[Self::Bit], + two_adic_powers_of_x: &[Felt], + ) -> Felt { + Self::exp_reverse_bits( + builder, + two_adic_powers_of_x[0], + power_bits.iter().rev().copied().collect(), + ) + } } impl CircuitConfig for OuterConfig { @@ -333,6 +353,20 @@ impl CircuitConfig for OuterConfig { }) .collect() } + + fn exp_f_bits_precomputed( + builder: &mut Builder, + power_bits: &[Self::Bit], + two_adic_powers_of_x: &[Felt], + ) -> Felt { + let mut result: Felt<_> = builder.eval(Self::F::one()); + let one = builder.constant(Self::F::one()); + for (&bit, &power) in power_bits.iter().zip(two_adic_powers_of_x) { + let multiplier = builder.select_f(bit, power, one); + result = builder.eval(multiplier * result); + } + result + } } impl BabyBearFriConfig for BabyBearPoseidon2 { diff --git a/crates/recursion/compiler/src/constraints/mod.rs b/crates/recursion/compiler/src/constraints/mod.rs index d086c64c51..03bcd09838 100644 --- a/crates/recursion/compiler/src/constraints/mod.rs +++ b/crates/recursion/compiler/src/constraints/mod.rs @@ -225,6 +225,10 @@ impl ConstraintCompiler { args: vec![vec![a.id()], vec![tmp], vec![c.id()]], }); } + DslIr::DivF(a, b, c) => constraints.push(Constraint { + opcode: ConstraintOpcode::DivF, + args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], + }), DslIr::DivEF(a, b, c) => constraints.push(Constraint { opcode: ConstraintOpcode::DivEF, args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], From 8079acddb53b7eb6d2df36adfc0bcdc891042f3d Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 15:14:26 -0700 Subject: [PATCH 113/268] hm --- crates/prover/Cargo.toml | 1 - crates/prover/src/lib.rs | 16 ++++++++-------- .../recursion/compiler/src/circuit/compiler.rs | 18 ++++++++++-------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index 6fefc77f7a..0979033186 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -44,7 +44,6 @@ serial_test = "3.1.1" num-bigint = "0.4.6" thiserror = "1.0.63" oneshot = "0.1.8" - lru = "0.12.4" [[bin]] diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 5f75a16259..49cbaad63d 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1072,7 +1072,6 @@ pub mod tests { tracing::info!("wrap bn254"); let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; - println!("vk wrap bn254: {:?}", wrapped_bn254_proof.vk); let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); // Save the proof. @@ -1216,16 +1215,17 @@ pub mod tests { tracing::info!("verify verify program"); prover.verify_compressed(&verify_reduce, &verify_vk)?; - // let shrink_proof = prover.shrink(verify_reduce, opts)?; + let shrink_proof = prover.shrink(verify_reduce, opts)?; - // tracing::info!("verify shrink"); - // prover.verify_shrink(&shrink_proof, &verify_vk)?; + tracing::info!("verify shrink"); + prover.verify_shrink(&shrink_proof, &verify_vk)?; - // tracing::info!("wrap bn254"); - // let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; + tracing::info!("wrap bn254"); + let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; - // tracing::info!("verify wrap bn254"); - // prover.verify_wrap_bn254(&wrapped_bn254_proof, &verify_vk).unwrap(); + tracing::info!("verify wrap bn254"); + println!("verify wrap bn254 {:#?}", wrapped_bn254_proof.vk.commit); + prover.verify_wrap_bn254(&wrapped_bn254_proof, &verify_vk).unwrap(); // tracing::info!("checking vkey hash babybear"); // let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 07e7c7caf4..f78800ed1c 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -1,6 +1,7 @@ use chips::poseidon2_skinny::WIDTH; use core::fmt::Debug; use instruction::{FieldEltType, HintBitsInstr, HintExt2FeltsInstr, HintInstr, PrintInstr}; +use itertools::Itertools; use p3_field::{ AbstractExtensionField, AbstractField, Field, PrimeField, PrimeField64, TwoAdicField, }; @@ -599,14 +600,15 @@ where debug_assert!(self.addr_to_mult.is_empty()); // Initialize constants. let total_consts = self.consts.len(); - let instrs_consts = self.consts.drain().map(|(imm, (addr, mult))| { - Instruction::Mem(MemInstr { - addrs: MemIo { inner: addr }, - vals: MemIo { inner: imm.as_block() }, - mult, - kind: MemAccessKind::Write, - }) - }); + let instrs_consts = + self.consts.drain().sorted_by_key(|x| x.1.0.0).map(|(imm, (addr, mult))| { + Instruction::Mem(MemInstr { + addrs: MemIo { inner: addr }, + vals: MemIo { inner: imm.as_block() }, + mult, + kind: MemAccessKind::Write, + }) + }); tracing::debug!("number of consts to initialize: {}", instrs_consts.len()); // Reset the other fields. self.next_addr = Default::default(); From 24f4ea45e0f84ffa638baffc7d6f834fba1fee49 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 16:07:48 -0700 Subject: [PATCH 114/268] improve metrics --- crates/recursion/gnark-ffi/go/sp1/prove.go | 36 ++++++++++------------ 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/crates/recursion/gnark-ffi/go/sp1/prove.go b/crates/recursion/gnark-ffi/go/sp1/prove.go index f474d786a2..e5ba355fc6 100644 --- a/crates/recursion/gnark-ffi/go/sp1/prove.go +++ b/crates/recursion/gnark-ffi/go/sp1/prove.go @@ -3,7 +3,9 @@ package sp1 import ( "bufio" "encoding/json" + "fmt" "os" + "time" "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark/backend/groth16" @@ -90,9 +92,13 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { if dataDir == "" { panic("dataDirStr is required") } + + start := time.Now() os.Setenv("CONSTRAINTS_JSON", dataDir+"/"+constraintsJsonFile) os.Setenv("GROTH16", "1") + fmt.Printf("Setting environment variables took %s\n", time.Since(start)) + start = time.Now() // Read the R1CS. r1csFile, err := os.Open(dataDir + "/" + groth16CircuitPath) if err != nil { @@ -101,7 +107,9 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { r1cs := groth16.NewCS(ecc.BN254) r1cs.ReadFrom(r1csFile) defer r1csFile.Close() + fmt.Printf("Reading R1CS took %s\n", time.Since(start)) + start = time.Now() // Read the proving key. pkFile, err := os.Open(dataDir + "/" + groth16PkPath) if err != nil { @@ -111,51 +119,41 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { bufReader := bufio.NewReaderSize(pkFile, 1024*1024) pk.UnsafeReadFrom(bufReader) defer pkFile.Close() + fmt.Printf("Reading proving key took %s\n", time.Since(start)) - // Read the verifier key. - vkFile, err := os.Open(dataDir + "/" + groth16VkPath) - if err != nil { - panic(err) - } - vk := groth16.NewVerifyingKey(ecc.BN254) - vk.ReadFrom(vkFile) - defer vkFile.Close() - + start = time.Now() // Read the file. data, err := os.ReadFile(witnessPath) if err != nil { panic(err) } + fmt.Printf("Reading witness file took %s\n", time.Since(start)) + start = time.Now() // Deserialize the JSON data into a slice of Instruction structs var witnessInput WitnessInput err = json.Unmarshal(data, &witnessInput) if err != nil { panic(err) } + fmt.Printf("Deserializing JSON data took %s\n", time.Since(start)) + start = time.Now() // Generate the witness. assignment := NewCircuit(witnessInput) witness, err := frontend.NewWitness(&assignment, ecc.BN254.ScalarField()) if err != nil { panic(err) } - publicWitness, err := witness.Public() - if err != nil { - panic(err) - } + fmt.Printf("Generating witness took %s\n", time.Since(start)) + start = time.Now() // Generate the proof. proof, err := groth16.Prove(r1cs, pk, witness) if err != nil { panic(err) } - - // Verify proof. - err = groth16.Verify(proof, vk, publicWitness) - if err != nil { - panic(err) - } + fmt.Printf("Generating proof took %s\n", time.Since(start)) return NewSP1Groth16Proof(&proof, witnessInput) } From 47d7c10b3edc8ba67872aab9abbf2d2e2c92927a Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 16:16:30 -0700 Subject: [PATCH 115/268] hm --- crates/recursion/gnark-ffi/go/sp1/prove.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/recursion/gnark-ffi/go/sp1/prove.go b/crates/recursion/gnark-ffi/go/sp1/prove.go index e5ba355fc6..d60f1d8bea 100644 --- a/crates/recursion/gnark-ffi/go/sp1/prove.go +++ b/crates/recursion/gnark-ffi/go/sp1/prove.go @@ -2,6 +2,7 @@ package sp1 import ( "bufio" + "bytes" "encoding/json" "fmt" "os" @@ -111,14 +112,13 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { start = time.Now() // Read the proving key. - pkFile, err := os.Open(dataDir + "/" + groth16PkPath) + pk := groth16.NewProvingKey(ecc.BN254) + pkBytes, err := os.ReadFile(dataDir + "/" + groth16PkPath) if err != nil { panic(err) } - pk := groth16.NewProvingKey(ecc.BN254) - bufReader := bufio.NewReaderSize(pkFile, 1024*1024) - pk.UnsafeReadFrom(bufReader) - defer pkFile.Close() + pkReader := bytes.NewReader(pkBytes) + pk.UnsafeReadFrom(pkReader) fmt.Printf("Reading proving key took %s\n", time.Since(start)) start = time.Now() From 8d06a162a043598f186a36073071345effdf837d Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 16:20:14 -0700 Subject: [PATCH 116/268] use read dump --- crates/recursion/gnark-ffi/go/sp1/prove.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/recursion/gnark-ffi/go/sp1/prove.go b/crates/recursion/gnark-ffi/go/sp1/prove.go index d60f1d8bea..341a5ff89f 100644 --- a/crates/recursion/gnark-ffi/go/sp1/prove.go +++ b/crates/recursion/gnark-ffi/go/sp1/prove.go @@ -2,7 +2,6 @@ package sp1 import ( "bufio" - "bytes" "encoding/json" "fmt" "os" @@ -112,13 +111,14 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { start = time.Now() // Read the proving key. - pk := groth16.NewProvingKey(ecc.BN254) - pkBytes, err := os.ReadFile(dataDir + "/" + groth16PkPath) + pkFile, err := os.Open(dataDir + "/" + groth16PkPath) if err != nil { panic(err) } - pkReader := bytes.NewReader(pkBytes) - pk.UnsafeReadFrom(pkReader) + pk := groth16.NewProvingKey(ecc.BN254) + bufReader := bufio.NewReaderSize(pkFile, 1024*1024) + pk.ReadDump(bufReader) + defer pkFile.Close() fmt.Printf("Reading proving key took %s\n", time.Since(start)) start = time.Now() From 6c5639366b390e350edc29a7087f7ea04ed3394d Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 16:20:59 -0700 Subject: [PATCH 117/268] faster dumps --- crates/recursion/gnark-ffi/go/sp1/build.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/recursion/gnark-ffi/go/sp1/build.go b/crates/recursion/gnark-ffi/go/sp1/build.go index 174c3f961f..4a082059c7 100644 --- a/crates/recursion/gnark-ffi/go/sp1/build.go +++ b/crates/recursion/gnark-ffi/go/sp1/build.go @@ -292,7 +292,7 @@ func BuildGroth16(dataDir string) { panic(err) } defer pkFile.Close() - _, err = pk.WriteTo(pkFile) + err = pk.WriteDump(pkFile) if err != nil { panic(err) } From 6e016a1185dd5f5385b50692bf8c4f10fb70c328 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 16:28:36 -0700 Subject: [PATCH 118/268] updates --- crates/recursion/gnark-ffi/go/sp1/prove.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/recursion/gnark-ffi/go/sp1/prove.go b/crates/recursion/gnark-ffi/go/sp1/prove.go index 341a5ff89f..0bdd157a2e 100644 --- a/crates/recursion/gnark-ffi/go/sp1/prove.go +++ b/crates/recursion/gnark-ffi/go/sp1/prove.go @@ -104,8 +104,9 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { if err != nil { panic(err) } + r1csReader := bufio.NewReaderSize(r1csFile, 1024*1024) r1cs := groth16.NewCS(ecc.BN254) - r1cs.ReadFrom(r1csFile) + r1cs.ReadFrom(r1csReader) defer r1csFile.Close() fmt.Printf("Reading R1CS took %s\n", time.Since(start)) @@ -116,8 +117,8 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { panic(err) } pk := groth16.NewProvingKey(ecc.BN254) - bufReader := bufio.NewReaderSize(pkFile, 1024*1024) - pk.ReadDump(bufReader) + pkReader := bufio.NewReaderSize(pkFile, 1024*1024) + pk.ReadDump(pkReader) defer pkFile.Close() fmt.Printf("Reading proving key took %s\n", time.Since(start)) From 2124c6fa961ae70744e8ccb3e460c98de5fbfdf2 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Aug 2024 23:02:44 -0700 Subject: [PATCH 119/268] Revert "Merge branch 'tamir/integration-v2' into john/v1.3.0-rc1" This reverts commit 6c757de6a11abb2bfe4f518c77c304dd7f57ab7a, reversing changes made to 8079acddb53b7eb6d2df36adfc0bcdc891042f3d. --- .github/workflows/pr.yml | 37 +++- crates/core/machine/src/cpu/air/memory.rs | 40 ++-- crates/core/machine/src/cpu/columns/mod.rs | 17 +- crates/core/machine/src/cpu/trace.rs | 12 +- .../recursion/circuit-v2/src/constraints.rs | 61 ++---- crates/recursion/circuit-v2/src/fri.rs | 30 +-- crates/recursion/circuit-v2/src/hash.rs | 104 ++------- crates/recursion/circuit-v2/src/lib.rs | 39 +--- .../recursion/circuit-v2/src/machine/core.rs | 2 +- .../circuit-v2/src/machine/deferred.rs | 2 +- .../circuit-v2/src/machine/witness.rs | 4 +- .../recursion/circuit-v2/src/merkle_tree.rs | 197 ------------------ crates/recursion/circuit-v2/src/stark.rs | 2 +- crates/recursion/circuit-v2/src/types.rs | 16 +- .../recursion/circuit-v2/src/witness/mod.rs | 2 +- .../compiler/src/circuit/compiler.rs | 5 +- .../recursion/compiler/src/constraints/mod.rs | 4 - .../core-v2/src/chips/poseidon2_wide/trace.rs | 3 +- crates/recursion/core/src/multi/mod.rs | 1 - .../recursion/core/src/poseidon2_wide/mod.rs | 9 + crates/recursion/gnark-ffi/src/ffi/docker.rs | 15 +- 21 files changed, 139 insertions(+), 463 deletions(-) delete mode 100644 crates/recursion/circuit-v2/src/merkle_tree.rs diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9cdf5340b5..2d7673efe7 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -18,6 +18,39 @@ concurrency: cancel-in-progress: true jobs: + test-fast: + name: Test (fast-experimental) + runs-on: runs-on,runner=64cpu-linux-x64,spot=false + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Run cargo check + uses: actions-rs/cargo@v1 + with: + command: check + toolchain: 1.79.0 + args: --all-targets --all-features + + - name: Run cargo test core-v2 + uses: actions-rs/cargo@v1 + with: + command: test + toolchain: 1.79.0 + args: --release --package sp1-recursion-core-v2 --package sp1-recursion-circuit-v2 --features native-gnark + env: + RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native + RUST_BACKTRACE: 1 + FRI_QUERIES: 1 + SP1_DEV: 1 + + + test-x86: name: Test (x86-64) runs-on: @@ -48,7 +81,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark --workspace --exclude sp1-recursion-core --exclude sp1-recursion-program --exclude sp1-recursion-circuit + args: --release --features native-gnark env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 @@ -85,7 +118,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark --workspace --exclude sp1-recursion-core --exclude sp1-recursion-program --exclude sp1-recursion-circuit + args: --release --features native-gnark env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 diff --git a/crates/core/machine/src/cpu/air/memory.rs b/crates/core/machine/src/cpu/air/memory.rs index 4ab7e1036e..876bd0b956 100644 --- a/crates/core/machine/src/cpu/air/memory.rs +++ b/crates/core/machine/src/cpu/air/memory.rs @@ -1,6 +1,9 @@ use p3_air::AirBuilder; use p3_field::AbstractField; -use sp1_stark::{air::SP1AirBuilder, Word}; +use sp1_stark::{ + air::{BaseAirBuilder, SP1AirBuilder}, + Word, +}; use crate::{ air::{SP1CoreAirBuilder, WordAirBuilder}, @@ -152,6 +155,9 @@ impl CpuChip { // Get the memory specific columns. let memory_columns = local.opcode_specific_columns.memory(); + // Compute whether this is a load instruction. + let is_load = self.is_load_instruction::(&local.selectors); + // Verify the unsigned_mem_value column. self.eval_unsigned_mem_value(builder, memory_columns, local); @@ -159,16 +165,16 @@ impl CpuChip { // of the most significant byte to get it's sign. self.eval_most_sig_byte_bit_decomp(builder, memory_columns, local, &local.unsigned_mem_val); - // Assert that correct value of `mem_value_is_neg_not_x0`. + // Assert that if `is_lb` and `is_lh` are both true, then the most significant byte + // matches the value of `local.mem_value_is_neg`. builder.assert_eq( - local.mem_value_is_neg_not_x0, + local.mem_value_is_neg, (local.selectors.is_lb + local.selectors.is_lh) - * memory_columns.most_sig_byte_decomp[7] - * (AB::Expr::one() - local.instruction.op_a_0), + * memory_columns.most_sig_byte_decomp[7], ); - // When the memory value is negative and not writing to x0, use the SUB opcode to compute - // the signed value of the memory value and verify that the op_a value is correct. + // When the memory value is negative, use the SUB opcode to compute the signed value of + // the memory value and verify that the op_a value is correct. let signed_value = Word([ AB::Expr::zero(), AB::Expr::one() * local.selectors.is_lb, @@ -183,24 +189,14 @@ impl CpuChip { local.shard, local.channel, local.unsigned_mem_val_nonce, - local.mem_value_is_neg_not_x0, - ); - - // Assert that correct value of `mem_value_is_pos_not_x0`. - let mem_value_is_pos = (local.selectors.is_lb + local.selectors.is_lh) - * (AB::Expr::one() - memory_columns.most_sig_byte_decomp[7]) - + local.selectors.is_lbu - + local.selectors.is_lhu - + local.selectors.is_lw; - builder.assert_eq( - local.mem_value_is_pos_not_x0, - mem_value_is_pos * (AB::Expr::one() - local.instruction.op_a_0), + local.mem_value_is_neg, ); - // When the memory value is not positive and not writing to x0, assert that op_a value is - // equal to the unsigned memory value. + // When the memory value is not negaitve, assert that op_a value is equal to the unsigned + // memory value. builder - .when(local.mem_value_is_pos_not_x0) + .when(is_load) + .when_not(local.mem_value_is_neg) .assert_word_eq(local.unsigned_mem_val, local.op_a_val()); } diff --git a/crates/core/machine/src/cpu/columns/mod.rs b/crates/core/machine/src/cpu/columns/mod.rs index 3f382677ee..c008d86f24 100644 --- a/crates/core/machine/src/cpu/columns/mod.rs +++ b/crates/core/machine/src/cpu/columns/mod.rs @@ -88,21 +88,10 @@ pub struct CpuCols { /// > (is_bge | is_bgeu) & !(a_eq_b | a_gt_b) pub not_branching: T, - /// Flag for load mem instructions where the value is negative and not writing to x0. - /// More formally, it is + /// The memory value is negative column is equal to: /// - /// > (is_lb | is_lh) & (most_sig_byte_decomp[7] == 1) & (not writing to x0) - pub mem_value_is_neg_not_x0: T, - - /// Flag for load mem instructions where the value is positive and not writing to x0. - /// More formally, it is - /// - /// ( - /// ((is_lb | is_lh) & (most_sig_byte_decomp[7] == 0)) | - /// is_lbu | is_lhu | is_lw - /// ) & - /// (not writing to x0) - pub mem_value_is_pos_not_x0: T, + /// > (is_lbu | is_lhu) & (most_sig_byte_decomp[7] == 1) + pub mem_value_is_neg: T, /// The unsigned memory value is the value after the offset logic is applied. Used for the load /// memory opcodes (i.e. LB, LH, LW, LBU, and LHU). diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index 5c9d413cb6..f82810f818 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -8,7 +8,6 @@ use sp1_core_executor::{ ByteOpcode, ByteOpcode::U16Range, ExecutionRecord, Opcode, Program, - Register::X0, }; use sp1_primitives::consts::WORD_SIZE; use sp1_stark::{air::MachineAir, Word}; @@ -352,8 +351,7 @@ impl CpuChip { F::from_canonical_u8(most_sig_mem_value_byte >> i & 0x01); } if memory_columns.most_sig_byte_decomp[7] == F::one() { - cols.mem_value_is_neg_not_x0 = - F::from_bool(event.instruction.op_a != (X0 as u32)); + cols.mem_value_is_neg = F::one(); let sub_event = AluEvent { lookup_id: event.memory_sub_lookup_id, channel: event.channel, @@ -375,14 +373,6 @@ impl CpuChip { .or_insert(vec![sub_event]); } } - - // Set the `mem_value_is_pos_not_x0` composite flag. - cols.mem_value_is_pos_not_x0 = F::from_bool( - ((matches!(event.instruction.opcode, Opcode::LB | Opcode::LH) - && (memory_columns.most_sig_byte_decomp[7] == F::zero())) - || matches!(event.instruction.opcode, Opcode::LBU | Opcode::LHU | Opcode::LW)) - && event.instruction.op_a != (X0 as u32), - ); } // Add event to byte lookup for byte range checking each byte in the memory addr diff --git a/crates/recursion/circuit-v2/src/constraints.rs b/crates/recursion/circuit-v2/src/constraints.rs index 5f1b4aebbe..1512d144ae 100644 --- a/crates/recursion/circuit-v2/src/constraints.rs +++ b/crates/recursion/circuit-v2/src/constraints.rs @@ -1,11 +1,11 @@ use p3_air::{Air, BaseAir}; use p3_baby_bear::BabyBear; use p3_commit::{LagrangeSelectors, Mmcs, PolynomialSpace, TwoAdicMultiplicativeCoset}; -use p3_field::{AbstractExtensionField, AbstractField, Field, TwoAdicField}; +use p3_field::{AbstractExtensionField, AbstractField, TwoAdicField}; use p3_matrix::dense::RowMajorMatrix; use sp1_recursion_compiler::ir::{ - Builder, Config, Ext, ExtConst, ExtensionOperand, Felt, SymbolicExt, SymbolicFelt, + Builder, Config, Ext, ExtensionOperand, Felt, SymbolicExt, SymbolicFelt, }; use sp1_stark::{ air::MachineAir, AirOpenedValues, ChipOpenedValues, GenericVerifierConstraintFolder, @@ -121,17 +121,6 @@ where qc_domains: &[TwoAdicMultiplicativeCoset], zeta: Ext, ) -> Ext { - // Compute the maximum power of zeta we will need. - let max_domain_log_n = qc_domains.iter().map(|d| d.log_n).max().unwrap(); - - // Compute all powers of zeta of the form zeta^(2^i) up to `zeta^(2^max_domain_log_n)`. - let mut zetas: Vec> = vec![zeta]; - for _ in 1..max_domain_log_n + 1 { - let last_zeta = zetas.last().unwrap(); - let new_zeta = builder.eval(*last_zeta * *last_zeta); - builder.reduce_e(new_zeta); - zetas.push(new_zeta); - } let zps = qc_domains .iter() .enumerate() @@ -141,37 +130,24 @@ where .enumerate() .filter(|(j, _)| *j != i) .map(|(_, other_domain)| { - // `shift_power` is used in the computation of - let shift_power = - other_domain.shift.exp_power_of_2(other_domain.log_n).inverse(); - // This is `other_domain.zp_at_point_f(builder, domain.first_point())`. - // We compute it as a constant here. - let z_f = domain.first_point().exp_power_of_2(other_domain.log_n) - * shift_power - - C::F::one(); + let first_point = builder.eval(domain.first_point()); ( - { - // We use the precomputed powers of zeta to compute (inline) the value of - // `other_domain.zp_at_point_variable(builder, zeta)`. - let z: Ext<_, _> = builder.eval( - zetas[other_domain.log_n] * SymbolicFelt::from_f(shift_power) - - SymbolicExt::from_f(C::EF::one()), - ); - z.to_operand().symbolic() - }, - builder.constant::>(z_f), + other_domain + .zp_at_point_variable(builder, zeta) + .to_operand() + .symbolic(), + other_domain.zp_at_point_f(builder, first_point).inverse(), ) }) - .unzip::<_, _, Vec>, Vec>>(); - let symbolic_prod: SymbolicFelt<_> = - zinvs.into_iter().map(|x| x.into()).product::>(); - (zs.into_iter().product::>(), symbolic_prod) + .unzip::<_, _, Vec<_>, Vec<_>>(); + zs.into_iter().product::>() + * zinvs.into_iter().product::>() }) - .collect::, SymbolicFelt<_>)>>() + .collect::>>() .into_iter() - .map(|(x, y)| builder.eval(x / y)) + .map(|x| builder.eval(x)) .collect::>>(); - zps.iter().for_each(|zp| builder.reduce_e(*zp)); + builder.eval( opening .quotient @@ -179,11 +155,10 @@ where .enumerate() .map(|(ch_i, ch)| { assert_eq!(ch.len(), C::EF::D); - zps[ch_i].to_operand().symbolic() - * ch.iter() - .enumerate() - .map(|(e_i, &c)| C::EF::monomial(e_i).cons() * SymbolicExt::from(c)) - .sum::>() + ch.iter() + .enumerate() + .map(|(e_i, &c)| zps[ch_i] * C::EF::monomial(e_i) * c) + .sum::>() }) .sum::>(), ) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index f3bd075323..ae4b12c457 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -66,14 +66,6 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let log_global_max_height = proof.fri_proof.commit_phase_commits.len() + config.log_blowup; - // Precompute the two-adic powers of the two-adic generator. They can be loaded in as constants. - // The ith element has order 2^(log_global_max_height - i). - let mut precomputed_generator_powers: Vec> = vec![]; - for i in 0..log_global_max_height + 1 { - precomputed_generator_powers - .push(builder.constant(C::F::two_adic_generator(log_global_max_height - i))); - } - // The powers of alpha, where the ith element is alpha^i. let mut alpha_pows: Vec> = vec![builder.eval(SymbolicExt::from_f(C::EF::one()))]; @@ -120,11 +112,10 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV index_bits[bits_reduced..(bits_reduced + log_height)].to_vec(); let g = builder.generator(); - let two_adic_generator_exp = C::exp_f_bits_precomputed( - builder, - &reduced_index_bits_trunc.into_iter().rev().collect_vec(), - &precomputed_generator_powers[bits_reduced..], - ); + let two_adic_generator: Felt<_> = + builder.eval(C::F::two_adic_generator(log_height)); + let two_adic_generator_exp = + C::exp_reverse_bits(builder, two_adic_generator, reduced_index_bits_trunc); // Unroll the following to avoid symbolic expression overhead // let x: Felt<_> = builder.eval(g * two_adic_generator_exp); @@ -134,7 +125,8 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV for (z, ps_at_z) in izip!(mat_points, mat_values) { // Unroll the loop calculation to avoid symbolic expression overhead - // let mut acc: Ext = builder.constant(C::EF::zero()); + // let mut acc: Ext = + // builder.eval(SymbolicExt::from_f(C::EF::zero())); let mut acc: Ext<_, _> = builder.uninit(); builder.operations.push(DslIr::ImmE(acc, C::EF::zero())); @@ -231,7 +223,7 @@ pub fn verify_challenges, SC: BabyBearFriConfigVar pub fn verify_query, SC: BabyBearFriConfigVariable>( builder: &mut Builder, - commit_phase_commits: &[SC::DigestVariable], + commit_phase_commits: &[SC::Digest], index_bits: &[C::Bit], proof: FriQueryProofVariable, betas: &[Ext], @@ -331,11 +323,11 @@ pub fn verify_query, SC: BabyBearFriConfigVariable pub fn verify_batch, SC: BabyBearFriConfigVariable>( builder: &mut Builder, - commit: SC::DigestVariable, + commit: SC::Digest, heights: &[usize], index_bits: &[C::Bit], opened_values: Vec>>>, - proof: Vec, + proof: Vec, ) { let mut heights_tallest_first = heights.iter().enumerate().sorted_by_key(|(_, height)| Reverse(*height)).peekable(); @@ -348,9 +340,9 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable .cloned() .collect::>(); let felt_slice: Vec> = ext_slice.into_iter().flatten().collect::>(); - let mut root: SC::DigestVariable = SC::hash(builder, &felt_slice[..]); + let mut root: SC::Digest = SC::hash(builder, &felt_slice[..]); - zip(index_bits.iter(), proof).for_each(|(&bit, sibling): (&C::Bit, SC::DigestVariable)| { + zip(index_bits.iter(), proof).for_each(|(&bit, sibling): (&C::Bit, SC::Digest)| { let compress_args = SC::select_chain_digest(builder, bit, [root, sibling]); root = SC::compress(builder, compress_args); diff --git a/crates/recursion/circuit-v2/src/hash.rs b/crates/recursion/circuit-v2/src/hash.rs index 5c59e8d08d..135d4ceba8 100644 --- a/crates/recursion/circuit-v2/src/hash.rs +++ b/crates/recursion/circuit-v2/src/hash.rs @@ -1,92 +1,61 @@ -use std::fmt::Debug; -use std::iter::{repeat, zip}; +use std::iter::zip; use itertools::Itertools; use p3_baby_bear::BabyBear; use p3_field::{AbstractField, Field}; use p3_bn254_fr::Bn254Fr; -use p3_symmetric::Permutation; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, ir::{Builder, Config, DslIr, Felt, Var}, }; -use sp1_recursion_core_v2::stark::config::outer_perm; use sp1_recursion_core_v2::{stark::config::BabyBearPoseidon2Outer, DIGEST_SIZE}; use sp1_stark::baby_bear_poseidon2::BabyBearPoseidon2; -use sp1_stark::inner_perm; use crate::{ challenger::{reduce_32, RATE, SPONGE_SIZE}, select_chain, CircuitConfig, }; -pub trait FieldHasher { - type Digest: Clone + Copy + Default + PartialEq + Eq + Copy + Debug; +pub trait FieldHasherVariable { + type Digest: Clone + Copy; - fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest; -} - -pub trait FieldHasherVariable: FieldHasher { - type DigestVariable: Clone + Copy; - - fn hash(builder: &mut Builder, input: &[Felt]) -> Self::DigestVariable; + fn hash(builder: &mut Builder, input: &[Felt]) -> Self::Digest; - fn compress(builder: &mut Builder, input: [Self::DigestVariable; 2]) - -> Self::DigestVariable; + fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest; - fn assert_digest_eq(builder: &mut Builder, a: Self::DigestVariable, b: Self::DigestVariable); + fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest); // Encountered many issues trying to make the following two parametrically polymorphic. fn select_chain_digest( builder: &mut Builder, should_swap: C::Bit, - input: [Self::DigestVariable; 2], - ) -> [Self::DigestVariable; 2]; - - fn print_digest(builder: &mut Builder, digest: Self::DigestVariable); -} - -impl FieldHasher for BabyBearPoseidon2 { - type Digest = [BabyBear; DIGEST_SIZE]; - - fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest { - let mut pre_iter = input.into_iter().flatten().chain(repeat(BabyBear::zero())); - let mut pre = core::array::from_fn(move |_| pre_iter.next().unwrap()); - (inner_perm()).permute_mut(&mut pre); - pre[..DIGEST_SIZE].try_into().unwrap() - } + input: [Self::Digest; 2], + ) -> [Self::Digest; 2]; } impl>> FieldHasherVariable for BabyBearPoseidon2 { - type DigestVariable = [Felt; DIGEST_SIZE]; + type Digest = [Felt; DIGEST_SIZE]; - fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::DigestVariable { + fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::Digest { builder.poseidon2_hash_v2(input) } - fn compress( - builder: &mut Builder, - input: [Self::DigestVariable; 2], - ) -> Self::DigestVariable { + fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest { builder.poseidon2_compress_v2(input.into_iter().flatten()) } - fn assert_digest_eq( - builder: &mut Builder, - a: Self::DigestVariable, - b: Self::DigestVariable, - ) { + fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest) { zip(a, b).for_each(|(e1, e2)| builder.assert_felt_eq(e1, e2)); } fn select_chain_digest( builder: &mut Builder, should_swap: ::Bit, - input: [Self::DigestVariable; 2], - ) -> [Self::DigestVariable; 2] { + input: [Self::Digest; 2], + ) -> [Self::Digest; 2] { let err_msg = "select_chain's return value should have length the sum of its inputs"; let mut selected = select_chain(builder, should_swap, input[0], input[1]); let ret = [ @@ -96,31 +65,15 @@ impl>> FieldHasherVariable, digest: Self::DigestVariable) { - for d in digest.iter() { - builder.print_f(*d); - } - } } pub const BN254_DIGEST_SIZE: usize = 1; - -impl FieldHasher for BabyBearPoseidon2Outer { - type Digest = [Bn254Fr; BN254_DIGEST_SIZE]; - - fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest { - let mut state = [input[0][0], input[1][0], Bn254Fr::zero()]; - outer_perm().permute_mut(&mut state); - [state[0]; BN254_DIGEST_SIZE] - } -} impl>> FieldHasherVariable for BabyBearPoseidon2Outer { - type DigestVariable = [Var; BN254_DIGEST_SIZE]; + type Digest = [Var; BN254_DIGEST_SIZE]; - fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::DigestVariable { + fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::Digest { assert!(C::N::bits() == p3_bn254_fr::Bn254Fr::bits()); assert!(C::F::bits() == p3_baby_bear::BabyBear::bits()); let num_f_elms = C::N::bits() / C::F::bits(); @@ -137,35 +90,28 @@ impl>> FieldHashe [state[0]; BN254_DIGEST_SIZE] } - fn compress( - builder: &mut Builder, - input: [Self::DigestVariable; 2], - ) -> Self::DigestVariable { + fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest { let state: [Var; SPONGE_SIZE] = [builder.eval(input[0][0]), builder.eval(input[1][0]), builder.eval(C::N::zero())]; builder.push(DslIr::CircuitPoseidon2Permute(state)); [state[0]; BN254_DIGEST_SIZE] } - fn assert_digest_eq( - builder: &mut Builder, - a: Self::DigestVariable, - b: Self::DigestVariable, - ) { + fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest) { zip(a, b).for_each(|(e1, e2)| builder.assert_var_eq(e1, e2)); } fn select_chain_digest( builder: &mut Builder, should_swap: ::Bit, - input: [Self::DigestVariable; 2], - ) -> [Self::DigestVariable; 2] { - let result0: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { + input: [Self::Digest; 2], + ) -> [Self::Digest; 2] { + let result0: [Var<_>; 1] = core::array::from_fn(|j| { let result = builder.uninit(); builder.push(DslIr::CircuitSelectV(should_swap, input[1][j], input[0][j], result)); result }); - let result1: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { + let result1: [Var<_>; 1] = core::array::from_fn(|j| { let result = builder.uninit(); builder.push(DslIr::CircuitSelectV(should_swap, input[0][j], input[1][j], result)); result @@ -173,12 +119,6 @@ impl>> FieldHashe [result0, result1] } - - fn print_digest(builder: &mut Builder, digest: Self::DigestVariable) { - for d in digest.iter() { - builder.print_v(*d); - } - } } // impl> FieldHasherVariable for OuterHash { diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 3b975297cc..bf83b17b5d 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -27,7 +27,6 @@ pub mod domain; pub mod fri; pub mod hash; pub mod machine; -pub mod merkle_tree; pub mod stark; pub(crate) mod utils; pub mod witness; @@ -61,7 +60,7 @@ pub type PcsConfig = FriConfig< >, >; -pub type Digest = >::DigestVariable; +pub type Digest = >::Digest; pub type FriMmcs = ExtensionMmcs::ValMmcs>; @@ -96,7 +95,7 @@ pub trait BabyBearFriConfigVariable>: BabyBearFriConfig + FieldHasherVariable { type FriChallengerVariable: FieldChallengerVariable::Bit> - + CanObserveVariable>::DigestVariable> + + CanObserveVariable>::Digest> + CanCopyChallenger; /// Get a new challenger corresponding to the given config. @@ -128,14 +127,6 @@ pub trait CircuitConfig: Config { power_bits: Vec, ) -> Felt<::F>; - /// Exponentiates a felt x to a list of bits in little endian. Uses precomputed powers - /// of x. - fn exp_f_bits_precomputed( - builder: &mut Builder, - power_bits: &[Self::Bit], - two_adic_powers_of_x: &[Felt], - ) -> Felt; - fn num2bits( builder: &mut Builder, num: Felt<::F>, @@ -240,18 +231,6 @@ impl CircuitConfig for InnerConfig { .map(|((id_v, sw_v), (id_c, sw_c))| builder.eval(id_v * id_c + sw_v * sw_c)) .collect() } - - fn exp_f_bits_precomputed( - builder: &mut Builder, - power_bits: &[Self::Bit], - two_adic_powers_of_x: &[Felt], - ) -> Felt { - Self::exp_reverse_bits( - builder, - two_adic_powers_of_x[0], - power_bits.iter().rev().copied().collect(), - ) - } } impl CircuitConfig for OuterConfig { @@ -353,20 +332,6 @@ impl CircuitConfig for OuterConfig { }) .collect() } - - fn exp_f_bits_precomputed( - builder: &mut Builder, - power_bits: &[Self::Bit], - two_adic_powers_of_x: &[Felt], - ) -> Felt { - let mut result: Felt<_> = builder.eval(Self::F::one()); - let one = builder.constant(Self::F::one()); - for (&bit, &power) in power_bits.iter().zip(two_adic_powers_of_x) { - let multiplier = builder.select_f(bit, power, one); - result = builder.eval(multiplier * result); - } - result - } } impl BabyBearFriConfig for BabyBearPoseidon2 { diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 20a0c15918..56800b147b 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -73,7 +73,7 @@ where SC: BabyBearFriConfigVariable< C, FriChallengerVariable = DuplexChallengerVariable, - DigestVariable = [Felt; DIGEST_SIZE], + Digest = [Felt; DIGEST_SIZE], >, C: CircuitConfig>, >::ProverData>: Clone, diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 0246480cc2..a16c3a9bcd 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -71,7 +71,7 @@ where SC: BabyBearFriConfigVariable< C, FriChallengerVariable = DuplexChallengerVariable, - DigestVariable = [Felt; DIGEST_SIZE], + Digest = [Felt; DIGEST_SIZE], >, C: CircuitConfig>, >::ProverData>: Clone, diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index 015f938c5d..b8f4bcf750 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -77,7 +77,7 @@ where impl, SC: BabyBearFriConfigVariable> Witnessable for StarkVerifyingKey where - Com: Witnessable>::DigestVariable>, + Com: Witnessable>::Digest>, OpeningProof: Witnessable>, { type WitnessVariable = VerifyingKeyVariable; @@ -148,7 +148,7 @@ where impl, SC: BabyBearFriConfigVariable> Witnessable for SP1CompressWitnessValues where - Com: Witnessable>::DigestVariable>, + Com: Witnessable>::Digest>, OpeningProof: Witnessable>, { type WitnessVariable = SP1CompressWitnessVariable; diff --git a/crates/recursion/circuit-v2/src/merkle_tree.rs b/crates/recursion/circuit-v2/src/merkle_tree.rs deleted file mode 100644 index d50edac6e9..0000000000 --- a/crates/recursion/circuit-v2/src/merkle_tree.rs +++ /dev/null @@ -1,197 +0,0 @@ -use std::fmt::Debug; - -use itertools::Itertools; -use p3_field::Field; -use p3_util::{reverse_bits_len, reverse_slice_index_bits}; -use sp1_core_machine::utils::log2_strict_usize; -use sp1_recursion_compiler::ir::Builder; - -use crate::{ - hash::{FieldHasher, FieldHasherVariable}, - CircuitConfig, -}; - -#[derive(Debug, Clone)] -pub struct MerkleTree> { - /// The height of the tree, not counting the root layer. This is the same as the logarithm of the - /// number of leaves. - pub height: usize, - - /// All the layers but the root. If there are `n` leaves where `n` is a power of 2, there are - /// `2n - 2` elements in this vector. The leaves are at the beginning of the vector. - pub digest_layers: Vec, -} -pub struct VcsError; - -impl Debug for VcsError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "VcsError") - } -} - -impl> MerkleTree { - pub fn commit(leaves: Vec) -> (HV::Digest, Self) { - assert!(!leaves.is_empty()); - let new_len = leaves.len().next_power_of_two(); - let height = log2_strict_usize(new_len); - - // Pre-allocate the vector. - let mut digest_layers = Vec::with_capacity(2 * new_len - 2); - - // If `leaves.len()` is not a power of 2, we pad the leaves with default values. - let mut last_layer = leaves; - let old_len = last_layer.len(); - for _ in old_len..new_len { - last_layer.push(HV::Digest::default()); - } - - // Store the leaves in bit-reversed order. - reverse_slice_index_bits(&mut last_layer); - - digest_layers.extend(last_layer.iter()); - - // Compute the rest of the layers. - for _ in 0..height - 1 { - let mut next_layer = Vec::with_capacity(last_layer.len() / 2); - for (a, b) in last_layer.iter().tuples() { - next_layer.push(HV::constant_compress([*a, *b])); - } - digest_layers.extend(next_layer.iter()); - - last_layer = next_layer; - } - - debug_assert_eq!(digest_layers.len(), 2 * new_len - 2); - - let root = HV::constant_compress([last_layer[0], last_layer[1]]); - (root, Self { height, digest_layers }) - } - - pub fn open(&self, index: usize) -> (HV::Digest, Vec) { - let mut path = Vec::with_capacity(self.height); - let mut bit_rev_index = reverse_bits_len(index, self.height); - let value = self.digest_layers[bit_rev_index]; - - // Variable to keep track index of the first element in the current layer. - let mut offset = 0; - for i in 0..self.height { - let sibling = if bit_rev_index % 2 == 0 { - self.digest_layers[offset + bit_rev_index + 1] - } else { - self.digest_layers[offset + bit_rev_index - 1] - }; - path.push(sibling); - bit_rev_index >>= 1; - - // The current layer has 1 << (height - i) elements, so we shift offset by that amount. - offset += 1 << (self.height - i); - } - debug_assert_eq!(path.len(), self.height); - (value, path) - } - - pub fn verify( - index: usize, - value: HV::Digest, - path: &[HV::Digest], - commitment: HV::Digest, - ) -> Result<(), VcsError> { - let mut value = value; - - let mut index = reverse_bits_len(index, path.len()); - - for sibling in path { - let sibling = *sibling; - - // If the index is odd, swap the order of [value, sibling]. - let new_pair = if index % 2 == 0 { [value, sibling] } else { [sibling, value] }; - value = HV::constant_compress(new_pair); - index >>= 1; - } - if value == commitment { - Ok(()) - } else { - Err(VcsError) - } - } -} - -pub fn verify>( - builder: &mut Builder, - index: Vec, - value: HV::DigestVariable, - path: &[HV::DigestVariable], - commitment: HV::DigestVariable, -) { - let mut value = value; - for (sibling, bit) in path.iter().zip(index.iter().rev()) { - let sibling = *sibling; - - // If the index is odd, swap the order of [value, sibling]. - let new_pair = HV::select_chain_digest(builder, *bit, [value, sibling]); - value = HV::compress(builder, new_pair); - } - HV::assert_digest_eq(builder, value, commitment); -} - -#[cfg(test)] -mod tests { - use itertools::Itertools; - use p3_baby_bear::BabyBear; - use p3_field::AbstractField; - use rand::rngs::OsRng; - use sp1_recursion_compiler::{ - config::InnerConfig, - ir::{Builder, Felt}, - }; - use sp1_recursion_core_v2::DIGEST_SIZE; - use sp1_stark::baby_bear_poseidon2::BabyBearPoseidon2; - use zkhash::ark_ff::UniformRand; - - use crate::{ - merkle_tree::{verify, MerkleTree}, - utils::tests::run_test_recursion, - CircuitConfig, - }; - type C = InnerConfig; - type F = BabyBear; - type HV = BabyBearPoseidon2; - - #[test] - fn test_merkle_tree_inner() { - let mut rng = OsRng; - let mut builder = Builder::::default(); - for _ in 0..20 { - let leaves: Vec<[F; DIGEST_SIZE]> = - (0..17).map(|_| std::array::from_fn(|_| F::rand(&mut rng))).collect(); - let (root, tree) = MerkleTree::::commit(leaves.to_vec()); - for (i, leaf) in leaves.iter().enumerate() { - let (value, proof) = MerkleTree::::open(&tree, i); - assert!(value == *leaf); - MerkleTree::::verify(i, value, &proof, root).unwrap(); - let (value_variable, proof_variable): ([Felt<_>; 8], Vec<[Felt<_>; 8]>) = ( - std::array::from_fn(|i| builder.constant(value[i])), - proof - .iter() - .map(|x| std::array::from_fn(|i| builder.constant(x[i]))) - .collect_vec(), - ); - - let index_var = builder.constant(BabyBear::from_canonical_usize(i)); - let index_bits = C::num2bits(&mut builder, index_var, 5); - let root_variable: [Felt<_>; 8] = - root.iter().map(|x| builder.constant(*x)).collect_vec().try_into().unwrap(); - - verify::( - &mut builder, - index_bits, - value_variable, - &proof_variable, - root_variable, - ); - } - } - - run_test_recursion(builder.operations, std::iter::empty()); - } -} diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index b6b0c1b56f..f559a61e32 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -31,7 +31,7 @@ use crate::{ /// Reference: [sp1_core::stark::ShardProof] #[derive(Clone)] pub struct ShardProofVariable, SC: BabyBearFriConfigVariable> { - pub commitment: ShardCommitment, + pub commitment: ShardCommitment, pub opened_values: ShardOpenedValues>, pub opening_proof: TwoAdicPcsProofVariable, pub chip_ordering: HashMap, diff --git a/crates/recursion/circuit-v2/src/types.rs b/crates/recursion/circuit-v2/src/types.rs index 57a1458255..8906494405 100644 --- a/crates/recursion/circuit-v2/src/types.rs +++ b/crates/recursion/circuit-v2/src/types.rs @@ -15,7 +15,7 @@ use crate::{ /// Reference: [sp1_core::stark::StarkVerifyingKey] #[derive(Clone)] pub struct VerifyingKeyVariable, SC: BabyBearFriConfigVariable> { - pub commitment: SC::DigestVariable, + pub commitment: SC::Digest, pub pc_start: Felt, pub chip_information: Vec<(String, TwoAdicMultiplicativeCoset, Dimensions)>, pub chip_ordering: HashMap, @@ -23,7 +23,7 @@ pub struct VerifyingKeyVariable, SC: BabyBearFriCo #[derive(Clone)] pub struct FriProofVariable> { - pub commit_phase_commits: Vec, + pub commit_phase_commits: Vec, pub query_proofs: Vec>, pub final_poly: Ext, pub pow_witness: Felt, @@ -33,7 +33,7 @@ pub struct FriProofVariable> { #[derive(Clone)] pub struct FriCommitPhaseProofStepVariable> { pub sibling_value: Ext, - pub opening_proof: Vec, + pub opening_proof: Vec, } /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/fri/src/proof.rs#L23 @@ -58,12 +58,12 @@ pub struct TwoAdicPcsProofVariable> #[derive(Clone)] pub struct BatchOpeningVariable> { pub opened_values: Vec>>>, - pub opening_proof: Vec, + pub opening_proof: Vec, } #[derive(Clone)] pub struct TwoAdicPcsRoundVariable> { - pub batch_commit: H::DigestVariable, + pub batch_commit: H::Digest, pub domains_points_and_opens: Vec>, } @@ -77,7 +77,7 @@ pub struct TwoAdicPcsMatsVariable { impl, SC: BabyBearFriConfigVariable> VerifyingKeyVariable { pub fn observe_into(&self, builder: &mut Builder, challenger: &mut Challenger) where - Challenger: CanObserveVariable> + CanObserveVariable, + Challenger: CanObserveVariable> + CanObserveVariable, { // Observe the commitment. challenger.observe(builder, self.commitment); @@ -92,10 +92,10 @@ impl, SC: BabyBearFriConfigVariable> VerifyingK /// Hash the verifying key + prep domains into a single digest. /// poseidon2( commit[0..8] || pc_start || prep_domains[N].{log_n, .size, .shift, .g}) - pub fn hash(&self, builder: &mut Builder) -> SC::DigestVariable + pub fn hash(&self, builder: &mut Builder) -> SC::Digest where C::F: TwoAdicField, - SC::DigestVariable: IntoIterator>, + SC::Digest: IntoIterator>, { let prep_domains = self.chip_information.iter().map(|(_, domain, _)| domain); let num_inputs = DIGEST_SIZE + 1 + (4 * prep_domains.len()); diff --git a/crates/recursion/circuit-v2/src/witness/mod.rs b/crates/recursion/circuit-v2/src/witness/mod.rs index 92811f7dc0..e472661ca1 100644 --- a/crates/recursion/circuit-v2/src/witness/mod.rs +++ b/crates/recursion/circuit-v2/src/witness/mod.rs @@ -132,7 +132,7 @@ impl> Witnessable for Vec { impl, SC: BabyBearFriConfigVariable> Witnessable for ShardProof where - Com: Witnessable>::DigestVariable>, + Com: Witnessable>::Digest>, OpeningProof: Witnessable>, { type WitnessVariable = ShardProofVariable; diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 62b6201880..f78800ed1c 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -823,9 +823,8 @@ mod tests { } // Run with the poseidon2 skinny chip. - let skinny_machine = RecursionAir::<_, 9, 0>::machine_skinny_with_all_chips( - BabyBearPoseidon2::ultra_compressed(), - ); + let skinny_machine = + RecursionAir::<_, 9, 0>::machine_skinny_with_all_chips(BabyBearPoseidon2::compressed()); let (pk, vk) = skinny_machine.setup(&program); let result = run_test_machine(vec![record.clone()], skinny_machine, pk, vk); if let Err(e) = result { diff --git a/crates/recursion/compiler/src/constraints/mod.rs b/crates/recursion/compiler/src/constraints/mod.rs index 03bcd09838..d086c64c51 100644 --- a/crates/recursion/compiler/src/constraints/mod.rs +++ b/crates/recursion/compiler/src/constraints/mod.rs @@ -225,10 +225,6 @@ impl ConstraintCompiler { args: vec![vec![a.id()], vec![tmp], vec![c.id()]], }); } - DslIr::DivF(a, b, c) => constraints.push(Constraint { - opcode: ConstraintOpcode::DivF, - args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], - }), DslIr::DivEF(a, b, c) => constraints.push(Constraint { opcode: ConstraintOpcode::DivEF, args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index dfe81855c9..f233648a41 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -2,7 +2,8 @@ use std::{borrow::BorrowMut, mem::size_of}; use p3_air::BaseAir; use p3_field::PrimeField32; -use p3_matrix::{dense::RowMajorMatrix, Matrix}; +use p3_matrix::dense::RowMajorMatrix; +use p3_matrix::Matrix; use p3_maybe_rayon::prelude::*; use sp1_core_machine::utils::next_power_of_two; use sp1_primitives::RC_16_30_U32; diff --git a/crates/recursion/core/src/multi/mod.rs b/crates/recursion/core/src/multi/mod.rs index cb3f0604bb..6c4cc566db 100644 --- a/crates/recursion/core/src/multi/mod.rs +++ b/crates/recursion/core/src/multi/mod.rs @@ -344,7 +344,6 @@ mod tests { }; #[test] - #[ignore] fn prove_babybear() { let config = BabyBearPoseidon2::compressed(); let mut challenger = config.challenger(); diff --git a/crates/recursion/core/src/poseidon2_wide/mod.rs b/crates/recursion/core/src/poseidon2_wide/mod.rs index 0019552e8a..e7e6f9cc11 100644 --- a/crates/recursion/core/src/poseidon2_wide/mod.rs +++ b/crates/recursion/core/src/poseidon2_wide/mod.rs @@ -298,6 +298,15 @@ pub(crate) mod tests { input_exec } + #[test] + fn poseidon2_wide_prove_babybear_success() { + // Generate test input exec record. + let input_exec = generate_test_execution_record(false); + + poseidon2_wide_prove_babybear_degree::<3>(input_exec.clone()); + poseidon2_wide_prove_babybear_degree::<9>(input_exec); + } + #[test] #[should_panic] fn poseidon2_wide_prove_babybear_failure() { diff --git a/crates/recursion/gnark-ffi/src/ffi/docker.rs b/crates/recursion/gnark-ffi/src/ffi/docker.rs index 119253d492..9941afb7b4 100644 --- a/crates/recursion/gnark-ffi/src/ffi/docker.rs +++ b/crates/recursion/gnark-ffi/src/ffi/docker.rs @@ -1,4 +1,3 @@ -use crate::ProofBn254; use crate::{Groth16Bn254Proof, PlonkBn254Proof}; use anyhow::{anyhow, Result}; use sp1_core_machine::SP1_CIRCUIT_VERSION; @@ -72,23 +71,13 @@ fn prove(system: ProofSystem, data_dir: &str, witness_path: &str) -> Result PlonkBn254Proof { let result = prove(ProofSystem::Plonk, data_dir, witness_path).expect("failed to prove with docker"); - let deserialized: ProofBn254 = - bincode::deserialize(&result).expect("failed to deserialize result"); - match deserialized { - ProofBn254::Plonk(proof) => proof, - _ => panic!("unexpected proof type"), - } + bincode::deserialize(&result).expect("failed to deserialize result") } pub fn prove_groth16_bn254(data_dir: &str, witness_path: &str) -> Groth16Bn254Proof { let result = prove(ProofSystem::Groth16, data_dir, witness_path).expect("failed to prove with docker"); - let deserialized: ProofBn254 = - bincode::deserialize(&result).expect("failed to deserialize result"); - match deserialized { - ProofBn254::Groth16(proof) => proof, - _ => panic!("unexpected proof type"), - } + bincode::deserialize(&result).expect("failed to deserialize result") } fn build(system: ProofSystem, data_dir: &str) -> Result<()> { From 90297514072eb237cf9901b06939975dc47dd3db Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 09:51:52 -0700 Subject: [PATCH 120/268] Revert "Revert "Merge branch 'tamir/integration-v2' into john/v1.3.0-rc1"" This reverts commit 2124c6fa961ae70744e8ccb3e460c98de5fbfdf2. --- .github/workflows/pr.yml | 37 +--- crates/core/machine/src/cpu/air/memory.rs | 40 ++-- crates/core/machine/src/cpu/columns/mod.rs | 17 +- crates/core/machine/src/cpu/trace.rs | 12 +- .../recursion/circuit-v2/src/constraints.rs | 61 ++++-- crates/recursion/circuit-v2/src/fri.rs | 30 ++- crates/recursion/circuit-v2/src/hash.rs | 104 +++++++-- crates/recursion/circuit-v2/src/lib.rs | 39 +++- .../recursion/circuit-v2/src/machine/core.rs | 2 +- .../circuit-v2/src/machine/deferred.rs | 2 +- .../circuit-v2/src/machine/witness.rs | 4 +- .../recursion/circuit-v2/src/merkle_tree.rs | 197 ++++++++++++++++++ crates/recursion/circuit-v2/src/stark.rs | 2 +- crates/recursion/circuit-v2/src/types.rs | 16 +- .../recursion/circuit-v2/src/witness/mod.rs | 2 +- .../compiler/src/circuit/compiler.rs | 5 +- .../recursion/compiler/src/constraints/mod.rs | 4 + .../core-v2/src/chips/poseidon2_wide/trace.rs | 3 +- crates/recursion/core/src/multi/mod.rs | 1 + .../recursion/core/src/poseidon2_wide/mod.rs | 9 - crates/recursion/gnark-ffi/src/ffi/docker.rs | 15 +- 21 files changed, 463 insertions(+), 139 deletions(-) create mode 100644 crates/recursion/circuit-v2/src/merkle_tree.rs diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2d7673efe7..9cdf5340b5 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -18,39 +18,6 @@ concurrency: cancel-in-progress: true jobs: - test-fast: - name: Test (fast-experimental) - runs-on: runs-on,runner=64cpu-linux-x64,spot=false - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Setup CI - uses: ./.github/actions/setup - - - name: Run cargo check - uses: actions-rs/cargo@v1 - with: - command: check - toolchain: 1.79.0 - args: --all-targets --all-features - - - name: Run cargo test core-v2 - uses: actions-rs/cargo@v1 - with: - command: test - toolchain: 1.79.0 - args: --release --package sp1-recursion-core-v2 --package sp1-recursion-circuit-v2 --features native-gnark - env: - RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native - RUST_BACKTRACE: 1 - FRI_QUERIES: 1 - SP1_DEV: 1 - - - test-x86: name: Test (x86-64) runs-on: @@ -81,7 +48,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark + args: --release --features native-gnark --workspace --exclude sp1-recursion-core --exclude sp1-recursion-program --exclude sp1-recursion-circuit env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 @@ -118,7 +85,7 @@ jobs: with: command: test toolchain: 1.79.0 - args: --release --features native-gnark + args: --release --features native-gnark --workspace --exclude sp1-recursion-core --exclude sp1-recursion-program --exclude sp1-recursion-circuit env: RUSTFLAGS: -Copt-level=3 -Cdebug-assertions -Coverflow-checks=y -Cdebuginfo=0 -C target-cpu=native RUST_BACKTRACE: 1 diff --git a/crates/core/machine/src/cpu/air/memory.rs b/crates/core/machine/src/cpu/air/memory.rs index 876bd0b956..4ab7e1036e 100644 --- a/crates/core/machine/src/cpu/air/memory.rs +++ b/crates/core/machine/src/cpu/air/memory.rs @@ -1,9 +1,6 @@ use p3_air::AirBuilder; use p3_field::AbstractField; -use sp1_stark::{ - air::{BaseAirBuilder, SP1AirBuilder}, - Word, -}; +use sp1_stark::{air::SP1AirBuilder, Word}; use crate::{ air::{SP1CoreAirBuilder, WordAirBuilder}, @@ -155,9 +152,6 @@ impl CpuChip { // Get the memory specific columns. let memory_columns = local.opcode_specific_columns.memory(); - // Compute whether this is a load instruction. - let is_load = self.is_load_instruction::(&local.selectors); - // Verify the unsigned_mem_value column. self.eval_unsigned_mem_value(builder, memory_columns, local); @@ -165,16 +159,16 @@ impl CpuChip { // of the most significant byte to get it's sign. self.eval_most_sig_byte_bit_decomp(builder, memory_columns, local, &local.unsigned_mem_val); - // Assert that if `is_lb` and `is_lh` are both true, then the most significant byte - // matches the value of `local.mem_value_is_neg`. + // Assert that correct value of `mem_value_is_neg_not_x0`. builder.assert_eq( - local.mem_value_is_neg, + local.mem_value_is_neg_not_x0, (local.selectors.is_lb + local.selectors.is_lh) - * memory_columns.most_sig_byte_decomp[7], + * memory_columns.most_sig_byte_decomp[7] + * (AB::Expr::one() - local.instruction.op_a_0), ); - // When the memory value is negative, use the SUB opcode to compute the signed value of - // the memory value and verify that the op_a value is correct. + // When the memory value is negative and not writing to x0, use the SUB opcode to compute + // the signed value of the memory value and verify that the op_a value is correct. let signed_value = Word([ AB::Expr::zero(), AB::Expr::one() * local.selectors.is_lb, @@ -189,14 +183,24 @@ impl CpuChip { local.shard, local.channel, local.unsigned_mem_val_nonce, - local.mem_value_is_neg, + local.mem_value_is_neg_not_x0, + ); + + // Assert that correct value of `mem_value_is_pos_not_x0`. + let mem_value_is_pos = (local.selectors.is_lb + local.selectors.is_lh) + * (AB::Expr::one() - memory_columns.most_sig_byte_decomp[7]) + + local.selectors.is_lbu + + local.selectors.is_lhu + + local.selectors.is_lw; + builder.assert_eq( + local.mem_value_is_pos_not_x0, + mem_value_is_pos * (AB::Expr::one() - local.instruction.op_a_0), ); - // When the memory value is not negaitve, assert that op_a value is equal to the unsigned - // memory value. + // When the memory value is not positive and not writing to x0, assert that op_a value is + // equal to the unsigned memory value. builder - .when(is_load) - .when_not(local.mem_value_is_neg) + .when(local.mem_value_is_pos_not_x0) .assert_word_eq(local.unsigned_mem_val, local.op_a_val()); } diff --git a/crates/core/machine/src/cpu/columns/mod.rs b/crates/core/machine/src/cpu/columns/mod.rs index c008d86f24..3f382677ee 100644 --- a/crates/core/machine/src/cpu/columns/mod.rs +++ b/crates/core/machine/src/cpu/columns/mod.rs @@ -88,10 +88,21 @@ pub struct CpuCols { /// > (is_bge | is_bgeu) & !(a_eq_b | a_gt_b) pub not_branching: T, - /// The memory value is negative column is equal to: + /// Flag for load mem instructions where the value is negative and not writing to x0. + /// More formally, it is /// - /// > (is_lbu | is_lhu) & (most_sig_byte_decomp[7] == 1) - pub mem_value_is_neg: T, + /// > (is_lb | is_lh) & (most_sig_byte_decomp[7] == 1) & (not writing to x0) + pub mem_value_is_neg_not_x0: T, + + /// Flag for load mem instructions where the value is positive and not writing to x0. + /// More formally, it is + /// + /// ( + /// ((is_lb | is_lh) & (most_sig_byte_decomp[7] == 0)) | + /// is_lbu | is_lhu | is_lw + /// ) & + /// (not writing to x0) + pub mem_value_is_pos_not_x0: T, /// The unsigned memory value is the value after the offset logic is applied. Used for the load /// memory opcodes (i.e. LB, LH, LW, LBU, and LHU). diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index f82810f818..5c9d413cb6 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -8,6 +8,7 @@ use sp1_core_executor::{ ByteOpcode, ByteOpcode::U16Range, ExecutionRecord, Opcode, Program, + Register::X0, }; use sp1_primitives::consts::WORD_SIZE; use sp1_stark::{air::MachineAir, Word}; @@ -351,7 +352,8 @@ impl CpuChip { F::from_canonical_u8(most_sig_mem_value_byte >> i & 0x01); } if memory_columns.most_sig_byte_decomp[7] == F::one() { - cols.mem_value_is_neg = F::one(); + cols.mem_value_is_neg_not_x0 = + F::from_bool(event.instruction.op_a != (X0 as u32)); let sub_event = AluEvent { lookup_id: event.memory_sub_lookup_id, channel: event.channel, @@ -373,6 +375,14 @@ impl CpuChip { .or_insert(vec![sub_event]); } } + + // Set the `mem_value_is_pos_not_x0` composite flag. + cols.mem_value_is_pos_not_x0 = F::from_bool( + ((matches!(event.instruction.opcode, Opcode::LB | Opcode::LH) + && (memory_columns.most_sig_byte_decomp[7] == F::zero())) + || matches!(event.instruction.opcode, Opcode::LBU | Opcode::LHU | Opcode::LW)) + && event.instruction.op_a != (X0 as u32), + ); } // Add event to byte lookup for byte range checking each byte in the memory addr diff --git a/crates/recursion/circuit-v2/src/constraints.rs b/crates/recursion/circuit-v2/src/constraints.rs index 1512d144ae..5f1b4aebbe 100644 --- a/crates/recursion/circuit-v2/src/constraints.rs +++ b/crates/recursion/circuit-v2/src/constraints.rs @@ -1,11 +1,11 @@ use p3_air::{Air, BaseAir}; use p3_baby_bear::BabyBear; use p3_commit::{LagrangeSelectors, Mmcs, PolynomialSpace, TwoAdicMultiplicativeCoset}; -use p3_field::{AbstractExtensionField, AbstractField, TwoAdicField}; +use p3_field::{AbstractExtensionField, AbstractField, Field, TwoAdicField}; use p3_matrix::dense::RowMajorMatrix; use sp1_recursion_compiler::ir::{ - Builder, Config, Ext, ExtensionOperand, Felt, SymbolicExt, SymbolicFelt, + Builder, Config, Ext, ExtConst, ExtensionOperand, Felt, SymbolicExt, SymbolicFelt, }; use sp1_stark::{ air::MachineAir, AirOpenedValues, ChipOpenedValues, GenericVerifierConstraintFolder, @@ -121,6 +121,17 @@ where qc_domains: &[TwoAdicMultiplicativeCoset], zeta: Ext, ) -> Ext { + // Compute the maximum power of zeta we will need. + let max_domain_log_n = qc_domains.iter().map(|d| d.log_n).max().unwrap(); + + // Compute all powers of zeta of the form zeta^(2^i) up to `zeta^(2^max_domain_log_n)`. + let mut zetas: Vec> = vec![zeta]; + for _ in 1..max_domain_log_n + 1 { + let last_zeta = zetas.last().unwrap(); + let new_zeta = builder.eval(*last_zeta * *last_zeta); + builder.reduce_e(new_zeta); + zetas.push(new_zeta); + } let zps = qc_domains .iter() .enumerate() @@ -130,24 +141,37 @@ where .enumerate() .filter(|(j, _)| *j != i) .map(|(_, other_domain)| { - let first_point = builder.eval(domain.first_point()); + // `shift_power` is used in the computation of + let shift_power = + other_domain.shift.exp_power_of_2(other_domain.log_n).inverse(); + // This is `other_domain.zp_at_point_f(builder, domain.first_point())`. + // We compute it as a constant here. + let z_f = domain.first_point().exp_power_of_2(other_domain.log_n) + * shift_power + - C::F::one(); ( - other_domain - .zp_at_point_variable(builder, zeta) - .to_operand() - .symbolic(), - other_domain.zp_at_point_f(builder, first_point).inverse(), + { + // We use the precomputed powers of zeta to compute (inline) the value of + // `other_domain.zp_at_point_variable(builder, zeta)`. + let z: Ext<_, _> = builder.eval( + zetas[other_domain.log_n] * SymbolicFelt::from_f(shift_power) + - SymbolicExt::from_f(C::EF::one()), + ); + z.to_operand().symbolic() + }, + builder.constant::>(z_f), ) }) - .unzip::<_, _, Vec<_>, Vec<_>>(); - zs.into_iter().product::>() - * zinvs.into_iter().product::>() + .unzip::<_, _, Vec>, Vec>>(); + let symbolic_prod: SymbolicFelt<_> = + zinvs.into_iter().map(|x| x.into()).product::>(); + (zs.into_iter().product::>(), symbolic_prod) }) - .collect::>>() + .collect::, SymbolicFelt<_>)>>() .into_iter() - .map(|x| builder.eval(x)) + .map(|(x, y)| builder.eval(x / y)) .collect::>>(); - + zps.iter().for_each(|zp| builder.reduce_e(*zp)); builder.eval( opening .quotient @@ -155,10 +179,11 @@ where .enumerate() .map(|(ch_i, ch)| { assert_eq!(ch.len(), C::EF::D); - ch.iter() - .enumerate() - .map(|(e_i, &c)| zps[ch_i] * C::EF::monomial(e_i) * c) - .sum::>() + zps[ch_i].to_operand().symbolic() + * ch.iter() + .enumerate() + .map(|(e_i, &c)| C::EF::monomial(e_i).cons() * SymbolicExt::from(c)) + .sum::>() }) .sum::>(), ) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index ae4b12c457..f3bd075323 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -66,6 +66,14 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV let log_global_max_height = proof.fri_proof.commit_phase_commits.len() + config.log_blowup; + // Precompute the two-adic powers of the two-adic generator. They can be loaded in as constants. + // The ith element has order 2^(log_global_max_height - i). + let mut precomputed_generator_powers: Vec> = vec![]; + for i in 0..log_global_max_height + 1 { + precomputed_generator_powers + .push(builder.constant(C::F::two_adic_generator(log_global_max_height - i))); + } + // The powers of alpha, where the ith element is alpha^i. let mut alpha_pows: Vec> = vec![builder.eval(SymbolicExt::from_f(C::EF::one()))]; @@ -112,10 +120,11 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV index_bits[bits_reduced..(bits_reduced + log_height)].to_vec(); let g = builder.generator(); - let two_adic_generator: Felt<_> = - builder.eval(C::F::two_adic_generator(log_height)); - let two_adic_generator_exp = - C::exp_reverse_bits(builder, two_adic_generator, reduced_index_bits_trunc); + let two_adic_generator_exp = C::exp_f_bits_precomputed( + builder, + &reduced_index_bits_trunc.into_iter().rev().collect_vec(), + &precomputed_generator_powers[bits_reduced..], + ); // Unroll the following to avoid symbolic expression overhead // let x: Felt<_> = builder.eval(g * two_adic_generator_exp); @@ -125,8 +134,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV for (z, ps_at_z) in izip!(mat_points, mat_values) { // Unroll the loop calculation to avoid symbolic expression overhead - // let mut acc: Ext = - // builder.eval(SymbolicExt::from_f(C::EF::zero())); + // let mut acc: Ext = builder.constant(C::EF::zero()); let mut acc: Ext<_, _> = builder.uninit(); builder.operations.push(DslIr::ImmE(acc, C::EF::zero())); @@ -223,7 +231,7 @@ pub fn verify_challenges, SC: BabyBearFriConfigVar pub fn verify_query, SC: BabyBearFriConfigVariable>( builder: &mut Builder, - commit_phase_commits: &[SC::Digest], + commit_phase_commits: &[SC::DigestVariable], index_bits: &[C::Bit], proof: FriQueryProofVariable, betas: &[Ext], @@ -323,11 +331,11 @@ pub fn verify_query, SC: BabyBearFriConfigVariable pub fn verify_batch, SC: BabyBearFriConfigVariable>( builder: &mut Builder, - commit: SC::Digest, + commit: SC::DigestVariable, heights: &[usize], index_bits: &[C::Bit], opened_values: Vec>>>, - proof: Vec, + proof: Vec, ) { let mut heights_tallest_first = heights.iter().enumerate().sorted_by_key(|(_, height)| Reverse(*height)).peekable(); @@ -340,9 +348,9 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable .cloned() .collect::>(); let felt_slice: Vec> = ext_slice.into_iter().flatten().collect::>(); - let mut root: SC::Digest = SC::hash(builder, &felt_slice[..]); + let mut root: SC::DigestVariable = SC::hash(builder, &felt_slice[..]); - zip(index_bits.iter(), proof).for_each(|(&bit, sibling): (&C::Bit, SC::Digest)| { + zip(index_bits.iter(), proof).for_each(|(&bit, sibling): (&C::Bit, SC::DigestVariable)| { let compress_args = SC::select_chain_digest(builder, bit, [root, sibling]); root = SC::compress(builder, compress_args); diff --git a/crates/recursion/circuit-v2/src/hash.rs b/crates/recursion/circuit-v2/src/hash.rs index 135d4ceba8..5c59e8d08d 100644 --- a/crates/recursion/circuit-v2/src/hash.rs +++ b/crates/recursion/circuit-v2/src/hash.rs @@ -1,61 +1,92 @@ -use std::iter::zip; +use std::fmt::Debug; +use std::iter::{repeat, zip}; use itertools::Itertools; use p3_baby_bear::BabyBear; use p3_field::{AbstractField, Field}; use p3_bn254_fr::Bn254Fr; +use p3_symmetric::Permutation; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, ir::{Builder, Config, DslIr, Felt, Var}, }; +use sp1_recursion_core_v2::stark::config::outer_perm; use sp1_recursion_core_v2::{stark::config::BabyBearPoseidon2Outer, DIGEST_SIZE}; use sp1_stark::baby_bear_poseidon2::BabyBearPoseidon2; +use sp1_stark::inner_perm; use crate::{ challenger::{reduce_32, RATE, SPONGE_SIZE}, select_chain, CircuitConfig, }; -pub trait FieldHasherVariable { - type Digest: Clone + Copy; +pub trait FieldHasher { + type Digest: Clone + Copy + Default + PartialEq + Eq + Copy + Debug; - fn hash(builder: &mut Builder, input: &[Felt]) -> Self::Digest; + fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest; +} + +pub trait FieldHasherVariable: FieldHasher { + type DigestVariable: Clone + Copy; + + fn hash(builder: &mut Builder, input: &[Felt]) -> Self::DigestVariable; - fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest; + fn compress(builder: &mut Builder, input: [Self::DigestVariable; 2]) + -> Self::DigestVariable; - fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest); + fn assert_digest_eq(builder: &mut Builder, a: Self::DigestVariable, b: Self::DigestVariable); // Encountered many issues trying to make the following two parametrically polymorphic. fn select_chain_digest( builder: &mut Builder, should_swap: C::Bit, - input: [Self::Digest; 2], - ) -> [Self::Digest; 2]; + input: [Self::DigestVariable; 2], + ) -> [Self::DigestVariable; 2]; + + fn print_digest(builder: &mut Builder, digest: Self::DigestVariable); +} + +impl FieldHasher for BabyBearPoseidon2 { + type Digest = [BabyBear; DIGEST_SIZE]; + + fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest { + let mut pre_iter = input.into_iter().flatten().chain(repeat(BabyBear::zero())); + let mut pre = core::array::from_fn(move |_| pre_iter.next().unwrap()); + (inner_perm()).permute_mut(&mut pre); + pre[..DIGEST_SIZE].try_into().unwrap() + } } impl>> FieldHasherVariable for BabyBearPoseidon2 { - type Digest = [Felt; DIGEST_SIZE]; + type DigestVariable = [Felt; DIGEST_SIZE]; - fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::Digest { + fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::DigestVariable { builder.poseidon2_hash_v2(input) } - fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest { + fn compress( + builder: &mut Builder, + input: [Self::DigestVariable; 2], + ) -> Self::DigestVariable { builder.poseidon2_compress_v2(input.into_iter().flatten()) } - fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest) { + fn assert_digest_eq( + builder: &mut Builder, + a: Self::DigestVariable, + b: Self::DigestVariable, + ) { zip(a, b).for_each(|(e1, e2)| builder.assert_felt_eq(e1, e2)); } fn select_chain_digest( builder: &mut Builder, should_swap: ::Bit, - input: [Self::Digest; 2], - ) -> [Self::Digest; 2] { + input: [Self::DigestVariable; 2], + ) -> [Self::DigestVariable; 2] { let err_msg = "select_chain's return value should have length the sum of its inputs"; let mut selected = select_chain(builder, should_swap, input[0], input[1]); let ret = [ @@ -65,15 +96,31 @@ impl>> FieldHasherVariable, digest: Self::DigestVariable) { + for d in digest.iter() { + builder.print_f(*d); + } + } } pub const BN254_DIGEST_SIZE: usize = 1; + +impl FieldHasher for BabyBearPoseidon2Outer { + type Digest = [Bn254Fr; BN254_DIGEST_SIZE]; + + fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest { + let mut state = [input[0][0], input[1][0], Bn254Fr::zero()]; + outer_perm().permute_mut(&mut state); + [state[0]; BN254_DIGEST_SIZE] + } +} impl>> FieldHasherVariable for BabyBearPoseidon2Outer { - type Digest = [Var; BN254_DIGEST_SIZE]; + type DigestVariable = [Var; BN254_DIGEST_SIZE]; - fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::Digest { + fn hash(builder: &mut Builder, input: &[Felt<::F>]) -> Self::DigestVariable { assert!(C::N::bits() == p3_bn254_fr::Bn254Fr::bits()); assert!(C::F::bits() == p3_baby_bear::BabyBear::bits()); let num_f_elms = C::N::bits() / C::F::bits(); @@ -90,28 +137,35 @@ impl>> FieldHashe [state[0]; BN254_DIGEST_SIZE] } - fn compress(builder: &mut Builder, input: [Self::Digest; 2]) -> Self::Digest { + fn compress( + builder: &mut Builder, + input: [Self::DigestVariable; 2], + ) -> Self::DigestVariable { let state: [Var; SPONGE_SIZE] = [builder.eval(input[0][0]), builder.eval(input[1][0]), builder.eval(C::N::zero())]; builder.push(DslIr::CircuitPoseidon2Permute(state)); [state[0]; BN254_DIGEST_SIZE] } - fn assert_digest_eq(builder: &mut Builder, a: Self::Digest, b: Self::Digest) { + fn assert_digest_eq( + builder: &mut Builder, + a: Self::DigestVariable, + b: Self::DigestVariable, + ) { zip(a, b).for_each(|(e1, e2)| builder.assert_var_eq(e1, e2)); } fn select_chain_digest( builder: &mut Builder, should_swap: ::Bit, - input: [Self::Digest; 2], - ) -> [Self::Digest; 2] { - let result0: [Var<_>; 1] = core::array::from_fn(|j| { + input: [Self::DigestVariable; 2], + ) -> [Self::DigestVariable; 2] { + let result0: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { let result = builder.uninit(); builder.push(DslIr::CircuitSelectV(should_swap, input[1][j], input[0][j], result)); result }); - let result1: [Var<_>; 1] = core::array::from_fn(|j| { + let result1: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { let result = builder.uninit(); builder.push(DslIr::CircuitSelectV(should_swap, input[0][j], input[1][j], result)); result @@ -119,6 +173,12 @@ impl>> FieldHashe [result0, result1] } + + fn print_digest(builder: &mut Builder, digest: Self::DigestVariable) { + for d in digest.iter() { + builder.print_v(*d); + } + } } // impl> FieldHasherVariable for OuterHash { diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index bf83b17b5d..3b975297cc 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -27,6 +27,7 @@ pub mod domain; pub mod fri; pub mod hash; pub mod machine; +pub mod merkle_tree; pub mod stark; pub(crate) mod utils; pub mod witness; @@ -60,7 +61,7 @@ pub type PcsConfig = FriConfig< >, >; -pub type Digest = >::Digest; +pub type Digest = >::DigestVariable; pub type FriMmcs = ExtensionMmcs::ValMmcs>; @@ -95,7 +96,7 @@ pub trait BabyBearFriConfigVariable>: BabyBearFriConfig + FieldHasherVariable { type FriChallengerVariable: FieldChallengerVariable::Bit> - + CanObserveVariable>::Digest> + + CanObserveVariable>::DigestVariable> + CanCopyChallenger; /// Get a new challenger corresponding to the given config. @@ -127,6 +128,14 @@ pub trait CircuitConfig: Config { power_bits: Vec, ) -> Felt<::F>; + /// Exponentiates a felt x to a list of bits in little endian. Uses precomputed powers + /// of x. + fn exp_f_bits_precomputed( + builder: &mut Builder, + power_bits: &[Self::Bit], + two_adic_powers_of_x: &[Felt], + ) -> Felt; + fn num2bits( builder: &mut Builder, num: Felt<::F>, @@ -231,6 +240,18 @@ impl CircuitConfig for InnerConfig { .map(|((id_v, sw_v), (id_c, sw_c))| builder.eval(id_v * id_c + sw_v * sw_c)) .collect() } + + fn exp_f_bits_precomputed( + builder: &mut Builder, + power_bits: &[Self::Bit], + two_adic_powers_of_x: &[Felt], + ) -> Felt { + Self::exp_reverse_bits( + builder, + two_adic_powers_of_x[0], + power_bits.iter().rev().copied().collect(), + ) + } } impl CircuitConfig for OuterConfig { @@ -332,6 +353,20 @@ impl CircuitConfig for OuterConfig { }) .collect() } + + fn exp_f_bits_precomputed( + builder: &mut Builder, + power_bits: &[Self::Bit], + two_adic_powers_of_x: &[Felt], + ) -> Felt { + let mut result: Felt<_> = builder.eval(Self::F::one()); + let one = builder.constant(Self::F::one()); + for (&bit, &power) in power_bits.iter().zip(two_adic_powers_of_x) { + let multiplier = builder.select_f(bit, power, one); + result = builder.eval(multiplier * result); + } + result + } } impl BabyBearFriConfig for BabyBearPoseidon2 { diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 56800b147b..20a0c15918 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -73,7 +73,7 @@ where SC: BabyBearFriConfigVariable< C, FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], + DigestVariable = [Felt; DIGEST_SIZE], >, C: CircuitConfig>, >::ProverData>: Clone, diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index a16c3a9bcd..0246480cc2 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -71,7 +71,7 @@ where SC: BabyBearFriConfigVariable< C, FriChallengerVariable = DuplexChallengerVariable, - Digest = [Felt; DIGEST_SIZE], + DigestVariable = [Felt; DIGEST_SIZE], >, C: CircuitConfig>, >::ProverData>: Clone, diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index b8f4bcf750..015f938c5d 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -77,7 +77,7 @@ where impl, SC: BabyBearFriConfigVariable> Witnessable for StarkVerifyingKey where - Com: Witnessable>::Digest>, + Com: Witnessable>::DigestVariable>, OpeningProof: Witnessable>, { type WitnessVariable = VerifyingKeyVariable; @@ -148,7 +148,7 @@ where impl, SC: BabyBearFriConfigVariable> Witnessable for SP1CompressWitnessValues where - Com: Witnessable>::Digest>, + Com: Witnessable>::DigestVariable>, OpeningProof: Witnessable>, { type WitnessVariable = SP1CompressWitnessVariable; diff --git a/crates/recursion/circuit-v2/src/merkle_tree.rs b/crates/recursion/circuit-v2/src/merkle_tree.rs new file mode 100644 index 0000000000..d50edac6e9 --- /dev/null +++ b/crates/recursion/circuit-v2/src/merkle_tree.rs @@ -0,0 +1,197 @@ +use std::fmt::Debug; + +use itertools::Itertools; +use p3_field::Field; +use p3_util::{reverse_bits_len, reverse_slice_index_bits}; +use sp1_core_machine::utils::log2_strict_usize; +use sp1_recursion_compiler::ir::Builder; + +use crate::{ + hash::{FieldHasher, FieldHasherVariable}, + CircuitConfig, +}; + +#[derive(Debug, Clone)] +pub struct MerkleTree> { + /// The height of the tree, not counting the root layer. This is the same as the logarithm of the + /// number of leaves. + pub height: usize, + + /// All the layers but the root. If there are `n` leaves where `n` is a power of 2, there are + /// `2n - 2` elements in this vector. The leaves are at the beginning of the vector. + pub digest_layers: Vec, +} +pub struct VcsError; + +impl Debug for VcsError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "VcsError") + } +} + +impl> MerkleTree { + pub fn commit(leaves: Vec) -> (HV::Digest, Self) { + assert!(!leaves.is_empty()); + let new_len = leaves.len().next_power_of_two(); + let height = log2_strict_usize(new_len); + + // Pre-allocate the vector. + let mut digest_layers = Vec::with_capacity(2 * new_len - 2); + + // If `leaves.len()` is not a power of 2, we pad the leaves with default values. + let mut last_layer = leaves; + let old_len = last_layer.len(); + for _ in old_len..new_len { + last_layer.push(HV::Digest::default()); + } + + // Store the leaves in bit-reversed order. + reverse_slice_index_bits(&mut last_layer); + + digest_layers.extend(last_layer.iter()); + + // Compute the rest of the layers. + for _ in 0..height - 1 { + let mut next_layer = Vec::with_capacity(last_layer.len() / 2); + for (a, b) in last_layer.iter().tuples() { + next_layer.push(HV::constant_compress([*a, *b])); + } + digest_layers.extend(next_layer.iter()); + + last_layer = next_layer; + } + + debug_assert_eq!(digest_layers.len(), 2 * new_len - 2); + + let root = HV::constant_compress([last_layer[0], last_layer[1]]); + (root, Self { height, digest_layers }) + } + + pub fn open(&self, index: usize) -> (HV::Digest, Vec) { + let mut path = Vec::with_capacity(self.height); + let mut bit_rev_index = reverse_bits_len(index, self.height); + let value = self.digest_layers[bit_rev_index]; + + // Variable to keep track index of the first element in the current layer. + let mut offset = 0; + for i in 0..self.height { + let sibling = if bit_rev_index % 2 == 0 { + self.digest_layers[offset + bit_rev_index + 1] + } else { + self.digest_layers[offset + bit_rev_index - 1] + }; + path.push(sibling); + bit_rev_index >>= 1; + + // The current layer has 1 << (height - i) elements, so we shift offset by that amount. + offset += 1 << (self.height - i); + } + debug_assert_eq!(path.len(), self.height); + (value, path) + } + + pub fn verify( + index: usize, + value: HV::Digest, + path: &[HV::Digest], + commitment: HV::Digest, + ) -> Result<(), VcsError> { + let mut value = value; + + let mut index = reverse_bits_len(index, path.len()); + + for sibling in path { + let sibling = *sibling; + + // If the index is odd, swap the order of [value, sibling]. + let new_pair = if index % 2 == 0 { [value, sibling] } else { [sibling, value] }; + value = HV::constant_compress(new_pair); + index >>= 1; + } + if value == commitment { + Ok(()) + } else { + Err(VcsError) + } + } +} + +pub fn verify>( + builder: &mut Builder, + index: Vec, + value: HV::DigestVariable, + path: &[HV::DigestVariable], + commitment: HV::DigestVariable, +) { + let mut value = value; + for (sibling, bit) in path.iter().zip(index.iter().rev()) { + let sibling = *sibling; + + // If the index is odd, swap the order of [value, sibling]. + let new_pair = HV::select_chain_digest(builder, *bit, [value, sibling]); + value = HV::compress(builder, new_pair); + } + HV::assert_digest_eq(builder, value, commitment); +} + +#[cfg(test)] +mod tests { + use itertools::Itertools; + use p3_baby_bear::BabyBear; + use p3_field::AbstractField; + use rand::rngs::OsRng; + use sp1_recursion_compiler::{ + config::InnerConfig, + ir::{Builder, Felt}, + }; + use sp1_recursion_core_v2::DIGEST_SIZE; + use sp1_stark::baby_bear_poseidon2::BabyBearPoseidon2; + use zkhash::ark_ff::UniformRand; + + use crate::{ + merkle_tree::{verify, MerkleTree}, + utils::tests::run_test_recursion, + CircuitConfig, + }; + type C = InnerConfig; + type F = BabyBear; + type HV = BabyBearPoseidon2; + + #[test] + fn test_merkle_tree_inner() { + let mut rng = OsRng; + let mut builder = Builder::::default(); + for _ in 0..20 { + let leaves: Vec<[F; DIGEST_SIZE]> = + (0..17).map(|_| std::array::from_fn(|_| F::rand(&mut rng))).collect(); + let (root, tree) = MerkleTree::::commit(leaves.to_vec()); + for (i, leaf) in leaves.iter().enumerate() { + let (value, proof) = MerkleTree::::open(&tree, i); + assert!(value == *leaf); + MerkleTree::::verify(i, value, &proof, root).unwrap(); + let (value_variable, proof_variable): ([Felt<_>; 8], Vec<[Felt<_>; 8]>) = ( + std::array::from_fn(|i| builder.constant(value[i])), + proof + .iter() + .map(|x| std::array::from_fn(|i| builder.constant(x[i]))) + .collect_vec(), + ); + + let index_var = builder.constant(BabyBear::from_canonical_usize(i)); + let index_bits = C::num2bits(&mut builder, index_var, 5); + let root_variable: [Felt<_>; 8] = + root.iter().map(|x| builder.constant(*x)).collect_vec().try_into().unwrap(); + + verify::( + &mut builder, + index_bits, + value_variable, + &proof_variable, + root_variable, + ); + } + } + + run_test_recursion(builder.operations, std::iter::empty()); + } +} diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index f559a61e32..b6b0c1b56f 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -31,7 +31,7 @@ use crate::{ /// Reference: [sp1_core::stark::ShardProof] #[derive(Clone)] pub struct ShardProofVariable, SC: BabyBearFriConfigVariable> { - pub commitment: ShardCommitment, + pub commitment: ShardCommitment, pub opened_values: ShardOpenedValues>, pub opening_proof: TwoAdicPcsProofVariable, pub chip_ordering: HashMap, diff --git a/crates/recursion/circuit-v2/src/types.rs b/crates/recursion/circuit-v2/src/types.rs index 8906494405..57a1458255 100644 --- a/crates/recursion/circuit-v2/src/types.rs +++ b/crates/recursion/circuit-v2/src/types.rs @@ -15,7 +15,7 @@ use crate::{ /// Reference: [sp1_core::stark::StarkVerifyingKey] #[derive(Clone)] pub struct VerifyingKeyVariable, SC: BabyBearFriConfigVariable> { - pub commitment: SC::Digest, + pub commitment: SC::DigestVariable, pub pc_start: Felt, pub chip_information: Vec<(String, TwoAdicMultiplicativeCoset, Dimensions)>, pub chip_ordering: HashMap, @@ -23,7 +23,7 @@ pub struct VerifyingKeyVariable, SC: BabyBearFriCo #[derive(Clone)] pub struct FriProofVariable> { - pub commit_phase_commits: Vec, + pub commit_phase_commits: Vec, pub query_proofs: Vec>, pub final_poly: Ext, pub pow_witness: Felt, @@ -33,7 +33,7 @@ pub struct FriProofVariable> { #[derive(Clone)] pub struct FriCommitPhaseProofStepVariable> { pub sibling_value: Ext, - pub opening_proof: Vec, + pub opening_proof: Vec, } /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/fri/src/proof.rs#L23 @@ -58,12 +58,12 @@ pub struct TwoAdicPcsProofVariable> #[derive(Clone)] pub struct BatchOpeningVariable> { pub opened_values: Vec>>>, - pub opening_proof: Vec, + pub opening_proof: Vec, } #[derive(Clone)] pub struct TwoAdicPcsRoundVariable> { - pub batch_commit: H::Digest, + pub batch_commit: H::DigestVariable, pub domains_points_and_opens: Vec>, } @@ -77,7 +77,7 @@ pub struct TwoAdicPcsMatsVariable { impl, SC: BabyBearFriConfigVariable> VerifyingKeyVariable { pub fn observe_into(&self, builder: &mut Builder, challenger: &mut Challenger) where - Challenger: CanObserveVariable> + CanObserveVariable, + Challenger: CanObserveVariable> + CanObserveVariable, { // Observe the commitment. challenger.observe(builder, self.commitment); @@ -92,10 +92,10 @@ impl, SC: BabyBearFriConfigVariable> VerifyingK /// Hash the verifying key + prep domains into a single digest. /// poseidon2( commit[0..8] || pc_start || prep_domains[N].{log_n, .size, .shift, .g}) - pub fn hash(&self, builder: &mut Builder) -> SC::Digest + pub fn hash(&self, builder: &mut Builder) -> SC::DigestVariable where C::F: TwoAdicField, - SC::Digest: IntoIterator>, + SC::DigestVariable: IntoIterator>, { let prep_domains = self.chip_information.iter().map(|(_, domain, _)| domain); let num_inputs = DIGEST_SIZE + 1 + (4 * prep_domains.len()); diff --git a/crates/recursion/circuit-v2/src/witness/mod.rs b/crates/recursion/circuit-v2/src/witness/mod.rs index e472661ca1..92811f7dc0 100644 --- a/crates/recursion/circuit-v2/src/witness/mod.rs +++ b/crates/recursion/circuit-v2/src/witness/mod.rs @@ -132,7 +132,7 @@ impl> Witnessable for Vec { impl, SC: BabyBearFriConfigVariable> Witnessable for ShardProof where - Com: Witnessable>::Digest>, + Com: Witnessable>::DigestVariable>, OpeningProof: Witnessable>, { type WitnessVariable = ShardProofVariable; diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index f78800ed1c..62b6201880 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -823,8 +823,9 @@ mod tests { } // Run with the poseidon2 skinny chip. - let skinny_machine = - RecursionAir::<_, 9, 0>::machine_skinny_with_all_chips(BabyBearPoseidon2::compressed()); + let skinny_machine = RecursionAir::<_, 9, 0>::machine_skinny_with_all_chips( + BabyBearPoseidon2::ultra_compressed(), + ); let (pk, vk) = skinny_machine.setup(&program); let result = run_test_machine(vec![record.clone()], skinny_machine, pk, vk); if let Err(e) = result { diff --git a/crates/recursion/compiler/src/constraints/mod.rs b/crates/recursion/compiler/src/constraints/mod.rs index d086c64c51..03bcd09838 100644 --- a/crates/recursion/compiler/src/constraints/mod.rs +++ b/crates/recursion/compiler/src/constraints/mod.rs @@ -225,6 +225,10 @@ impl ConstraintCompiler { args: vec![vec![a.id()], vec![tmp], vec![c.id()]], }); } + DslIr::DivF(a, b, c) => constraints.push(Constraint { + opcode: ConstraintOpcode::DivF, + args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], + }), DslIr::DivEF(a, b, c) => constraints.push(Constraint { opcode: ConstraintOpcode::DivEF, args: vec![vec![a.id()], vec![b.id()], vec![c.id()]], diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index f233648a41..dfe81855c9 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -2,8 +2,7 @@ use std::{borrow::BorrowMut, mem::size_of}; use p3_air::BaseAir; use p3_field::PrimeField32; -use p3_matrix::dense::RowMajorMatrix; -use p3_matrix::Matrix; +use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::*; use sp1_core_machine::utils::next_power_of_two; use sp1_primitives::RC_16_30_U32; diff --git a/crates/recursion/core/src/multi/mod.rs b/crates/recursion/core/src/multi/mod.rs index 6c4cc566db..cb3f0604bb 100644 --- a/crates/recursion/core/src/multi/mod.rs +++ b/crates/recursion/core/src/multi/mod.rs @@ -344,6 +344,7 @@ mod tests { }; #[test] + #[ignore] fn prove_babybear() { let config = BabyBearPoseidon2::compressed(); let mut challenger = config.challenger(); diff --git a/crates/recursion/core/src/poseidon2_wide/mod.rs b/crates/recursion/core/src/poseidon2_wide/mod.rs index e7e6f9cc11..0019552e8a 100644 --- a/crates/recursion/core/src/poseidon2_wide/mod.rs +++ b/crates/recursion/core/src/poseidon2_wide/mod.rs @@ -298,15 +298,6 @@ pub(crate) mod tests { input_exec } - #[test] - fn poseidon2_wide_prove_babybear_success() { - // Generate test input exec record. - let input_exec = generate_test_execution_record(false); - - poseidon2_wide_prove_babybear_degree::<3>(input_exec.clone()); - poseidon2_wide_prove_babybear_degree::<9>(input_exec); - } - #[test] #[should_panic] fn poseidon2_wide_prove_babybear_failure() { diff --git a/crates/recursion/gnark-ffi/src/ffi/docker.rs b/crates/recursion/gnark-ffi/src/ffi/docker.rs index 9941afb7b4..119253d492 100644 --- a/crates/recursion/gnark-ffi/src/ffi/docker.rs +++ b/crates/recursion/gnark-ffi/src/ffi/docker.rs @@ -1,3 +1,4 @@ +use crate::ProofBn254; use crate::{Groth16Bn254Proof, PlonkBn254Proof}; use anyhow::{anyhow, Result}; use sp1_core_machine::SP1_CIRCUIT_VERSION; @@ -71,13 +72,23 @@ fn prove(system: ProofSystem, data_dir: &str, witness_path: &str) -> Result PlonkBn254Proof { let result = prove(ProofSystem::Plonk, data_dir, witness_path).expect("failed to prove with docker"); - bincode::deserialize(&result).expect("failed to deserialize result") + let deserialized: ProofBn254 = + bincode::deserialize(&result).expect("failed to deserialize result"); + match deserialized { + ProofBn254::Plonk(proof) => proof, + _ => panic!("unexpected proof type"), + } } pub fn prove_groth16_bn254(data_dir: &str, witness_path: &str) -> Groth16Bn254Proof { let result = prove(ProofSystem::Groth16, data_dir, witness_path).expect("failed to prove with docker"); - bincode::deserialize(&result).expect("failed to deserialize result") + let deserialized: ProofBn254 = + bincode::deserialize(&result).expect("failed to deserialize result"); + match deserialized { + ProofBn254::Groth16(proof) => proof, + _ => panic!("unexpected proof type"), + } } fn build(system: ProofSystem, data_dir: &str) -> Result<()> { From 2bb0ddbfb44ba29d298bc3137a460c2e0be22ea1 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 11:15:56 -0700 Subject: [PATCH 121/268] small changes --- crates/prover/Makefile | 4 +- crates/prover/src/lib.rs | 54 +++++++++++----------- crates/recursion/gnark-ffi/build.rs | 1 + crates/recursion/gnark-ffi/go/sp1/build.go | 3 +- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/crates/prover/Makefile b/crates/prover/Makefile index 9365179916..4ae7d0a81b 100644 --- a/crates/prover/Makefile +++ b/crates/prover/Makefile @@ -5,10 +5,10 @@ all: build-circuits: rm -rf build && \ mkdir -p build && \ - RUSTFLAGS='-C target-cpu=native' \ + RUST_LOG=debug RUSTFLAGS='-C target-cpu=native' \ cargo run -p sp1-prover --release --bin build_plonk_bn254 --features native-gnark -- \ --build-dir=./build && \ - RUSTFLAGS='-C target-cpu=native' \ + RUST_LOG=debug RUSTFLAGS='-C target-cpu=native' \ cargo run -p sp1-prover --release --bin build_groth16_bn254 --features native-gnark -- \ --build-dir=./build diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 49cbaad63d..0ed6fb2f9f 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1041,42 +1041,42 @@ pub mod tests { let core_proof = prover.prove_core(&pk, &stdin, opts, context)?; let public_values = core_proof.public_values.clone(); - tracing::info!("verify core"); - prover.verify(&core_proof.proof, &vk)?; + // tracing::info!("verify core"); + // prover.verify(&core_proof.proof, &vk)?; - if test_kind == Test::Core { - return Ok(()); - } + // if test_kind == Test::Core { + // return Ok(()); + // } - tracing::info!("compress"); - let compress_span = tracing::debug_span!("compress").entered(); - let compressed_proof = prover.compress(&vk, core_proof, vec![], opts)?; - compress_span.exit(); + // tracing::info!("compress"); + // let compress_span = tracing::debug_span!("compress").entered(); + // let compressed_proof = prover.compress(&vk, core_proof, vec![], opts)?; + // compress_span.exit(); - tracing::info!("verify compressed"); - prover.verify_compressed(&compressed_proof, &vk)?; + // tracing::info!("verify compressed"); + // prover.verify_compressed(&compressed_proof, &vk)?; - if test_kind == Test::Compress { - return Ok(()); - } + // if test_kind == Test::Compress { + // return Ok(()); + // } - tracing::info!("shrink"); - let shrink_proof = prover.shrink(compressed_proof, opts)?; + // tracing::info!("shrink"); + // let shrink_proof = prover.shrink(compressed_proof, opts)?; - tracing::info!("verify shrink"); - prover.verify_shrink(&shrink_proof, &vk)?; + // tracing::info!("verify shrink"); + // prover.verify_shrink(&shrink_proof, &vk)?; - if test_kind == Test::Shrink { - return Ok(()); - } + // if test_kind == Test::Shrink { + // return Ok(()); + // } - tracing::info!("wrap bn254"); - let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; - let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); + // tracing::info!("wrap bn254"); + // let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; + // let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); - // Save the proof. - let mut file = File::create("proof-with-pis.bin").unwrap(); - file.write_all(bytes.as_slice()).unwrap(); + // // Save the proof. + // let mut file = File::create("proof-with-pis.bin").unwrap(); + // file.write_all(bytes.as_slice()).unwrap(); // Load the proof. let mut file = File::open("proof-with-pis.bin").unwrap(); diff --git a/crates/recursion/gnark-ffi/build.rs b/crates/recursion/gnark-ffi/build.rs index f08d4df02f..940351d76f 100644 --- a/crates/recursion/gnark-ffi/build.rs +++ b/crates/recursion/gnark-ffi/build.rs @@ -25,6 +25,7 @@ fn main() { .env("CGO_ENABLED", "1") .args([ "build", + "-tags=debug", "-o", dest.to_str().unwrap(), "-buildmode=c-archive", diff --git a/crates/recursion/gnark-ffi/go/sp1/build.go b/crates/recursion/gnark-ffi/go/sp1/build.go index 4a082059c7..639a0a660a 100644 --- a/crates/recursion/gnark-ffi/go/sp1/build.go +++ b/crates/recursion/gnark-ffi/go/sp1/build.go @@ -5,7 +5,6 @@ import ( "fmt" "log" "os" - "strings" "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark-crypto/kzg" @@ -61,7 +60,7 @@ func BuildPlonk(dataDir string) { } defer srsLagrangeFile.Close() - if !strings.Contains(dataDir, "dev") { + if false { if _, err := os.Stat(srsFileName); os.IsNotExist(err) { fmt.Println("downloading aztec ignition srs") trusted_setup.DownloadAndSaveAztecIgnitionSrs(174, srsFileName) From aa6e03c00ad301dea30ad8faac9fb790856c604c Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 12:57:58 -0700 Subject: [PATCH 122/268] broken proof --- crates/prover/wrap_vk.bin | Bin 0 -> 588 bytes crates/prover/wraped_proof.bin | Bin 0 -> 434470 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 crates/prover/wrap_vk.bin create mode 100644 crates/prover/wraped_proof.bin diff --git a/crates/prover/wrap_vk.bin b/crates/prover/wrap_vk.bin new file mode 100644 index 0000000000000000000000000000000000000000..b62866ea75465232bf3c825a856c1f747e5126cb GIT binary patch literal 588 zcmY#jfPh`o4ZB6#^gJzWwm2Dn;fi>}-F$s6?{v#`I~AR_>+~5RZWYW|V71 zK~QR0YEf~jQ)WrAPih`NR3S(i7nIG=0Aauk2`Ej<$xIGQ%qdMRhPfD7J(f2Qvf!6Le5g literal 0 HcmV?d00001 diff --git a/crates/prover/wraped_proof.bin b/crates/prover/wraped_proof.bin new file mode 100644 index 0000000000000000000000000000000000000000..0d47f8b838550ad821937024a90248e5e60cca5b GIT binary patch literal 434470 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

_t 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�%9XE&ENnyS;S0_{2?-lN2$( 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 O*TetsdHi?piT?oCK2=%( literal 0 HcmV?d00001 From e90eaa492a517d43a109f33e5850155f1384a556 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 13:27:26 -0700 Subject: [PATCH 123/268] hm --- crates/prover/Makefile | 4 ++-- crates/prover/src/build.rs | 16 ++++++++++++++-- .../gnark-ffi/go/sp1/babybear/babybear.go | 8 ++++---- crates/recursion/gnark-ffi/go/sp1/build.go | 3 ++- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/crates/prover/Makefile b/crates/prover/Makefile index 4ae7d0a81b..d9e2fc2f7d 100644 --- a/crates/prover/Makefile +++ b/crates/prover/Makefile @@ -6,10 +6,10 @@ build-circuits: rm -rf build && \ mkdir -p build && \ RUST_LOG=debug RUSTFLAGS='-C target-cpu=native' \ - cargo run -p sp1-prover --release --bin build_plonk_bn254 --features native-gnark -- \ + cargo run -p sp1-prover --release --bin build_groth16_bn254 --features native-gnark -- \ --build-dir=./build && \ RUST_LOG=debug RUSTFLAGS='-C target-cpu=native' \ - cargo run -p sp1-prover --release --bin build_groth16_bn254 --features native-gnark -- \ + cargo run -p sp1-prover --release --bin build_plonk_bn254 --features native-gnark -- \ --build-dir=./build release-circuits: diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 63ad7c34c3..8af864450e 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -86,7 +86,15 @@ pub fn build_groth16_bn254_artifacts( /// This may take a while as it needs to first generate a dummy proof and then it needs to compile /// the circuit. pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { - let (wrap_vk, wrapped_proof) = dummy_proof(); + // let (wrap_vk, wrapped_proof) = dummy_proof(); + // let wrap_vk_bytes = bincode::serialize(&wrap_vk).unwrap(); + // let wrapped_proof_bytes = bincode::serialize(&wrapped_proof).unwrap(); + // std::fs::write("wrap_vk.bin", wrap_vk_bytes).unwrap(); + // std::fs::write("wraped_proof.bin", wrapped_proof_bytes).unwrap(); + let wrap_vk_bytes = std::fs::read("wrap_vk.bin").unwrap(); + let wrapped_proof_bytes = std::fs::read("wraped_proof.bin").unwrap(); + let wrap_vk = bincode::deserialize(&wrap_vk_bytes).unwrap(); + let wrapped_proof = bincode::deserialize(&wrapped_proof_bytes).unwrap(); crate::build::build_plonk_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); } @@ -95,7 +103,11 @@ pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { /// This may take a while as it needs to first generate a dummy proof and then it needs to compile /// the circuit. pub fn build_groth16_bn254_artifacts_with_dummy(build_dir: impl Into) { - let (wrap_vk, wrapped_proof) = dummy_proof(); + // let (wrap_vk, wrapped_proof) = dummy_proof(); + let wrap_vk_bytes = std::fs::read("wrap_vk.bin").unwrap(); + let wrapped_proof_bytes = std::fs::read("wraped_proof.bin").unwrap(); + let wrap_vk = bincode::deserialize(&wrap_vk_bytes).unwrap(); + let wrapped_proof = bincode::deserialize(&wrapped_proof_bytes).unwrap(); crate::build::build_groth16_bn254_artifacts(&wrap_vk, &wrapped_proof, build_dir.into()); } diff --git a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go index 1e75a80766..141ac0c237 100644 --- a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go +++ b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go @@ -50,7 +50,7 @@ func NewChip(api frontend.API) *Chip { func Zero() Variable { return Variable{ Value: frontend.Variable("0"), - NbBits: 0, + NbBits: 1, } } @@ -296,7 +296,7 @@ func (c *Chip) ToBinary(in Variable) []frontend.Variable { } func (p *Chip) reduceFast(x Variable) Variable { - if x.NbBits >= uint(126) { + if x.NbBits >= uint(120) { return Variable{ Value: p.reduceWithMaxBits(x.Value, uint64(x.NbBits)), NbBits: 31, @@ -328,9 +328,9 @@ func (p *Chip) reduceWithMaxBits(x frontend.Variable, maxNbBits uint64) frontend remainder := result[1] if os.Getenv("GROTH16") != "1" { - p.rangeChecker.Check(quotient, int(maxNbBits-31)) + p.rangeChecker.Check(quotient, int(maxNbBits-31+1)) } else { - p.api.ToBinary(quotient, int(maxNbBits-31)) + p.api.ToBinary(quotient, int(maxNbBits-31+1)) } // Check that the remainder has size less than the BabyBear modulus, by decomposing it into a 27 // bit limb and a 4 bit limb. diff --git a/crates/recursion/gnark-ffi/go/sp1/build.go b/crates/recursion/gnark-ffi/go/sp1/build.go index 639a0a660a..4a082059c7 100644 --- a/crates/recursion/gnark-ffi/go/sp1/build.go +++ b/crates/recursion/gnark-ffi/go/sp1/build.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "os" + "strings" "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark-crypto/kzg" @@ -60,7 +61,7 @@ func BuildPlonk(dataDir string) { } defer srsLagrangeFile.Close() - if false { + if !strings.Contains(dataDir, "dev") { if _, err := os.Stat(srsFileName); os.IsNotExist(err) { fmt.Println("downloading aztec ignition srs") trusted_setup.DownloadAndSaveAztecIgnitionSrs(174, srsFileName) From 93d64fdececd01683368c907919df8b37849653c Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 15:36:03 -0700 Subject: [PATCH 124/268] cached pk --- crates/recursion/gnark-ffi/go/sp1/prove.go | 57 ++++++++++++++-------- 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/crates/recursion/gnark-ffi/go/sp1/prove.go b/crates/recursion/gnark-ffi/go/sp1/prove.go index 0bdd157a2e..723c9ab599 100644 --- a/crates/recursion/gnark-ffi/go/sp1/prove.go +++ b/crates/recursion/gnark-ffi/go/sp1/prove.go @@ -5,14 +5,22 @@ import ( "encoding/json" "fmt" "os" + "sync" "time" "github.com/consensys/gnark-crypto/ecc" "github.com/consensys/gnark/backend/groth16" "github.com/consensys/gnark/backend/plonk" + "github.com/consensys/gnark/constraint" "github.com/consensys/gnark/frontend" ) +var globalMutex sync.RWMutex +var globalR1cs constraint.ConstraintSystem = groth16.NewCS(ecc.BN254) +var globalR1csInitialized = false +var globalPk groth16.ProvingKey = groth16.NewProvingKey(ecc.BN254) +var globalPkInitialized = false + func ProvePlonk(dataDir string, witnessPath string) Proof { // Sanity check the required arguments have been provided. if dataDir == "" { @@ -98,29 +106,36 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { os.Setenv("GROTH16", "1") fmt.Printf("Setting environment variables took %s\n", time.Since(start)) - start = time.Now() // Read the R1CS. - r1csFile, err := os.Open(dataDir + "/" + groth16CircuitPath) - if err != nil { - panic(err) - } - r1csReader := bufio.NewReaderSize(r1csFile, 1024*1024) - r1cs := groth16.NewCS(ecc.BN254) - r1cs.ReadFrom(r1csReader) - defer r1csFile.Close() - fmt.Printf("Reading R1CS took %s\n", time.Since(start)) + globalMutex.Lock() + if !globalR1csInitialized { + start = time.Now() + r1csFile, err := os.Open(dataDir + "/" + groth16CircuitPath) + if err != nil { + panic(err) + } + r1csReader := bufio.NewReaderSize(r1csFile, 1024*1024) + globalR1cs.ReadFrom(r1csReader) + defer r1csFile.Close() + globalR1csInitialized = true + fmt.Printf("Reading R1CS took %s\n", time.Since(start)) + } + globalMutex.Unlock() - start = time.Now() // Read the proving key. - pkFile, err := os.Open(dataDir + "/" + groth16PkPath) - if err != nil { - panic(err) - } - pk := groth16.NewProvingKey(ecc.BN254) - pkReader := bufio.NewReaderSize(pkFile, 1024*1024) - pk.ReadDump(pkReader) - defer pkFile.Close() - fmt.Printf("Reading proving key took %s\n", time.Since(start)) + globalMutex.Lock() + if !globalPkInitialized { + start = time.Now() + pkFile, err := os.Open(dataDir + "/" + groth16PkPath) + if err != nil { + panic(err) + } + pkReader := bufio.NewReaderSize(pkFile, 1024*1024) + globalPk.ReadDump(pkReader) + defer pkFile.Close() + fmt.Printf("Reading proving key took %s\n", time.Since(start)) + } + globalMutex.Unlock() start = time.Now() // Read the file. @@ -150,7 +165,7 @@ func ProveGroth16(dataDir string, witnessPath string) Proof { start = time.Now() // Generate the proof. - proof, err := groth16.Prove(r1cs, pk, witness) + proof, err := groth16.Prove(globalR1cs, globalPk, witness) if err != nil { panic(err) } From 13a60735c3d9a70eaa1628916a6d604a15baad16 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 16:05:29 -0700 Subject: [PATCH 125/268] feat: fix stuff --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index c50ea62a6e..2b4a7389e1 100644 --- a/.gitignore +++ b/.gitignore @@ -23,5 +23,6 @@ benchmark.csv # Build Artifacts recursion/gnark-ffi/build -prover/build -prover/*.tar.gz \ No newline at end of file +crates/prover/build +crates/prover/data +crates/prover/*.tar.gz \ No newline at end of file From 0d29ee8051b2263bd725c437e133792340e32e20 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 16:08:36 -0700 Subject: [PATCH 126/268] Revert "hm" This reverts commit 8684b88cac2efb2f87cc6626ab9623c5fa2d6964, reversing changes made to 13a60735c3d9a70eaa1628916a6d604a15baad16. --- .../compiler/src/circuit/compiler.rs | 250 ++++++------------ crates/zkvm/entrypoint/Cargo.toml | 2 +- crates/zkvm/entrypoint/src/libm.rs | 10 - crates/zkvm/lib/Cargo.toml | 2 +- 4 files changed, 90 insertions(+), 174 deletions(-) diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index f41b328552..62b6201880 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -8,13 +8,7 @@ use p3_field::{ use sp1_core_machine::utils::{sp1_debug_mode, SpanBuilder}; use sp1_recursion_core::air::{Block, RecursionPublicValues, RECURSIVE_PROOF_NUM_PV_ELTS}; use sp1_recursion_core_v2::{BaseAluInstr, BaseAluOpcode}; -use std::{ - borrow::Borrow, - cmp::Ordering, - collections::BTreeMap, - iter::repeat, - mem::{take, transmute}, -}; +use std::{borrow::Borrow, collections::HashMap, iter::repeat, mem::transmute}; use vec_map::VecMap; use sp1_recursion_core_v2::*; @@ -28,7 +22,7 @@ pub struct AsmCompiler { /// Map the frame pointers of the variables to the "physical" addresses. pub virtual_to_physical: VecMap>, /// Map base or extension field constants to "physical" addresses and mults. - pub consts: BTreeMap, Address>, + pub consts: HashMap, (Address, C::F)>, /// Map each "physical" address to its read count. pub addr_to_mult: VecMap, } @@ -39,11 +33,12 @@ where { /// Allocate a fresh address. Checks that the address space is not full. pub fn alloc(next_addr: &mut C::F) -> Address { + let id = Address(*next_addr); *next_addr += C::F::one(); if next_addr.is_zero() { panic!("out of address space"); } - Address(*next_addr) + id } /// Map `fp` to its existing address without changing its mult. @@ -108,7 +103,7 @@ where /// /// Ensures that `addr` has already been assigned a `mult`. pub fn read_ghost_addr(&mut self, addr: Address) -> &mut C::F { - self.read_addr_internal(addr, false) + self.read_addr_internal(addr, true) } fn read_addr_internal(&mut self, addr: Address, increment_mult: bool) -> &mut C::F { @@ -143,36 +138,27 @@ where /// /// Increments the mult, first creating an entry if it does not yet exist. pub fn read_const(&mut self, imm: Imm) -> Address { - use vec_map::Entry; - let addr = *self.consts.entry(imm).or_insert_with(|| Self::alloc(&mut self.next_addr)); - match self.addr_to_mult.entry(addr.as_usize()) { - Entry::Vacant(entry) => drop(entry.insert(C::F::one())), - Entry::Occupied(mut entry) => *entry.get_mut() += C::F::one(), - } - addr + self.consts + .entry(imm) + .and_modify(|(_, x)| *x += C::F::one()) + .or_insert_with(|| (Self::alloc(&mut self.next_addr), C::F::one())) + .0 } /// Read a constant (a.k.a. immediate). /// /// Does not increment the mult. Creates an entry if it does not yet exist. pub fn read_ghost_const(&mut self, imm: Imm) -> Address { - let addr = *self.consts.entry(imm).or_insert_with(|| Self::alloc(&mut self.next_addr)); - self.addr_to_mult.entry(addr.as_usize()).or_insert_with(C::F::zero); - addr + self.consts.entry(imm).or_insert_with(|| (Self::alloc(&mut self.next_addr), C::F::zero())).0 } - /// Turn `dst` into an alias for the constant `src`. - fn mem_write_const(&mut self, dst: impl HasVirtualAddress, src: Imm) { - use vec_map::Entry; - let src_addr = src.read_ghost(self); - match self.virtual_to_physical.entry(dst.vaddr()) { - Entry::Vacant(entry) => drop(entry.insert(src_addr)), - Entry::Occupied(entry) => panic!( - "unexpected entry: virtual_to_physical[{:?}] = {:?}", - dst.vaddr(), - entry.get() - ), - } + fn mem_write_const(&mut self, dst: impl Reg, src: Imm) -> Instruction { + Instruction::Mem(MemInstr { + addrs: MemIo { inner: dst.write(self) }, + vals: MemIo { inner: src.as_block() }, + mult: C::F::zero(), + kind: MemAccessKind::Write, + }) } fn base_alu( @@ -212,7 +198,7 @@ where use BaseAluOpcode::*; let [diff, out] = core::array::from_fn(|_| Self::alloc(&mut self.next_addr)); f(self.base_alu(SubF, diff, lhs, rhs)); - f(self.base_alu(DivF, out, diff, Imm::f(C::F::zero()))); + f(self.base_alu(DivF, out, diff, Imm::F(C::F::zero()))); } fn base_assert_ne( @@ -225,7 +211,7 @@ where let [diff, out] = core::array::from_fn(|_| Self::alloc(&mut self.next_addr)); f(self.base_alu(SubF, diff, lhs, rhs)); - f(self.base_alu(DivF, out, Imm::f(C::F::one()), diff)); + f(self.base_alu(DivF, out, Imm::F(C::F::one()), diff)); } fn ext_assert_eq( @@ -238,7 +224,7 @@ where let [diff, out] = core::array::from_fn(|_| Self::alloc(&mut self.next_addr)); f(self.ext_alu(SubE, diff, lhs, rhs)); - f(self.ext_alu(DivE, out, diff, Imm::ef(C::EF::zero()))); + f(self.ext_alu(DivE, out, diff, Imm::EF(C::EF::zero()))); } fn ext_assert_ne( @@ -251,7 +237,7 @@ where let [diff, out] = core::array::from_fn(|_| Self::alloc(&mut self.next_addr)); f(self.ext_alu(SubE, diff, lhs, rhs)); - f(self.ext_alu(DivE, out, Imm::ef(C::EF::one()), diff)); + f(self.ext_alu(DivE, out, Imm::EF(C::EF::one()), diff)); } fn poseidon2_permute( @@ -393,71 +379,71 @@ where let mut f = |instr| consumer(Ok(instr)); match ir_instr { - DslIr::ImmV(dst, src) => self.mem_write_const(dst, Imm::f(src)), - DslIr::ImmF(dst, src) => self.mem_write_const(dst, Imm::f(src)), - DslIr::ImmE(dst, src) => self.mem_write_const(dst, Imm::ef(src)), + DslIr::ImmV(dst, src) => f(self.mem_write_const(dst, Imm::F(src))), + DslIr::ImmF(dst, src) => f(self.mem_write_const(dst, Imm::F(src))), + DslIr::ImmE(dst, src) => f(self.mem_write_const(dst, Imm::EF(src))), DslIr::AddV(dst, lhs, rhs) => f(self.base_alu(AddF, dst, lhs, rhs)), - DslIr::AddVI(dst, lhs, rhs) => f(self.base_alu(AddF, dst, lhs, Imm::f(rhs))), + DslIr::AddVI(dst, lhs, rhs) => f(self.base_alu(AddF, dst, lhs, Imm::F(rhs))), DslIr::AddF(dst, lhs, rhs) => f(self.base_alu(AddF, dst, lhs, rhs)), - DslIr::AddFI(dst, lhs, rhs) => f(self.base_alu(AddF, dst, lhs, Imm::f(rhs))), + DslIr::AddFI(dst, lhs, rhs) => f(self.base_alu(AddF, dst, lhs, Imm::F(rhs))), DslIr::AddE(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, rhs)), - DslIr::AddEI(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, Imm::ef(rhs))), + DslIr::AddEI(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, Imm::EF(rhs))), DslIr::AddEF(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, rhs)), - DslIr::AddEFI(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, Imm::f(rhs))), - DslIr::AddEFFI(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, Imm::ef(rhs))), + DslIr::AddEFI(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, Imm::F(rhs))), + DslIr::AddEFFI(dst, lhs, rhs) => f(self.ext_alu(AddE, dst, lhs, Imm::EF(rhs))), DslIr::SubV(dst, lhs, rhs) => f(self.base_alu(SubF, dst, lhs, rhs)), - DslIr::SubVI(dst, lhs, rhs) => f(self.base_alu(SubF, dst, lhs, Imm::f(rhs))), - DslIr::SubVIN(dst, lhs, rhs) => f(self.base_alu(SubF, dst, Imm::f(lhs), rhs)), + DslIr::SubVI(dst, lhs, rhs) => f(self.base_alu(SubF, dst, lhs, Imm::F(rhs))), + DslIr::SubVIN(dst, lhs, rhs) => f(self.base_alu(SubF, dst, Imm::F(lhs), rhs)), DslIr::SubF(dst, lhs, rhs) => f(self.base_alu(SubF, dst, lhs, rhs)), - DslIr::SubFI(dst, lhs, rhs) => f(self.base_alu(SubF, dst, lhs, Imm::f(rhs))), - DslIr::SubFIN(dst, lhs, rhs) => f(self.base_alu(SubF, dst, Imm::f(lhs), rhs)), + DslIr::SubFI(dst, lhs, rhs) => f(self.base_alu(SubF, dst, lhs, Imm::F(rhs))), + DslIr::SubFIN(dst, lhs, rhs) => f(self.base_alu(SubF, dst, Imm::F(lhs), rhs)), DslIr::SubE(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, lhs, rhs)), - DslIr::SubEI(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, lhs, Imm::ef(rhs))), - DslIr::SubEIN(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, Imm::ef(lhs), rhs)), - DslIr::SubEFI(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, lhs, Imm::f(rhs))), + DslIr::SubEI(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, lhs, Imm::EF(rhs))), + DslIr::SubEIN(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, Imm::EF(lhs), rhs)), + DslIr::SubEFI(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, lhs, Imm::F(rhs))), DslIr::SubEF(dst, lhs, rhs) => f(self.ext_alu(SubE, dst, lhs, rhs)), DslIr::MulV(dst, lhs, rhs) => f(self.base_alu(MulF, dst, lhs, rhs)), - DslIr::MulVI(dst, lhs, rhs) => f(self.base_alu(MulF, dst, lhs, Imm::f(rhs))), + DslIr::MulVI(dst, lhs, rhs) => f(self.base_alu(MulF, dst, lhs, Imm::F(rhs))), DslIr::MulF(dst, lhs, rhs) => f(self.base_alu(MulF, dst, lhs, rhs)), - DslIr::MulFI(dst, lhs, rhs) => f(self.base_alu(MulF, dst, lhs, Imm::f(rhs))), + DslIr::MulFI(dst, lhs, rhs) => f(self.base_alu(MulF, dst, lhs, Imm::F(rhs))), DslIr::MulE(dst, lhs, rhs) => f(self.ext_alu(MulE, dst, lhs, rhs)), - DslIr::MulEI(dst, lhs, rhs) => f(self.ext_alu(MulE, dst, lhs, Imm::ef(rhs))), - DslIr::MulEFI(dst, lhs, rhs) => f(self.ext_alu(MulE, dst, lhs, Imm::f(rhs))), + DslIr::MulEI(dst, lhs, rhs) => f(self.ext_alu(MulE, dst, lhs, Imm::EF(rhs))), + DslIr::MulEFI(dst, lhs, rhs) => f(self.ext_alu(MulE, dst, lhs, Imm::F(rhs))), DslIr::MulEF(dst, lhs, rhs) => f(self.ext_alu(MulE, dst, lhs, rhs)), DslIr::DivF(dst, lhs, rhs) => f(self.base_alu(DivF, dst, lhs, rhs)), - DslIr::DivFI(dst, lhs, rhs) => f(self.base_alu(DivF, dst, lhs, Imm::f(rhs))), - DslIr::DivFIN(dst, lhs, rhs) => f(self.base_alu(DivF, dst, Imm::f(lhs), rhs)), + DslIr::DivFI(dst, lhs, rhs) => f(self.base_alu(DivF, dst, lhs, Imm::F(rhs))), + DslIr::DivFIN(dst, lhs, rhs) => f(self.base_alu(DivF, dst, Imm::F(lhs), rhs)), DslIr::DivE(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, lhs, rhs)), - DslIr::DivEI(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, lhs, Imm::ef(rhs))), - DslIr::DivEIN(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, Imm::ef(lhs), rhs)), - DslIr::DivEFI(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, lhs, Imm::f(rhs))), - DslIr::DivEFIN(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, Imm::f(lhs), rhs)), + DslIr::DivEI(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, lhs, Imm::EF(rhs))), + DslIr::DivEIN(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, Imm::EF(lhs), rhs)), + DslIr::DivEFI(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, lhs, Imm::F(rhs))), + DslIr::DivEFIN(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, Imm::F(lhs), rhs)), DslIr::DivEF(dst, lhs, rhs) => f(self.ext_alu(DivE, dst, lhs, rhs)), - DslIr::NegV(dst, src) => f(self.base_alu(SubF, dst, Imm::f(C::F::zero()), src)), - DslIr::NegF(dst, src) => f(self.base_alu(SubF, dst, Imm::f(C::F::zero()), src)), - DslIr::NegE(dst, src) => f(self.ext_alu(SubE, dst, Imm::ef(C::EF::zero()), src)), - DslIr::InvV(dst, src) => f(self.base_alu(DivF, dst, Imm::f(C::F::one()), src)), - DslIr::InvF(dst, src) => f(self.base_alu(DivF, dst, Imm::f(C::F::one()), src)), - DslIr::InvE(dst, src) => f(self.ext_alu(DivE, dst, Imm::f(C::F::one()), src)), + DslIr::NegV(dst, src) => f(self.base_alu(SubF, dst, Imm::F(C::F::zero()), src)), + DslIr::NegF(dst, src) => f(self.base_alu(SubF, dst, Imm::F(C::F::zero()), src)), + DslIr::NegE(dst, src) => f(self.ext_alu(SubE, dst, Imm::EF(C::EF::zero()), src)), + DslIr::InvV(dst, src) => f(self.base_alu(DivF, dst, Imm::F(C::F::one()), src)), + DslIr::InvF(dst, src) => f(self.base_alu(DivF, dst, Imm::F(C::F::one()), src)), + DslIr::InvE(dst, src) => f(self.ext_alu(DivE, dst, Imm::F(C::F::one()), src)), DslIr::AssertEqV(lhs, rhs) => self.base_assert_eq(lhs, rhs, f), DslIr::AssertEqF(lhs, rhs) => self.base_assert_eq(lhs, rhs, f), DslIr::AssertEqE(lhs, rhs) => self.ext_assert_eq(lhs, rhs, f), - DslIr::AssertEqVI(lhs, rhs) => self.base_assert_eq(lhs, Imm::f(rhs), f), - DslIr::AssertEqFI(lhs, rhs) => self.base_assert_eq(lhs, Imm::f(rhs), f), - DslIr::AssertEqEI(lhs, rhs) => self.ext_assert_eq(lhs, Imm::ef(rhs), f), + DslIr::AssertEqVI(lhs, rhs) => self.base_assert_eq(lhs, Imm::F(rhs), f), + DslIr::AssertEqFI(lhs, rhs) => self.base_assert_eq(lhs, Imm::F(rhs), f), + DslIr::AssertEqEI(lhs, rhs) => self.ext_assert_eq(lhs, Imm::EF(rhs), f), DslIr::AssertNeV(lhs, rhs) => self.base_assert_ne(lhs, rhs, f), DslIr::AssertNeF(lhs, rhs) => self.base_assert_ne(lhs, rhs, f), DslIr::AssertNeE(lhs, rhs) => self.ext_assert_ne(lhs, rhs, f), - DslIr::AssertNeVI(lhs, rhs) => self.base_assert_ne(lhs, Imm::f(rhs), f), - DslIr::AssertNeFI(lhs, rhs) => self.base_assert_ne(lhs, Imm::f(rhs), f), - DslIr::AssertNeEI(lhs, rhs) => self.ext_assert_ne(lhs, Imm::ef(rhs), f), + DslIr::AssertNeVI(lhs, rhs) => self.base_assert_ne(lhs, Imm::F(rhs), f), + DslIr::AssertNeFI(lhs, rhs) => self.base_assert_ne(lhs, Imm::F(rhs), f), + DslIr::AssertNeEI(lhs, rhs) => self.ext_assert_ne(lhs, Imm::EF(rhs), f), DslIr::CircuitV2Poseidon2PermuteBabyBear(data) => { f(self.poseidon2_permute(data.0, data.1)) @@ -545,7 +531,7 @@ where // Replace the mults using the address count data gathered in this previous. // Exhaustive match for refactoring purposes. - let total_memory = self.addr_to_mult.len(); + let total_memory = self.addr_to_mult.len() + self.consts.len(); let mut backfill = |(mult, addr): (&mut F, &Address)| { *mult = self.addr_to_mult.remove(addr.as_usize()).unwrap() }; @@ -562,6 +548,12 @@ where addrs: ExtAluIo { out: ref addr, .. }, .. }) => backfill((mult, addr)), + Instruction::Mem(MemInstr { + addrs: MemIo { inner: ref addr }, + mult, + kind: MemAccessKind::Write, + .. + }) => backfill((mult, addr)), Instruction::Poseidon2(instr) => { let Poseidon2SkinnyInstr { addrs: Poseidon2Io { output: ref addrs, .. }, @@ -598,14 +590,14 @@ where .iter_mut() .for_each(|(addr, mult)| backfill((mult, addr))); } - Instruction::Mem(_) => { - panic!("mem instructions should be produced through the `consts` map") - } // Instructions that do not write to memory. - Instruction::CommitPublicValues(_) | Instruction::Print(_) => (), + Instruction::Mem(MemInstr { kind: MemAccessKind::Read, .. }) + | Instruction::CommitPublicValues(_) + | Instruction::Print(_) => (), } } }); + debug_assert!(self.addr_to_mult.is_empty()); // Initialize constants. let total_consts = self.consts.len(); let instrs_consts = @@ -631,7 +623,6 @@ where (instrs_consts.chain(instrs).collect(), traces) } }); - debug_assert!(self.addr_to_mult.is_empty()); RecursionProgram { instructions, total_memory, traces } } } @@ -672,57 +663,6 @@ pub enum Imm { EF(EF), } -impl Imm -where - F: Field, - EF: AbstractExtensionField, -{ - /// Wraps its argument in `Self::F`. - pub fn f(f: F) -> Self { - Self::F(f) - } - - /// If `ef` lives in the base field, then we encode it as `Self::F`. - /// Otherwise, we encode it as `Self::EF`. - pub fn ef(ef: EF) -> Self { - if ef.as_base_slice()[1..].iter().all(Field::is_zero) { - Self::F(ef.as_base_slice()[0]) - } else { - Self::EF(ef) - } - } -} - -impl PartialOrd for Imm -where - F: PartialEq + AbstractField + PartialOrd, - EF: PartialEq + AbstractExtensionField, -{ - fn partial_cmp(&self, other: &Self) -> Option { - match (self, other) { - (Imm::F(a), Imm::F(b)) => a.partial_cmp(b), - (Imm::F(_), Imm::EF(_)) => Some(Ordering::Less), - (Imm::EF(_), Imm::F(_)) => Some(Ordering::Greater), - (Imm::EF(a), Imm::EF(b)) => a.as_base_slice().partial_cmp(b.as_base_slice()), - } - } -} - -impl Ord for Imm -where - F: Eq + AbstractField + Ord, - EF: Eq + AbstractExtensionField, -{ - fn cmp(&self, other: &Self) -> Ordering { - match (self, other) { - (Imm::F(a), Imm::F(b)) => a.cmp(b), - (Imm::F(_), Imm::EF(_)) => Ordering::Less, - (Imm::EF(_), Imm::F(_)) => Ordering::Greater, - (Imm::EF(a), Imm::EF(b)) => a.as_base_slice().cmp(b.as_base_slice()), - } - } -} - impl Imm where F: AbstractField + Copy, @@ -737,25 +677,6 @@ where } } -/// Expose the "virtual address" counter of the variable types. -trait HasVirtualAddress { - fn vaddr(&self) -> usize; -} - -macro_rules! impl_has_virtual_address { - ($type:ident<$($gen:ident),*>) => { - impl<$($gen),*> HasVirtualAddress for $type<$($gen),*> { - fn vaddr(&self) -> usize { - self.0 as usize - } - } - }; -} - -impl_has_virtual_address!(Var); -impl_has_virtual_address!(Felt); -impl_has_virtual_address!(Ext); - /// Utility functions for various register types. trait Reg { /// Mark the register as to be read from, returning the "physical" address. @@ -768,21 +689,28 @@ trait Reg { fn write(&self, compiler: &mut AsmCompiler) -> Address; } -impl, T: HasVirtualAddress> Reg for T { - fn read(&self, compiler: &mut AsmCompiler) -> Address { - compiler.read_vaddr(self.vaddr()) - } +macro_rules! impl_reg_borrowed { + ($a:ty) => { + impl Reg for $a + where + C: Config, + T: Reg + ?Sized, + { + fn read(&self, compiler: &mut AsmCompiler) -> Address { + (**self).read(compiler) + } - fn read_ghost(&self, compiler: &mut AsmCompiler) -> Address { - compiler.read_ghost_vaddr(self.vaddr()) - } + fn read_ghost(&self, compiler: &mut AsmCompiler) -> Address { + (**self).read_ghost(compiler) + } - fn write(&self, compiler: &mut AsmCompiler) -> Address { - compiler.write_fp(self.vaddr()) - } + fn write(&self, compiler: &mut AsmCompiler) -> Address { + (**self).write(compiler) + } + } + }; } -<<<<<<< HEAD // Allow for more flexibility in arguments. impl_reg_borrowed!(&T); impl_reg_borrowed!(&mut T); @@ -809,8 +737,6 @@ impl_reg_vaddr!(Var); impl_reg_vaddr!(Felt); impl_reg_vaddr!(Ext); -======= ->>>>>>> dev impl> Reg for Imm { fn read(&self, compiler: &mut AsmCompiler) -> Address { compiler.read_const(*self) diff --git a/crates/zkvm/entrypoint/Cargo.toml b/crates/zkvm/entrypoint/Cargo.toml index 03670adb67..bd9fed0147 100644 --- a/crates/zkvm/entrypoint/Cargo.toml +++ b/crates/zkvm/entrypoint/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "sp1-zkvm" description = "SP1 is a performant, 100% open-source, contributor-friendly zkVM." -readme = "../../../README.md" +readme = "../../README.md" version = { workspace = true } edition = { workspace = true } license = { workspace = true } diff --git a/crates/zkvm/entrypoint/src/libm.rs b/crates/zkvm/entrypoint/src/libm.rs index 4c8e6c3c52..304624d008 100644 --- a/crates/zkvm/entrypoint/src/libm.rs +++ b/crates/zkvm/entrypoint/src/libm.rs @@ -423,16 +423,6 @@ pub fn remquo(x: f64, y: f64) -> (f64, i32) { libm::remquo(x, y) } -#[no_mangle] -pub extern "C" fn rint(arg: f64) -> f64 { - libm::rint(arg) -} - -#[no_mangle] -pub extern "C" fn rintf(arg: f32) -> f32 { - libm::rintf(arg) -} - #[no_mangle] pub fn remquof(x: f32, y: f32) -> (f32, i32) { libm::remquof(x, y) diff --git a/crates/zkvm/lib/Cargo.toml b/crates/zkvm/lib/Cargo.toml index 86b4aacd00..3c819bbb62 100644 --- a/crates/zkvm/lib/Cargo.toml +++ b/crates/zkvm/lib/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "sp1-lib" description = "SP1 is a performant, 100% open-source, contributor-friendly zkVM." -readme = "../../../README.md" +readme = "../../README.md" version = { workspace = true } edition = { workspace = true } license = { workspace = true } From ed07f457930399b8eb9f9de36f4db4bbe418f217 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 16:09:04 -0700 Subject: [PATCH 127/268] fix formatting --- crates/recursion/circuit-v2/src/lib.rs | 20 +++++++++---------- .../compiler/src/circuit/compiler.rs | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 3b975297cc..7fc3461153 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -67,16 +67,16 @@ pub type FriMmcs = ExtensionMmcs::ValM pub trait BabyBearFriConfig: StarkGenericConfig< - Val = BabyBear, - Challenge = EF, - Challenger = Self::FriChallenger, - Pcs = TwoAdicFriPcs< - BabyBear, - Radix2DitParallel, - Self::ValMmcs, - ExtensionMmcs, - >, - > + Val = BabyBear, + Challenge = EF, + Challenger = Self::FriChallenger, + Pcs = TwoAdicFriPcs< + BabyBear, + Radix2DitParallel, + Self::ValMmcs, + ExtensionMmcs, + >, +> { type ValMmcs: Mmcs> = Self::RowMajorProverData> + Send diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 62b6201880..49821962e6 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -601,7 +601,7 @@ where // Initialize constants. let total_consts = self.consts.len(); let instrs_consts = - self.consts.drain().sorted_by_key(|x| x.1.0.0).map(|(imm, (addr, mult))| { + self.consts.drain().sorted_by_key(|x| x.1 .0 .0).map(|(imm, (addr, mult))| { Instruction::Mem(MemInstr { addrs: MemIo { inner: addr }, vals: MemIo { inner: imm.as_block() }, From c6ad463813d157c0ad88455e10ad9cfb61e25c37 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 16:10:13 -0700 Subject: [PATCH 128/268] fix --- crates/recursion/circuit-v2/src/lib.rs | 1 - crates/recursion/circuit-v2/src/utils.rs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 7fc3461153..a941e4306e 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -49,7 +49,6 @@ use sp1_recursion_core_v2::{ }; use p3_baby_bear::BabyBear; -use utils::{felt_bytes_to_bn254_var, felts_to_bn254_var, words_to_bytes}; type EF = ::Challenge; diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index 95c8a7a9cc..e9dfc56ecd 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -47,6 +47,7 @@ pub fn babybear_bytes_to_bn254(bytes: &[BabyBear; 32]) -> Bn254Fr { result } +#[allow(dead_code)] pub fn felts_to_bn254_var( builder: &mut Builder, digest: &[Felt; DIGEST_SIZE], From 7216d326daed835cf26e61e0abcdd47875237d4d Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Aug 2024 16:13:19 -0700 Subject: [PATCH 129/268] feat: fmt --- crates/prover/src/lib.rs | 78 ++++++++++++------------ crates/recursion/circuit-v2/src/utils.rs | 2 + 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 0ed6fb2f9f..90bb57d967 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -997,13 +997,11 @@ impl SP1Prover { #[cfg(any(test, feature = "export-tests"))] pub mod tests { - use std::{ - fs::File, - io::{Read, Write}, - }; + use std::{fs::File, io::Read, io::Write}; use super::*; + use crate::build::try_build_plonk_bn254_artifacts_dev; use anyhow::Result; use build::try_build_groth16_bn254_artifacts_dev; use p3_field::PrimeField32; @@ -1041,42 +1039,42 @@ pub mod tests { let core_proof = prover.prove_core(&pk, &stdin, opts, context)?; let public_values = core_proof.public_values.clone(); - // tracing::info!("verify core"); - // prover.verify(&core_proof.proof, &vk)?; + tracing::info!("verify core"); + prover.verify(&core_proof.proof, &vk)?; - // if test_kind == Test::Core { - // return Ok(()); - // } + if test_kind == Test::Core { + return Ok(()); + } - // tracing::info!("compress"); - // let compress_span = tracing::debug_span!("compress").entered(); - // let compressed_proof = prover.compress(&vk, core_proof, vec![], opts)?; - // compress_span.exit(); + tracing::info!("compress"); + let compress_span = tracing::debug_span!("compress").entered(); + let compressed_proof = prover.compress(&vk, core_proof, vec![], opts)?; + compress_span.exit(); - // tracing::info!("verify compressed"); - // prover.verify_compressed(&compressed_proof, &vk)?; + tracing::info!("verify compressed"); + prover.verify_compressed(&compressed_proof, &vk)?; - // if test_kind == Test::Compress { - // return Ok(()); - // } + if test_kind == Test::Compress { + return Ok(()); + } - // tracing::info!("shrink"); - // let shrink_proof = prover.shrink(compressed_proof, opts)?; + tracing::info!("shrink"); + let shrink_proof = prover.shrink(compressed_proof, opts)?; - // tracing::info!("verify shrink"); - // prover.verify_shrink(&shrink_proof, &vk)?; + tracing::info!("verify shrink"); + prover.verify_shrink(&shrink_proof, &vk)?; - // if test_kind == Test::Shrink { - // return Ok(()); - // } + if test_kind == Test::Shrink { + return Ok(()); + } - // tracing::info!("wrap bn254"); - // let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; - // let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); + tracing::info!("wrap bn254"); + let wrapped_bn254_proof = prover.wrap_bn254(shrink_proof, opts)?; + let bytes = bincode::serialize(&wrapped_bn254_proof).unwrap(); - // // Save the proof. - // let mut file = File::create("proof-with-pis.bin").unwrap(); - // file.write_all(bytes.as_slice()).unwrap(); + // Save the proof. + let mut file = File::create("proof-with-pis.bin").unwrap(); + file.write_all(bytes.as_slice()).unwrap(); // Load the proof. let mut file = File::open("proof-with-pis.bin").unwrap(); @@ -1100,16 +1098,16 @@ pub mod tests { let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); assert_eq!(vk_digest_bn254, vk.hash_bn254()); - // tracing::info!("generate plonk bn254 proof"); - // let artifacts_dir = try_build_plonk_bn254_artifacts_dev( - // &wrapped_bn254_proof.vk, - // &wrapped_bn254_proof.proof, - // ); - // let plonk_bn254_proof = - // prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); - // println!("{:?}", plonk_bn254_proof); + tracing::info!("generate plonk bn254 proof"); + let artifacts_dir = try_build_plonk_bn254_artifacts_dev( + &wrapped_bn254_proof.vk, + &wrapped_bn254_proof.proof, + ); + let plonk_bn254_proof = + prover.wrap_plonk_bn254(wrapped_bn254_proof.clone(), &artifacts_dir); + println!("{:?}", plonk_bn254_proof); - // prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; + prover.verify_plonk_bn254(&plonk_bn254_proof, &vk, &public_values, &artifacts_dir)?; tracing::info!("generate groth16 bn254 proof"); let artifacts_dir = try_build_groth16_bn254_artifacts_dev( diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index e9dfc56ecd..ebe145c1d1 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -66,6 +66,7 @@ pub fn felts_to_bn254_var( result } +#[allow(dead_code)] pub fn felt_bytes_to_bn254_var( builder: &mut Builder, bytes: &[Felt; 32], @@ -91,6 +92,7 @@ pub fn felt_bytes_to_bn254_var( result } +#[allow(dead_code)] pub fn words_to_bytes(words: &[Word]) -> Vec { words.iter().flat_map(|w| w.0).collect::>() } From c26c303e25cc7f9474f6efb80a0ccdf020c254c1 Mon Sep 17 00:00:00 2001 From: Eugene Rabinovich Date: Thu, 29 Aug 2024 11:33:29 -0700 Subject: [PATCH 130/268] feat: infrastructure for proof shape merkle proofs (#1428) --- crates/prover/src/lib.rs | 74 +++++++-- crates/recursion/circuit-v2/src/hash.rs | 1 + .../recursion/circuit-v2/src/machine/mod.rs | 2 + .../circuit-v2/src/machine/vkey_proof.rs | 148 ++++++++++++++++++ .../circuit-v2/src/machine/witness.rs | 59 ++++++- .../recursion/circuit-v2/src/merkle_tree.rs | 89 ++++++----- crates/recursion/circuit-v2/src/stark.rs | 9 +- .../recursion/circuit-v2/src/witness/outer.rs | 10 +- 8 files changed, 336 insertions(+), 56 deletions(-) create mode 100644 crates/recursion/circuit-v2/src/machine/vkey_proof.rs diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 90bb57d967..d27b2c4080 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -30,6 +30,7 @@ use std::{ thread, }; +use itertools::Itertools; use lru::LruCache; use tracing::instrument; @@ -69,11 +70,14 @@ use sp1_recursion_core_v2::{ }; use sp1_recursion_circuit_v2::{ + hash::FieldHasher, machine::{ - SP1CompressShape, SP1CompressVerifier, SP1CompressWitnessValues, SP1DeferredVerifier, - SP1DeferredWitnessValues, SP1RecursionShape, SP1RecursionWitnessValues, - SP1RecursiveVerifier, + SP1CompressShape, SP1CompressVerifier, SP1CompressWithVKeyVerifier, + SP1CompressWithVKeyWitnessValues, SP1CompressWitnessValues, SP1DeferredVerifier, + SP1DeferredWitnessValues, SP1MerkleProofWitnessValues, SP1RecursionShape, + SP1RecursionWitnessValues, SP1RecursiveVerifier, }, + merkle_tree::MerkleTree, witness::Witnessable, }; @@ -125,6 +129,12 @@ pub struct SP1Prover { pub compress_programs: Mutex>>>, pub compress_cache_misses: AtomicUsize, + + pub root: >::Digest, + + pub allowed_vkeys: Vec<>::Digest>, + + pub merkle_tree: MerkleTree, } impl SP1Prover { @@ -166,6 +176,10 @@ impl SP1Prover { ) .expect("PROVER_COMPRESS_CACHE_SIZE must be a non-zero usize"); + let allowed_vkeys = vec![>::Digest::default(); 1 << 16]; + + let (root, merkle_tree) = MerkleTree::commit(allowed_vkeys.clone()); + Self { core_prover, compress_prover, @@ -175,6 +189,9 @@ impl SP1Prover { recursion_cache_misses: AtomicUsize::new(0), compress_programs: Mutex::new(LruCache::new(compress_cache_size)), compress_cache_misses: AtomicUsize::new(0), + root, + merkle_tree, + allowed_vkeys, } } @@ -276,7 +293,7 @@ impl SP1Prover { pub fn compress_program( &self, - input: &SP1CompressWitnessValues, + input: &SP1CompressWithVKeyWitnessValues, ) -> Arc> { let mut cache = self.compress_programs.lock().unwrap(); cache @@ -287,7 +304,11 @@ impl SP1Prover { let builder_span = tracing::debug_span!("build compress program").entered(); let mut builder = Builder::::default(); let input = input.read(&mut builder); - SP1CompressVerifier::verify(&mut builder, self.compress_prover.machine(), input); + SP1CompressWithVKeyVerifier::verify( + &mut builder, + self.compress_prover.machine(), + input, + ); let operations = builder.operations; builder_span.exit(); @@ -303,7 +324,7 @@ impl SP1Prover { pub fn shrink_program( &self, - input: &SP1CompressWitnessValues, + input: &SP1CompressWithVKeyWitnessValues, ) -> Arc> { self.compress_program(input) } @@ -475,6 +496,7 @@ impl SP1Prover { ) -> Result, SP1RecursionProverError> { // Set the batch size for the reduction tree. let batch_size = 2; + let first_layer_batch_size = 2; let shard_proofs = &proof.proof.0; // Get the leaf challenger. @@ -491,7 +513,7 @@ impl SP1Prover { &leaf_challenger, shard_proofs, &deferred_proofs, - batch_size, + first_layer_batch_size, ); // Calculate the expected height of the tree. @@ -566,8 +588,15 @@ impl SP1Prover { } SP1CircuitWitness::Compress(input) => { let mut witness_stream = Vec::new(); - Witnessable::::write(&input, &mut witness_stream); - (self.compress_program(&input), witness_stream) + + let input_with_merkle = self.make_merkle_proofs(input); + + Witnessable::::write( + &input_with_merkle, + &mut witness_stream, + ); + + (self.compress_program(&input_with_merkle), witness_stream) } }); @@ -811,7 +840,9 @@ impl SP1Prover { is_complete: true, }; - let program = self.shrink_program(&input); + let input_with_merkle = self.make_merkle_proofs(input); + + let program = self.shrink_program(&input_with_merkle); // Run the compress program. let mut runtime = RecursionRuntime::, Challenge, _>::new( @@ -820,7 +851,7 @@ impl SP1Prover { ); let mut witness_stream = Vec::new(); - Witnessable::::write(&input, &mut witness_stream); + Witnessable::::write(&input_with_merkle, &mut witness_stream); runtime.witness_stream = witness_stream.into(); @@ -985,6 +1016,27 @@ impl SP1Prover { digest } + fn make_merkle_proofs( + &self, + input: SP1CompressWitnessValues, + ) -> SP1CompressWithVKeyWitnessValues +where { + // TODO: make an index based on the key itself. + let vk_indices = input.vks_and_proofs.iter().map(|(_, _)| 0).collect_vec(); + + let proofs = vk_indices + .iter() + .map(|index| { + let (_, proof) = MerkleTree::open(&self.merkle_tree, *index); + proof + }) + .collect(); + + let merkle_val = SP1MerkleProofWitnessValues { root: self.root, vk_merkle_proofs: proofs }; + + SP1CompressWithVKeyWitnessValues { compress_val: input, merkle_val } + } + fn check_for_high_cycles(cycles: u64) { if cycles > 100_000_000 { tracing::warn!( diff --git a/crates/recursion/circuit-v2/src/hash.rs b/crates/recursion/circuit-v2/src/hash.rs index 5c59e8d08d..a6b5b8354e 100644 --- a/crates/recursion/circuit-v2/src/hash.rs +++ b/crates/recursion/circuit-v2/src/hash.rs @@ -115,6 +115,7 @@ impl FieldHasher for BabyBearPoseidon2Outer { [state[0]; BN254_DIGEST_SIZE] } } + impl>> FieldHasherVariable for BabyBearPoseidon2Outer { diff --git a/crates/recursion/circuit-v2/src/machine/mod.rs b/crates/recursion/circuit-v2/src/machine/mod.rs index 64b60d4b5a..3acdb19d79 100644 --- a/crates/recursion/circuit-v2/src/machine/mod.rs +++ b/crates/recursion/circuit-v2/src/machine/mod.rs @@ -1,12 +1,14 @@ mod compress; mod core; mod deferred; +mod vkey_proof; mod witness; #[allow(unused_imports)] pub use compress::*; pub use core::*; pub use deferred::*; +pub use vkey_proof::*; #[allow(unused_imports)] pub use witness::*; diff --git a/crates/recursion/circuit-v2/src/machine/vkey_proof.rs b/crates/recursion/circuit-v2/src/machine/vkey_proof.rs new file mode 100644 index 0000000000..6b99e54833 --- /dev/null +++ b/crates/recursion/circuit-v2/src/machine/vkey_proof.rs @@ -0,0 +1,148 @@ +use std::marker::PhantomData; + +use itertools::Itertools; +use p3_air::Air; +use p3_baby_bear::BabyBear; +use p3_commit::Mmcs; +use p3_field::AbstractField; +use p3_matrix::dense::RowMajorMatrix; +use sp1_recursion_compiler::ir::{Builder, Felt}; +use sp1_recursion_core_v2::DIGEST_SIZE; +use sp1_stark::{ + air::MachineAir, Com, InnerChallenge, OpeningProof, StarkGenericConfig, StarkMachine, +}; + +use crate::{ + challenger::DuplexChallengerVariable, + constraints::RecursiveVerifierConstraintFolder, + hash::{FieldHasher, FieldHasherVariable}, + merkle_tree::{verify, MerkleProof}, + stark::MerkleProofVariable, + witness::{WitnessWriter, Witnessable}, + BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, TwoAdicPcsProofVariable, +}; + +use super::{ + SP1CompressShape, SP1CompressVerifier, SP1CompressWitnessValues, SP1CompressWitnessVariable, +}; + +/// A program to verify a batch of recursive proofs and aggregate their public values. +#[derive(Debug, Clone, Copy)] +pub struct SP1MerkleProofVerifier { + _phantom: PhantomData<(C, SC)>, +} + +/// Witness layout for the compress stage verifier. +pub struct SP1MerkleProofWitnessVariable< + C: CircuitConfig, + SC: FieldHasherVariable + BabyBearFriConfigVariable, +> { + /// The shard proofs to verify. + pub vk_merkle_proofs: Vec>, + pub root: SC::DigestVariable, +} + +/// An input layout for the reduce verifier. +pub struct SP1MerkleProofWitnessValues> { + pub vk_merkle_proofs: Vec>, + pub root: SC::Digest, +} + +impl SP1MerkleProofVerifier +where + SC: BabyBearFriConfigVariable, + C: CircuitConfig, +{ + /// Verify (via Merkle tree) that the vkey digests of a proof belong to a specified set (encoded + /// the Merkle tree proofs in input). + pub fn verify( + builder: &mut Builder, + digests: Vec, + input: SP1MerkleProofWitnessVariable, + ) { + for (proof, value) in input.vk_merkle_proofs.into_iter().zip(digests) { + verify(builder, proof, value, input.root); + } + } +} + +#[derive(Debug, Clone, Copy)] +pub struct SP1CompressWithVKeyVerifier { + _phantom: PhantomData<(C, SC, A)>, +} + +/// Witness layout for the verifier of the proof shape phase of the compress stage. +pub struct SP1CompressWithVKeyWitnessVariable< + C: CircuitConfig, + SC: BabyBearFriConfigVariable, +> { + pub compress_var: SP1CompressWitnessVariable, + pub merkle_var: SP1MerkleProofWitnessVariable, +} + +/// An input layout for the verifier of the proof shape phase of the compress stage. +pub struct SP1CompressWithVKeyWitnessValues> { + pub compress_val: SP1CompressWitnessValues, + pub merkle_val: SP1MerkleProofWitnessValues, +} + +impl SP1CompressWithVKeyVerifier +where + SC: BabyBearFriConfigVariable< + C, + FriChallengerVariable = DuplexChallengerVariable, + DigestVariable = [Felt; DIGEST_SIZE], + >, + C: CircuitConfig>, + >::ProverData>: Clone, + A: MachineAir + for<'a> Air>, +{ + /// Verify the proof shape phase of the compress stage. + pub fn verify( + builder: &mut Builder, + machine: &StarkMachine, + input: SP1CompressWithVKeyWitnessVariable, + ) { + // These are dummy values. + let values = input + .compress_var + .vks_and_proofs + .iter() + .map(|(_, _)| [builder.constant(BabyBear::zero()); DIGEST_SIZE]) + .collect_vec(); + // TODO: comment back in. + // input.compress_var.vks_and_proofs.iter().map(|(vk, _)| vk.hash(builder)).collect_vec(); + SP1MerkleProofVerifier::verify(builder, values, input.merkle_var); + SP1CompressVerifier::verify(builder, machine, input.compress_var); + } +} + +impl> SP1CompressWithVKeyWitnessValues { + pub fn shape(&self) -> SP1CompressShape { + self.compress_val.shape() + } +} + +impl, SC: BabyBearFriConfigVariable> + Witnessable for SP1CompressWithVKeyWitnessValues +where + Com: Witnessable>::DigestVariable>, + // This trait bound is redundant, but Rust-Analyzer is not able to infer it. + SC: FieldHasher, + >::Digest: Witnessable, + OpeningProof: Witnessable>, +{ + type WitnessVariable = SP1CompressWithVKeyWitnessVariable; + + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + SP1CompressWithVKeyWitnessVariable { + compress_var: self.compress_val.read(builder), + merkle_var: self.merkle_val.read(builder), + } + } + + fn write(&self, witness: &mut impl WitnessWriter) { + self.compress_val.write(witness); + self.merkle_val.write(witness); + } +} diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index 015f938c5d..e4b9d69155 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -1,5 +1,6 @@ use std::borrow::Borrow; +use p3_baby_bear::BabyBear; use p3_challenger::DuplexChallenger; use p3_symmetric::Hash; @@ -14,14 +15,17 @@ use sp1_recursion_compiler::ir::Felt; use crate::{ challenger::DuplexChallengerVariable, - hash::FieldHasherVariable, + hash::{FieldHasher, FieldHasherVariable}, + merkle_tree::MerkleProof, + stark::MerkleProofVariable, witness::{WitnessWriter, Witnessable}, BabyBearFriConfigVariable, CircuitConfig, TwoAdicPcsProofVariable, VerifyingKeyVariable, }; use super::{ SP1CompressWitnessValues, SP1CompressWitnessVariable, SP1DeferredWitnessValues, - SP1DeferredWitnessVariable, SP1RecursionWitnessValues, SP1RecursionWitnessVariable, + SP1DeferredWitnessVariable, SP1MerkleProofWitnessValues, SP1MerkleProofWitnessVariable, + SP1RecursionWitnessValues, SP1RecursionWitnessVariable, }; impl> Witnessable for Word { @@ -218,3 +222,54 @@ where self.is_complete.write(witness); } } + +impl> Witnessable for MerkleProof +where + HV::Digest: Witnessable, +{ + type WitnessVariable = MerkleProofVariable; + + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + let mut bits = vec![]; + let mut index = self.index; + for _ in 0..self.path.len() { + bits.push(index % 2 == 1); + index >>= 1; + } + let index_bits = bits.read(builder); + let path = self.path.read(builder); + + MerkleProofVariable { index: index_bits, path } + } + + fn write(&self, witness: &mut impl WitnessWriter) { + let mut index = self.index; + for _ in 0..self.path.len() { + (index % 2 == 1).write(witness); + index >>= 1; + } + self.path.write(witness); + } +} + +impl, SC: BabyBearFriConfigVariable> Witnessable + for SP1MerkleProofWitnessValues +where + // This trait bound is redundant, but Rust-Analyzer is not able to infer it. + SC: FieldHasher, + >::Digest: Witnessable, +{ + type WitnessVariable = SP1MerkleProofWitnessVariable; + + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + SP1MerkleProofWitnessVariable { + vk_merkle_proofs: self.vk_merkle_proofs.read(builder), + root: self.root.read(builder), + } + } + + fn write(&self, witness: &mut impl WitnessWriter) { + self.vk_merkle_proofs.write(witness); + self.root.write(witness); + } +} diff --git a/crates/recursion/circuit-v2/src/merkle_tree.rs b/crates/recursion/circuit-v2/src/merkle_tree.rs index d50edac6e9..40d6a44858 100644 --- a/crates/recursion/circuit-v2/src/merkle_tree.rs +++ b/crates/recursion/circuit-v2/src/merkle_tree.rs @@ -8,6 +8,7 @@ use sp1_recursion_compiler::ir::Builder; use crate::{ hash::{FieldHasher, FieldHasherVariable}, + stark::MerkleProofVariable, CircuitConfig, }; @@ -23,6 +24,12 @@ pub struct MerkleTree> { } pub struct VcsError; +#[derive(Debug, Clone)] +pub struct MerkleProof> { + pub index: usize, + pub path: Vec, +} + impl Debug for VcsError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "VcsError") @@ -67,7 +74,7 @@ impl> MerkleTree { (root, Self { height, digest_layers }) } - pub fn open(&self, index: usize) -> (HV::Digest, Vec) { + pub fn open(&self, index: usize) -> (HV::Digest, MerkleProof) { let mut path = Vec::with_capacity(self.height); let mut bit_rev_index = reverse_bits_len(index, self.height); let value = self.digest_layers[bit_rev_index]; @@ -87,22 +94,21 @@ impl> MerkleTree { offset += 1 << (self.height - i); } debug_assert_eq!(path.len(), self.height); - (value, path) + (value, MerkleProof { index, path }) } pub fn verify( - index: usize, + proof: MerkleProof, value: HV::Digest, - path: &[HV::Digest], commitment: HV::Digest, ) -> Result<(), VcsError> { + let MerkleProof { index, path } = proof; + let mut value = value; let mut index = reverse_bits_len(index, path.len()); for sibling in path { - let sibling = *sibling; - // If the index is odd, swap the order of [value, sibling]. let new_pair = if index % 2 == 0 { [value, sibling] } else { [sibling, value] }; value = HV::constant_compress(new_pair); @@ -118,13 +124,12 @@ impl> MerkleTree { pub fn verify>( builder: &mut Builder, - index: Vec, + proof: MerkleProofVariable, value: HV::DigestVariable, - path: &[HV::DigestVariable], commitment: HV::DigestVariable, ) { let mut value = value; - for (sibling, bit) in path.iter().zip(index.iter().rev()) { + for (sibling, bit) in proof.path.iter().zip(proof.index.iter().rev()) { let sibling = *sibling; // If the index is odd, swap the order of [value, sibling]. @@ -139,6 +144,7 @@ mod tests { use itertools::Itertools; use p3_baby_bear::BabyBear; use p3_field::AbstractField; + use p3_util::log2_ceil_usize; use rand::rngs::OsRng; use sp1_recursion_compiler::{ config::InnerConfig, @@ -150,6 +156,7 @@ mod tests { use crate::{ merkle_tree::{verify, MerkleTree}, + stark::MerkleProofVariable, utils::tests::run_test_recursion, CircuitConfig, }; @@ -161,34 +168,42 @@ mod tests { fn test_merkle_tree_inner() { let mut rng = OsRng; let mut builder = Builder::::default(); - for _ in 0..20 { - let leaves: Vec<[F; DIGEST_SIZE]> = - (0..17).map(|_| std::array::from_fn(|_| F::rand(&mut rng))).collect(); - let (root, tree) = MerkleTree::::commit(leaves.to_vec()); - for (i, leaf) in leaves.iter().enumerate() { - let (value, proof) = MerkleTree::::open(&tree, i); - assert!(value == *leaf); - MerkleTree::::verify(i, value, &proof, root).unwrap(); - let (value_variable, proof_variable): ([Felt<_>; 8], Vec<[Felt<_>; 8]>) = ( - std::array::from_fn(|i| builder.constant(value[i])), - proof - .iter() - .map(|x| std::array::from_fn(|i| builder.constant(x[i]))) - .collect_vec(), - ); - - let index_var = builder.constant(BabyBear::from_canonical_usize(i)); - let index_bits = C::num2bits(&mut builder, index_var, 5); - let root_variable: [Felt<_>; 8] = - root.iter().map(|x| builder.constant(*x)).collect_vec().try_into().unwrap(); - - verify::( - &mut builder, - index_bits, - value_variable, - &proof_variable, - root_variable, - ); + // Run five times with different randomness. + for _ in 0..5 { + // Test with different number of leaves. + for j in 2..20 { + let leaves: Vec<[F; DIGEST_SIZE]> = + (0..j).map(|_| std::array::from_fn(|_| F::rand(&mut rng))).collect(); + let (root, tree) = MerkleTree::::commit(leaves.to_vec()); + for (i, leaf) in leaves.iter().enumerate() { + let (_, proof) = MerkleTree::::open(&tree, i); + MerkleTree::::verify(proof.clone(), *leaf, root).unwrap(); + let (value_variable, path_variable): ([Felt<_>; 8], Vec<[Felt<_>; 8]>) = ( + std::array::from_fn(|i| builder.constant(leaf[i])), + proof + .path + .iter() + .map(|x| std::array::from_fn(|i| builder.constant(x[i]))) + .collect_vec(), + ); + + let index_var = builder.constant(BabyBear::from_canonical_usize(i)); + let index_bits = C::num2bits(&mut builder, index_var, log2_ceil_usize(j)); + let root_variable: [Felt<_>; 8] = + root.iter().map(|x| builder.constant(*x)).collect_vec().try_into().unwrap(); + + let proof_variable = MerkleProofVariable:: { + index: index_bits, + path: path_variable, + }; + + verify::( + &mut builder, + proof_variable, + value_variable, + root_variable, + ); + } } } diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index b6b0c1b56f..6d39d3441b 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -19,7 +19,8 @@ use sp1_recursion_compiler::{ use sp1_stark::{air::MachineAir, StarkGenericConfig, StarkMachine, StarkVerifyingKey}; use crate::{ - challenger::CanObserveVariable, CircuitConfig, TwoAdicPcsMatsVariable, TwoAdicPcsProofVariable, + challenger::CanObserveVariable, hash::FieldHasherVariable, CircuitConfig, + TwoAdicPcsMatsVariable, TwoAdicPcsProofVariable, }; use crate::{ @@ -38,6 +39,12 @@ pub struct ShardProofVariable, SC: BabyBearFriConf pub public_values: Vec>, } +#[derive(Clone)] +pub struct MerkleProofVariable> { + pub index: Vec, + pub path: Vec, +} + pub const EMPTY: usize = 0x_1111_1111; const CONSTRAINT_RED_ZONE: usize = 16 * 1024 * 1024; diff --git a/crates/recursion/circuit-v2/src/witness/outer.rs b/crates/recursion/circuit-v2/src/witness/outer.rs index a8fe1b84f7..6d65e34676 100644 --- a/crates/recursion/circuit-v2/src/witness/outer.rs +++ b/crates/recursion/circuit-v2/src/witness/outer.rs @@ -15,8 +15,8 @@ use sp1_recursion_core_v2::stark::config::{ }; use crate::{ - BatchOpeningVariable, FriCommitPhaseProofStepVariable, FriProofVariable, FriQueryProofVariable, - TwoAdicPcsProofVariable, + BatchOpeningVariable, CircuitConfig, FriCommitPhaseProofStepVariable, FriProofVariable, + FriQueryProofVariable, TwoAdicPcsProofVariable, }; use super::{WitnessWriter, Witnessable}; @@ -39,13 +39,13 @@ impl WitnessWriter for OuterWitness { } } -impl Witnessable for Bn254Fr { +impl> Witnessable for Bn254Fr { type WitnessVariable = Var; - fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { + fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { builder.witness_var() } - fn write(&self, witness: &mut impl WitnessWriter) { + fn write(&self, witness: &mut impl WitnessWriter) { witness.write_var(*self) } } From 1d9837826b1dd95a18668c41ac1b31bf510b4bed Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 13:33:18 -0700 Subject: [PATCH 131/268] feat: new arithmetic (#1418) --- crates/prover/src/build.rs | 2 +- crates/prover/src/lib.rs | 8 +- crates/recursion/circuit-v2/src/challenger.rs | 12 +- crates/recursion/circuit-v2/src/fri.rs | 38 +- crates/recursion/circuit-v2/src/hash.rs | 8 +- crates/recursion/circuit-v2/src/lib.rs | 29 +- .../recursion/circuit-v2/src/merkle_tree.rs | 2 +- crates/recursion/circuit-v2/src/stark.rs | 29 +- crates/recursion/circuit/src/challenger.rs | 10 +- crates/recursion/circuit/src/constraints.rs | 2 +- crates/recursion/circuit/src/fri.rs | 4 +- crates/recursion/circuit/src/lib.rs | 10 +- crates/recursion/circuit/src/poseidon2.rs | 14 +- crates/recursion/circuit/src/stark.rs | 7 +- crates/recursion/circuit/src/witness.rs | 2 +- crates/recursion/compiler/benches/circuit.rs | 2 +- crates/recursion/compiler/src/asm/builder.rs | 4 +- crates/recursion/compiler/src/asm/compiler.rs | 6 +- .../recursion/compiler/src/circuit/builder.rs | 20 +- .../compiler/src/circuit/compiler.rs | 20 +- crates/recursion/compiler/src/circuit/mod.rs | 6 +- .../recursion/compiler/src/ir/arithmetic.rs | 970 ++++++++++++++++++ crates/recursion/compiler/src/ir/bits.rs | 8 +- crates/recursion/compiler/src/ir/builder.rs | 314 +++--- crates/recursion/compiler/src/ir/mod.rs | 2 + crates/recursion/compiler/src/ir/poseidon.rs | 12 +- crates/recursion/compiler/src/ir/ptr.rs | 2 +- crates/recursion/compiler/src/ir/symbolic.rs | 705 +++++++------ crates/recursion/compiler/src/ir/types.rs | 925 ++--------------- crates/recursion/compiler/src/ir/utils.rs | 115 +-- crates/recursion/compiler/tests/arithmetic.rs | 9 +- crates/recursion/compiler/tests/array.rs | 119 --- .../recursion/compiler/tests/conditionals.rs | 87 -- crates/recursion/compiler/tests/for_loops.rs | 219 ---- crates/recursion/compiler/tests/io.rs | 42 - crates/recursion/compiler/tests/lt.rs | 28 - crates/recursion/compiler/tests/poseidon2.rs | 156 --- .../recursion/compiler/tests/public_values.rs | 29 - .../recursion/program/src/fri/two_adic_pcs.rs | 2 +- crates/stark/src/types.rs | 8 +- 40 files changed, 1808 insertions(+), 2179 deletions(-) create mode 100644 crates/recursion/compiler/src/ir/arithmetic.rs delete mode 100644 crates/recursion/compiler/tests/array.rs delete mode 100644 crates/recursion/compiler/tests/conditionals.rs delete mode 100644 crates/recursion/compiler/tests/for_loops.rs delete mode 100644 crates/recursion/compiler/tests/io.rs delete mode 100644 crates/recursion/compiler/tests/lt.rs delete mode 100644 crates/recursion/compiler/tests/poseidon2.rs delete mode 100644 crates/recursion/compiler/tests/public_values.rs diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 8af864450e..5bd74cae67 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -178,7 +178,7 @@ fn build_outer_circuit(template_input: &SP1CompressWitnessValues) -> Ve SP1CompressVerifier::verify(&mut builder, &wrap_machine, input); let mut backend = ConstraintCompiler::::default(); - let operations = backend.emit(builder.operations); + let operations = backend.emit(builder.into_operations()); wrap_span.exit(); operations diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index d27b2c4080..53f033b1db 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -278,7 +278,7 @@ impl SP1Prover { let mut builder = Builder::::default(); let input = input.read(&mut builder); SP1RecursiveVerifier::verify(&mut builder, self.core_prover.machine(), input); - let operations = builder.operations; + let operations = builder.into_operations(); builder_span.exit(); // Compile the program. @@ -309,7 +309,7 @@ impl SP1Prover { self.compress_prover.machine(), input, ); - let operations = builder.operations; + let operations = builder.into_operations(); builder_span.exit(); // Compile the program. @@ -338,7 +338,7 @@ impl SP1Prover { let mut builder = Builder::::default(); let input = input.read(&mut builder); SP1CompressVerifier::verify(&mut builder, self.shrink_prover.machine(), input); - let operations = builder.operations; + let operations = builder.into_operations(); builder_span.exit(); // Compile the program. @@ -365,7 +365,7 @@ impl SP1Prover { let verify_span = tracing::debug_span!("Verify deferred program").entered(); SP1DeferredVerifier::verify(&mut builder, self.compress_prover.machine(), input); verify_span.exit(); - let operations = builder.operations; + let operations = builder.into_operations(); operations_span.exit(); // Compile the program. diff --git a/crates/recursion/circuit-v2/src/challenger.rs b/crates/recursion/circuit-v2/src/challenger.rs index af460c0253..fac1cb1888 100644 --- a/crates/recursion/circuit-v2/src/challenger.rs +++ b/crates/recursion/circuit-v2/src/challenger.rs @@ -283,7 +283,7 @@ impl MultiField32ChallengerVariable { self.input_buffer.clear(); // TODO make this a method for the builder. - builder.push(DslIr::CircuitPoseidon2Permute(self.sponge_state)); + builder.push_op(DslIr::CircuitPoseidon2Permute(self.sponge_state)); self.output_buffer.clear(); for &pf_val in self.sponge_state.iter() { @@ -512,7 +512,7 @@ pub(crate) mod tests { builder.print_e(element_ef); builder.assert_ext_eq(expected_result_ef, element_ef); - run_test_recursion(builder.operations, None); + run_test_recursion(builder.into_operations(), None); } #[test] @@ -575,7 +575,7 @@ pub(crate) mod tests { } let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); let witness = OuterWitness::default(); PlonkBn254Prover::test::(constraints, witness); } @@ -596,7 +596,7 @@ pub(crate) mod tests { builder.assert_var_eq(result[1][0], one); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); let witness = OuterWitness::default(); PlonkBn254Prover::test::(constraints, witness); } @@ -630,7 +630,7 @@ pub(crate) mod tests { builder.assert_var_eq(result[0], output[0]); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), OuterWitness::default()); } @@ -651,7 +651,7 @@ pub(crate) mod tests { builder.assert_var_eq(result[0], gt[0]); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), OuterWitness::default()); } } diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index f3bd075323..1343735cf2 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -129,7 +129,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV // Unroll the following to avoid symbolic expression overhead // let x: Felt<_> = builder.eval(g * two_adic_generator_exp); let x: Felt<_> = builder.uninit(); - builder.operations.push(DslIr::MulF(x, g, two_adic_generator_exp)); + builder.push_op(DslIr::MulF(x, g, two_adic_generator_exp)); for (z, ps_at_z) in izip!(mat_points, mat_values) { // Unroll the loop calculation to avoid symbolic expression overhead @@ -137,7 +137,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV // let mut acc: Ext = builder.constant(C::EF::zero()); let mut acc: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::ImmE(acc, C::EF::zero())); + builder.push_op(DslIr::ImmE(acc, C::EF::zero())); for (p_at_x, p_at_z) in izip!(mat_opening.clone(), ps_at_z) { let pow = log_height_pow[log_height]; // Fill in any missing powers of alpha. @@ -145,7 +145,7 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV // let new_alpha = builder.eval(*alpha_pows.last().unwrap() * // alpha); let new_alpha: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::MulE( + builder.push_op(DslIr::MulE( new_alpha, *alpha_pows.last().unwrap(), alpha, @@ -159,13 +159,13 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV // let temp_1 = p_at_z - p_at_x[0]; let temp_1: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::SubEF(temp_1, p_at_z, p_at_x[0])); + builder.push_op(DslIr::SubEF(temp_1, p_at_z, p_at_x[0])); // let temp_2 = alpha_pows[pow] * temp_1; let temp_2: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::MulE(temp_2, alpha_pows[pow], temp_1)); + builder.push_op(DslIr::MulE(temp_2, alpha_pows[pow], temp_1)); // let temp_3 = acc + temp_2; let temp_3: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::AddE(temp_3, acc, temp_2)); + builder.push_op(DslIr::AddE(temp_3, acc, temp_2)); // acc = temp_3; acc = temp_3; @@ -176,15 +176,15 @@ pub fn verify_two_adic_pcs, SC: BabyBearFriConfigV // let temp_1 = z - x; let temp_1: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::SubEF(temp_1, z, x)); + builder.push_op(DslIr::SubEF(temp_1, z, x)); // let temp_2 = acc / (temp_1); let temp_2: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::DivE(temp_2, acc, temp_1)); + builder.push_op(DslIr::DivE(temp_2, acc, temp_1)); // let temp_3 = rp[log_height] + temp_2; let temp_3: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::AddE(temp_3, ro[log_height], temp_2)); + builder.push_op(DslIr::AddE(temp_3, ro[log_height], temp_2)); // ro[log_height] = temp_3; ro[log_height] = temp_3; @@ -245,7 +245,7 @@ pub fn verify_query, SC: BabyBearFriConfigVariable let mut x = C::exp_reverse_bits(builder, two_adic_generator, index_bits[..log_max_height].to_vec()); // let mut x = builder.uninit(); - // builder.operations.push(DslIr::AddFI(x, x_f, C::F::zero())); + // builder.push(DslIr::AddFI(x, x_f, C::F::zero())); // let mut x = builder.eval(x + C::F::zero()); // let mut x: Ext<_, _> = builder.eval(SymbolicExt::one() * SymbolicFelt::from(x_felt)); @@ -295,33 +295,33 @@ pub fn verify_query, SC: BabyBearFriConfigVariable // let temp_1 = xs[1] - xs[0]; let temp_1: Felt<_> = builder.uninit(); - builder.operations.push(DslIr::SubF(temp_1, xs[1], xs[0])); + builder.push_op(DslIr::SubF(temp_1, xs[1], xs[0])); // let temp_2 = evals_ext[1] - evals_ext[0]; let temp_2: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::SubE(temp_2, evals_ext[1], evals_ext[0])); + builder.push_op(DslIr::SubE(temp_2, evals_ext[1], evals_ext[0])); // let temp_3 = temp_2 / temp_1; let temp_3: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::DivEF(temp_3, temp_2, temp_1)); + builder.push_op(DslIr::DivEF(temp_3, temp_2, temp_1)); // let temp_4 = beta - xs[0]; let temp_4: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::SubEF(temp_4, *beta, xs[0])); + builder.push_op(DslIr::SubEF(temp_4, *beta, xs[0])); // let temp_5 = temp_4 * temp_3; let temp_5: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::MulE(temp_5, temp_4, temp_3)); + builder.push_op(DslIr::MulE(temp_5, temp_4, temp_3)); // let temp65 = evals_ext[0] + temp_5; let temp_6: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::AddE(temp_6, evals_ext[0], temp_5)); + builder.push_op(DslIr::AddE(temp_6, evals_ext[0], temp_5)); // folded_eval = temp_6; folded_eval = temp_6; // let temp_7 = x * x; let temp_7: Felt<_> = builder.uninit(); - builder.operations.push(DslIr::MulF(temp_7, x, x)); + builder.push_op(DslIr::MulF(temp_7, x, x)); // x = temp_7; x = temp_7; } @@ -647,7 +647,7 @@ mod tests { ); } - run_test_recursion(builder.operations, None); + run_test_recursion(builder.into_operations(), None); } #[test] @@ -715,6 +715,6 @@ mod tests { rounds, ); - run_test_recursion(builder.operations, std::iter::empty()); + run_test_recursion(builder.into_operations(), std::iter::empty()); } } diff --git a/crates/recursion/circuit-v2/src/hash.rs b/crates/recursion/circuit-v2/src/hash.rs index a6b5b8354e..9582096f81 100644 --- a/crates/recursion/circuit-v2/src/hash.rs +++ b/crates/recursion/circuit-v2/src/hash.rs @@ -132,7 +132,7 @@ impl>> FieldHashe let chunk = chunk.copied().collect::>(); state[chunk_id] = reduce_32(builder, chunk.as_slice()); } - builder.push(DslIr::CircuitPoseidon2Permute(state)) + builder.push_op(DslIr::CircuitPoseidon2Permute(state)) } [state[0]; BN254_DIGEST_SIZE] @@ -144,7 +144,7 @@ impl>> FieldHashe ) -> Self::DigestVariable { let state: [Var; SPONGE_SIZE] = [builder.eval(input[0][0]), builder.eval(input[1][0]), builder.eval(C::N::zero())]; - builder.push(DslIr::CircuitPoseidon2Permute(state)); + builder.push_op(DslIr::CircuitPoseidon2Permute(state)); [state[0]; BN254_DIGEST_SIZE] } @@ -163,12 +163,12 @@ impl>> FieldHashe ) -> [Self::DigestVariable; 2] { let result0: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { let result = builder.uninit(); - builder.push(DslIr::CircuitSelectV(should_swap, input[1][j], input[0][j], result)); + builder.push_op(DslIr::CircuitSelectV(should_swap, input[1][j], input[0][j], result)); result }); let result1: [Var<_>; BN254_DIGEST_SIZE] = core::array::from_fn(|j| { let result = builder.uninit(); - builder.push(DslIr::CircuitSelectV(should_swap, input[0][j], input[1][j], result)); + builder.push_op(DslIr::CircuitSelectV(should_swap, input[0][j], input[1][j], result)); result }); diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index a941e4306e..866635286e 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -49,6 +49,7 @@ use sp1_recursion_core_v2::{ }; use p3_baby_bear::BabyBear; +use utils::{felt_bytes_to_bn254_var, felts_to_bn254_var, words_to_bytes}; type EF = ::Challenge; @@ -273,7 +274,7 @@ impl CircuitConfig for OuterConfig { ext: Ext<::F, ::EF>, ) -> [Felt<::F>; D] { let felts = core::array::from_fn(|_| builder.uninit()); - builder.operations.push(DslIr::CircuitExt2Felt(felts, ext)); + builder.push_op(DslIr::CircuitExt2Felt(felts, ext)); felts } @@ -313,7 +314,7 @@ impl CircuitConfig for OuterConfig { let to_add: Felt<_> = builder.uninit(); let pow2 = builder.constant(Self::F::from_canonical_u32(1 << i)); let zero = builder.constant(Self::F::zero()); - builder.operations.push(DslIr::CircuitSelectF(bit, pow2, zero, to_add)); + builder.push_op(DslIr::CircuitSelectF(bit, pow2, zero, to_add)); builder.assign(result, result + to_add); } result @@ -330,7 +331,7 @@ impl CircuitConfig for OuterConfig { zip(id_branch, swap_branch) .map(|(id_v, sw_v): (Felt<_>, Felt<_>)| -> Felt<_> { let result: Felt<_> = builder.uninit(); - builder.operations.push(DslIr::CircuitSelectF(should_swap, sw_v, id_v, result)); + builder.push_op(DslIr::CircuitSelectF(should_swap, sw_v, id_v, result)); result }) .collect() @@ -347,7 +348,7 @@ impl CircuitConfig for OuterConfig { zip(id_branch, swap_branch) .map(|(id_v, sw_v): (Ext<_, _>, Ext<_, _>)| -> Ext<_, _> { let result: Ext<_, _> = builder.uninit(); - builder.operations.push(DslIr::CircuitSelectE(should_swap, sw_v, id_v, result)); + builder.push_op(DslIr::CircuitSelectE(should_swap, sw_v, id_v, result)); result }) .collect() @@ -428,17 +429,17 @@ impl>> BabyBearFr } fn commit_recursion_public_values( - _builder: &mut Builder, - _public_values: RecursionPublicValues::F>>, + builder: &mut Builder, + public_values: RecursionPublicValues::F>>, ) { - // let committed_values_digest_bytes_felts: [Felt<_>; 32] = - // words_to_bytes(&public_values.committed_value_digest).try_into().unwrap(); - // let committed_values_digest_bytes: Var<_> = - // felt_bytes_to_bn254_var(builder, &committed_values_digest_bytes_felts); - // builder.commit_commited_values_digest_circuit(committed_values_digest_bytes); - - // let vkey_hash = felts_to_bn254_var(builder, &public_values.sp1_vk_digest); - // builder.commit_vkey_hash_circuit(vkey_hash); + let committed_values_digest_bytes_felts: [Felt<_>; 32] = + words_to_bytes(&public_values.committed_value_digest).try_into().unwrap(); + let committed_values_digest_bytes: Var<_> = + felt_bytes_to_bn254_var(builder, &committed_values_digest_bytes_felts); + builder.commit_commited_values_digest_circuit(committed_values_digest_bytes); + + let vkey_hash = felts_to_bn254_var(builder, &public_values.sp1_vk_digest); + builder.commit_vkey_hash_circuit(vkey_hash); } } diff --git a/crates/recursion/circuit-v2/src/merkle_tree.rs b/crates/recursion/circuit-v2/src/merkle_tree.rs index 40d6a44858..4769ec5949 100644 --- a/crates/recursion/circuit-v2/src/merkle_tree.rs +++ b/crates/recursion/circuit-v2/src/merkle_tree.rs @@ -207,6 +207,6 @@ mod tests { } } - run_test_recursion(builder.operations, std::iter::empty()); + run_test_recursion(builder.into_operations(), std::iter::empty()); } } diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 6d39d3441b..eae7597eb9 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -47,9 +47,6 @@ pub struct MerkleProofVariable> { pub const EMPTY: usize = 0x_1111_1111; -const CONSTRAINT_RED_ZONE: usize = 16 * 1024 * 1024; -const CONSTRAINT_STACK_SIZE: usize = 16 * 1024 * 1024; - #[derive(Debug, Clone, Copy)] pub struct StarkVerifier { _phantom: std::marker::PhantomData<(C, SC, A)>, @@ -222,19 +219,17 @@ where // Verify the shape of the opening arguments matches the expected values. Self::verify_opening_shape(chip, values).unwrap(); // Verify the constraint evaluation. - stacker::maybe_grow(CONSTRAINT_RED_ZONE, CONSTRAINT_STACK_SIZE, || { - Self::verify_constraints( - builder, - chip, - values, - trace_domain, - qc_domains, - zeta, - alpha, - &permutation_challenges, - public_values, - ); - }); + Self::verify_constraints( + builder, + chip, + values, + trace_domain, + qc_domains, + zeta, + alpha, + &permutation_challenges, + public_values, + ); } builder.cycle_tracker_v2_exit(); } @@ -356,7 +351,7 @@ pub mod tests { let mut challenger = challenger.copy(&mut builder); StarkVerifier::verify_shard(&mut builder, &vk, &machine, &mut challenger, &proof); } - (builder.operations, witness_stream) + (builder.into_operations(), witness_stream) } #[test] diff --git a/crates/recursion/circuit/src/challenger.rs b/crates/recursion/circuit/src/challenger.rs index 13602835a7..6ab133cd1a 100644 --- a/crates/recursion/circuit/src/challenger.rs +++ b/crates/recursion/circuit/src/challenger.rs @@ -171,7 +171,7 @@ mod tests { } let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -188,7 +188,7 @@ mod tests { builder.assert_var_eq(result, gt); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -206,7 +206,7 @@ mod tests { builder.assert_felt_eq(result[2], gt[2]); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -243,7 +243,7 @@ mod tests { builder.assert_felt_eq(gt2, result2); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -285,7 +285,7 @@ mod tests { builder.assert_ext_eq(SymbolicExt::from_f(gt2), result2); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } } diff --git a/crates/recursion/circuit/src/constraints.rs b/crates/recursion/circuit/src/constraints.rs index f2df585d09..b5fe1c5125 100644 --- a/crates/recursion/circuit/src/constraints.rs +++ b/crates/recursion/circuit/src/constraints.rs @@ -335,7 +335,7 @@ mod tests { } let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } } diff --git a/crates/recursion/circuit/src/fri.rs b/crates/recursion/circuit/src/fri.rs index e847d5a3b4..94456d8d04 100644 --- a/crates/recursion/circuit/src/fri.rs +++ b/crates/recursion/circuit/src/fri.rs @@ -459,7 +459,7 @@ pub mod tests { } let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -524,7 +524,7 @@ pub mod tests { verify_two_adic_pcs(&mut builder, &config, &proof, &mut challenger, rounds); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } } diff --git a/crates/recursion/circuit/src/lib.rs b/crates/recursion/circuit/src/lib.rs index bfc01386a5..4acce57f33 100644 --- a/crates/recursion/circuit/src/lib.rs +++ b/crates/recursion/circuit/src/lib.rs @@ -61,7 +61,7 @@ mod tests { builder.assert_felt_eq(a_times_b_times_c, a_val * b_val * a_val * b_val * a_val * b_val); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); let witness = Witness::default(); PlonkBn254Prover::test::(constraints.clone(), witness); @@ -113,7 +113,7 @@ mod tests { ); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); let witness = Witness::default(); PlonkBn254Prover::test::(constraints.clone(), witness); @@ -130,7 +130,7 @@ mod tests { builder.commit_commited_values_digest_circuit(commited_values_digest); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); let mut witness = Witness::default(); witness.write_vkey_hash(vkey_hash_bn254); @@ -151,7 +151,7 @@ mod tests { builder.commit_commited_values_digest_circuit(commited_values_digest); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); let mut witness = Witness::default(); witness.write_commited_values_digest(commited_values_digest_bn254); @@ -171,7 +171,7 @@ mod tests { builder.commit_commited_values_digest_circuit(commited_values_digest); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); let mut witness = Witness::default(); witness.write_vkey_hash(vkey_hash_bn254); diff --git a/crates/recursion/circuit/src/poseidon2.rs b/crates/recursion/circuit/src/poseidon2.rs index ffa482057f..94e4370f78 100644 --- a/crates/recursion/circuit/src/poseidon2.rs +++ b/crates/recursion/circuit/src/poseidon2.rs @@ -18,7 +18,7 @@ pub trait Poseidon2CircuitBuilder { impl Poseidon2CircuitBuilder for Builder { fn p2_permute_mut(&mut self, state: [Var; SPONGE_SIZE]) { - self.push(DslIr::CircuitPoseidon2Permute(state)) + self.push_op(DslIr::CircuitPoseidon2Permute(state)) } fn p2_hash(&mut self, input: &[Felt]) -> OuterDigestVariable { @@ -46,7 +46,7 @@ impl Poseidon2CircuitBuilder for Builder { } fn p2_babybear_permute_mut(&mut self, state: [Felt; 16]) { - self.push(DslIr::CircuitPoseidon2PermuteBabyBear(Box::new(state))); + self.push_op(DslIr::CircuitPoseidon2PermuteBabyBear(Box::new(state))); } fn p2_babybear_hash(&mut self, input: &[Felt]) -> [Felt; 8] { @@ -101,7 +101,7 @@ pub mod tests { builder.assert_var_eq(c, output[2]); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -120,7 +120,7 @@ pub mod tests { } let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -153,7 +153,7 @@ pub mod tests { builder.assert_var_eq(result[0], output[0]); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -173,7 +173,7 @@ pub mod tests { builder.assert_var_eq(result[0], gt[0]); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } @@ -222,7 +222,7 @@ pub mod tests { } let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::(constraints.clone(), Witness::default()); } } diff --git a/crates/recursion/circuit/src/stark.rs b/crates/recursion/circuit/src/stark.rs index 6c30bdb468..ba5e68f87d 100644 --- a/crates/recursion/circuit/src/stark.rs +++ b/crates/recursion/circuit/src/stark.rs @@ -332,13 +332,8 @@ pub fn build_wrap_circuit( builder.assert_felt_eq(*expected_elm, *calculated_elm); } - // Print out cycle tracking info. - for line in cycle_tracker(&builder.operations.vec).unwrap().lines() { - println!("{}", line); - } - let mut backend = ConstraintCompiler::::default(); - backend.emit(builder.operations) + backend.emit(builder.into_operations()) } pub fn cycle_tracker<'a, C: Config + Debug + 'a>( diff --git a/crates/recursion/circuit/src/witness.rs b/crates/recursion/circuit/src/witness.rs index 7255f43a4e..87c77e27a5 100644 --- a/crates/recursion/circuit/src/witness.rs +++ b/crates/recursion/circuit/src/witness.rs @@ -338,7 +338,7 @@ mod tests { builder.print_e(b); let mut backend = ConstraintCompiler::::default(); - let constraints = backend.emit(builder.operations); + let constraints = backend.emit(builder.into_operations()); PlonkBn254Prover::test::( constraints, Witness { diff --git a/crates/recursion/compiler/benches/circuit.rs b/crates/recursion/compiler/benches/circuit.rs index 42d2e94ec5..5ba9a0b78b 100644 --- a/crates/recursion/compiler/benches/circuit.rs +++ b/crates/recursion/compiler/benches/circuit.rs @@ -33,7 +33,7 @@ fn poseidon_program() -> TracedVec> { builder.assert_felt_eq(lhs, rhs); } } - builder.operations + builder.into_operations() } #[allow(dead_code)] diff --git a/crates/recursion/compiler/src/asm/builder.rs b/crates/recursion/compiler/src/asm/builder.rs index cc511e4e08..616953ac03 100644 --- a/crates/recursion/compiler/src/asm/builder.rs +++ b/crates/recursion/compiler/src/asm/builder.rs @@ -12,14 +12,14 @@ impl + TwoAdicField> AsmBu /// Compile to assembly code. pub fn compile_asm(self) -> AssemblyCode { let mut compiler = AsmCompiler::new(); - compiler.build(self.operations); + compiler.build(self.into_operations()); compiler.code() } /// Compile to a program that can be executed in the recursive zkVM. pub fn compile_program(self) -> RecursionProgram { let mut compiler = AsmCompiler::new(); - compiler.build(self.operations); + compiler.build(self.into_operations()); compiler.compile() } } diff --git a/crates/recursion/compiler/src/asm/compiler.rs b/crates/recursion/compiler/src/asm/compiler.rs index fb0450444e..dfa75d6bd2 100644 --- a/crates/recursion/compiler/src/asm/compiler.rs +++ b/crates/recursion/compiler/src/asm/compiler.rs @@ -36,21 +36,21 @@ pub struct AsmCompiler { impl Var { /// Gets the frame pointer for a var. pub const fn fp(&self) -> i32 { - -((self.0 as i32) * 3 + 1 + STACK_START_OFFSET) + -((self.idx as i32) * 3 + 1 + STACK_START_OFFSET) } } impl Felt { /// Gets the frame pointer for a felt. pub const fn fp(&self) -> i32 { - -((self.0 as i32) * 3 + 2 + STACK_START_OFFSET) + -((self.idx as i32) * 3 + 2 + STACK_START_OFFSET) } } impl Ext { /// Gets the frame pointer for an extension element pub const fn fp(&self) -> i32 { - -((self.0 as i32) * 3 + STACK_START_OFFSET) + -((self.idx as i32) * 3 + STACK_START_OFFSET) } } diff --git a/crates/recursion/compiler/src/circuit/builder.rs b/crates/recursion/compiler/src/circuit/builder.rs index cca0788722..e6c86d4eb8 100644 --- a/crates/recursion/compiler/src/circuit/builder.rs +++ b/crates/recursion/compiler/src/circuit/builder.rs @@ -49,7 +49,7 @@ impl CircuitV2Builder for Builder { /// Converts a felt to bits inside a circuit. fn num2bits_v2_f(&mut self, num: Felt, num_bits: usize) -> Vec> { let output = std::iter::from_fn(|| Some(self.uninit())).take(num_bits).collect::>(); - self.push(DslIr::CircuitV2HintBitsF(output.clone(), num)); + self.push_op(DslIr::CircuitV2HintBitsF(output.clone(), num)); let x: SymbolicFelt<_> = output .iter() @@ -72,14 +72,14 @@ impl CircuitV2Builder for Builder { power_bits: Vec>, ) -> Felt { let output: Felt<_> = self.uninit(); - self.operations.push(DslIr::CircuitV2ExpReverseBits(output, input, power_bits)); + self.push_op(DslIr::CircuitV2ExpReverseBits(output, input, power_bits)); output } /// Applies the Poseidon2 permutation to the given array. fn poseidon2_permute_v2(&mut self, array: [Felt; WIDTH]) -> [Felt; WIDTH] { let output: [Felt; WIDTH] = core::array::from_fn(|_| self.uninit()); - self.operations.push(DslIr::CircuitV2Poseidon2PermuteBabyBear(Box::new((output, array)))); + self.push_op(DslIr::CircuitV2Poseidon2PermuteBabyBear(Box::new((output, array)))); output } @@ -119,14 +119,14 @@ impl CircuitV2Builder for Builder { alpha_pow_output: uninit_vec(input.alpha_pow_input.len()), ro_output: uninit_vec(input.ro_input.len()), }; - self.operations.push(DslIr::CircuitV2FriFold(Box::new((output.clone(), input)))); + self.push_op(DslIr::CircuitV2FriFold(Box::new((output.clone(), input)))); output } /// Decomposes an ext into its felt coordinates. fn ext2felt_v2(&mut self, ext: Ext) -> [Felt; D] { let felts = core::array::from_fn(|_| self.uninit()); - self.operations.push(DslIr::CircuitExt2Felt(felts, ext)); + self.push_op(DslIr::CircuitExt2Felt(felts, ext)); // Verify that the decomposed extension element is correct. let mut reconstructed_ext: Ext = self.constant(C::EF::zero()); for i in 0..4 { @@ -142,15 +142,15 @@ impl CircuitV2Builder for Builder { // Commits public values. fn commit_public_values_v2(&mut self, public_values: RecursionPublicValues>) { - self.operations.push(DslIr::CircuitV2CommitPublicValues(Box::new(public_values))); + self.push_op(DslIr::CircuitV2CommitPublicValues(Box::new(public_values))); } fn cycle_tracker_v2_enter(&mut self, name: String) { - self.operations.push(DslIr::CycleTrackerV2Enter(name)); + self.push_op(DslIr::CycleTrackerV2Enter(name)); } fn cycle_tracker_v2_exit(&mut self) { - self.operations.push(DslIr::CycleTrackerV2Exit); + self.push_op(DslIr::CycleTrackerV2Exit); } /// Hint a single felt. @@ -166,14 +166,14 @@ impl CircuitV2Builder for Builder { /// Hint a vector of felts. fn hint_felts_v2(&mut self, len: usize) -> Vec> { let arr = std::iter::from_fn(|| Some(self.uninit())).take(len).collect::>(); - self.operations.push(DslIr::CircuitV2HintFelts(arr.clone())); + self.push_op(DslIr::CircuitV2HintFelts(arr.clone())); arr } /// Hint a vector of exts. fn hint_exts_v2(&mut self, len: usize) -> Vec> { let arr = std::iter::from_fn(|| Some(self.uninit())).take(len).collect::>(); - self.operations.push(DslIr::CircuitV2HintExts(arr.clone())); + self.push_op(DslIr::CircuitV2HintExts(arr.clone())); arr } } diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index 49821962e6..ad61c665d4 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -720,13 +720,13 @@ macro_rules! impl_reg_vaddr { ($a:ty) => { impl> Reg for $a { fn read(&self, compiler: &mut AsmCompiler) -> Address { - compiler.read_vaddr(self.0 as usize) + compiler.read_vaddr(self.idx as usize) } fn read_ghost(&self, compiler: &mut AsmCompiler) -> Address { - compiler.read_ghost_vaddr(self.0 as usize) + compiler.read_ghost_vaddr(self.idx as usize) } fn write(&self, compiler: &mut AsmCompiler) -> Address { - compiler.write_fp(self.0 as usize) + compiler.write_fp(self.idx as usize) } } }; @@ -852,7 +852,7 @@ mod tests { } } - test_operations(builder.operations); + test_operations(builder.into_operations()); } #[test] @@ -932,7 +932,7 @@ mod tests { let expected_felt: Felt<_> = builder.eval(expected); builder.assert_felt_eq(result_felt, expected_felt); } - test_operations(builder.operations); + test_operations(builder.into_operations()); } #[test] @@ -987,7 +987,7 @@ mod tests { } } - test_operations(builder.operations); + test_operations(builder.into_operations()); } #[test] @@ -1010,7 +1010,7 @@ mod tests { builder.assert_felt_eq(lhs, rhs); } } - test_operations(builder.operations); + test_operations(builder.into_operations()); } #[test] @@ -1051,7 +1051,7 @@ mod tests { } builder.cycle_tracker_v2_exit(); - test_operations_with_runner(builder.operations, |program| { + test_operations_with_runner(builder.into_operations(), |program| { let mut runtime = Runtime::::new( program, BabyBearPoseidon2Inner::new().perm, @@ -1090,7 +1090,7 @@ mod tests { builder.assert_felt_eq(lhs, rhs); } } - test_operations(builder.operations); + test_operations(builder.into_operations()); } macro_rules! test_assert_fixture { @@ -1100,7 +1100,7 @@ mod tests { let mut builder = AsmBuilder::::default(); test_assert_fixture!(builder, identity, F, Felt<_>, 0xDEADBEEF, $assert_felt, $should_offset); test_assert_fixture!(builder, EF::cons, EF, Ext<_, _>, 0xABADCAFE, $assert_ext, $should_offset); - test_operations(builder.operations); + test_operations(builder.into_operations()); } }; ($builder:ident, $wrap:path, $t:ty, $u:ty, $seed:expr, $assert:ident, $should_offset:expr) => { diff --git a/crates/recursion/compiler/src/circuit/mod.rs b/crates/recursion/compiler/src/circuit/mod.rs index 46496294c7..9a1411f734 100644 --- a/crates/recursion/compiler/src/circuit/mod.rs +++ b/crates/recursion/compiler/src/circuit/mod.rs @@ -86,7 +86,7 @@ mod tests { let _: Ext<_, _> = builder.eval(a + b); } - let operations = builder.operations; + let operations = builder.into_operations(); let mut compiler = AsmCompiler::default(); let program = Arc::new(compiler.compile(operations)); let mut runtime = Runtime::::new( @@ -146,7 +146,7 @@ mod tests { let zero: Felt<_> = builder.constant(F::zero()); builder.assert_felt_eq(y, zero); - let operations = builder.operations; + let operations = builder.into_operations(); let mut compiler = AsmCompiler::default(); let program = Arc::new(compiler.compile(operations)); let mut runtime = @@ -184,7 +184,7 @@ mod tests { let sum: Ext<_, _> = builder.eval(exts[0] + exts[1]); builder.assert_ext_ne(sum, exts[2]); - let operations = builder.operations; + let operations = builder.into_operations(); let mut compiler = AsmCompiler::default(); let program = Arc::new(compiler.compile(operations)); let mut runtime = diff --git a/crates/recursion/compiler/src/ir/arithmetic.rs b/crates/recursion/compiler/src/ir/arithmetic.rs new file mode 100644 index 0000000000..c8df6d0ac2 --- /dev/null +++ b/crates/recursion/compiler/src/ir/arithmetic.rs @@ -0,0 +1,970 @@ +use std::{cell::UnsafeCell, mem::ManuallyDrop}; + +use p3_field::{AbstractExtensionField, AbstractField, Field}; + +use crate::ir::DslIr; + +use super::{Config, Ext, Felt, InnerBuilder, Var}; + +#[derive(Debug)] +pub struct VarHandle { + ptr: *mut (), + + add_var: fn(*mut (), Var, Var) -> Var, + add_var_const: fn(*mut (), Var, N) -> Var, + + sub_var: fn(*mut (), Var, Var) -> Var, + sub_var_const: fn(*mut (), Var, N) -> Var, + sub_const_var: fn(*mut (), N, Var) -> Var, + + neg_var: fn(ptr: *mut (), lhs: Var) -> Var, + + mul_var: fn(*mut (), Var, Var) -> Var, + mul_var_const: fn(*mut (), Var, N) -> Var, +} + +#[derive(Debug)] +pub struct FeltHandle { + ptr: *mut (), + + pub ext_handle_ptr: *mut (), + + add_felt: fn(*mut (), Felt, Felt) -> Felt, + add_const_felt: fn(*mut (), Felt, F) -> Felt, + + sub_felt: fn(*mut (), Felt, Felt) -> Felt, + sub_const_felt: fn(*mut (), F, Felt) -> Felt, + sub_felt_const: fn(*mut (), Felt, F) -> Felt, + + neg_felt: fn(ptr: *mut (), lhs: Felt) -> Felt, + + mul_felt: fn(*mut (), Felt, Felt) -> Felt, + mul_felt_const: fn(ptr: *mut (), lhs: Felt, rhs: F) -> Felt, + + div_felt: fn(*mut (), Felt, Felt) -> Felt, + div_felt_const: fn(*mut (), Felt, F) -> Felt, + div_const_felt: fn(*mut (), F, Felt) -> Felt, +} + +#[derive(Debug)] +pub struct ExtHandle { + ptr: *mut (), + + add_ext: fn(*mut (), Ext, Ext) -> Ext, + add_const_ext: fn(*mut (), Ext, EF) -> Ext, + add_ext_base: fn(*mut (), Ext, Felt) -> Ext, + add_const_base: fn(*mut (), Ext, F) -> Ext, + add_felt_const_ext: fn(*mut (), Felt, EF, *mut Self) -> Ext, + + sub_ext: fn(*mut (), Ext, Ext) -> Ext, + sub_ext_base: fn(*mut (), Ext, Felt) -> Ext, + sub_base_ext: fn(*mut (), Felt, Ext) -> Ext, + sub_felt_const_ext: fn(*mut (), Felt, EF, *mut Self) -> Ext, + sub_const_ext: fn(*mut (), Ext, EF) -> Ext, + sub_ext_const: fn(*mut (), EF, Ext) -> Ext, + + neg_ext: fn(ptr: *mut (), lhs: Ext) -> Ext, + + div_ext: fn(*mut (), Ext, Ext) -> Ext, + div_const_ext: fn(*mut (), Ext, EF) -> Ext, + div_ext_base: fn(*mut (), Ext, Felt) -> Ext, + div_base_ext: fn(*mut (), Felt, Ext) -> Ext, + div_const_base: fn(*mut (), Ext, F) -> Ext, + div_ext_const: fn(*mut (), EF, Ext) -> Ext, + div_felt_const_ext: fn(*mut (), Felt, EF, *mut Self) -> Ext, + + mul_ext: fn(*mut (), Ext, Ext) -> Ext, + mul_const_ext: fn(*mut (), Ext, EF) -> Ext, + mul_ext_base: fn(*mut (), Ext, Felt) -> Ext, + mul_felt_const_ext: fn(*mut (), Felt, EF, *mut Self) -> Ext, +} + +pub(crate) trait VarOperations { + fn add_var(ptr: *mut (), lhs: Var, rhs: Var) -> Var; + fn add_const_var(ptr: *mut (), lhs: Var, rhs: N) -> Var; + + fn sub_var(ptr: *mut (), lhs: Var, rhs: Var) -> Var; + fn sub_var_const(ptr: *mut (), lhs: Var, rhs: N) -> Var; + fn sub_const_var(ptr: *mut (), lhs: N, rhs: Var) -> Var; + + fn neg_var(ptr: *mut (), lhs: Var) -> Var; + + fn mul_var(ptr: *mut (), lhs: Var, rhs: Var) -> Var; + fn mul_const_var(ptr: *mut (), lhs: Var, rhs: N) -> Var; + + fn var_handle(element: &mut Box) -> VarHandle { + VarHandle { + ptr: element.as_mut() as *mut Self as *mut (), + add_var: Self::add_var, + sub_var: Self::sub_var, + mul_var: Self::mul_var, + neg_var: Self::neg_var, + add_var_const: Self::add_const_var, + sub_var_const: Self::sub_var_const, + sub_const_var: Self::sub_const_var, + mul_var_const: Self::mul_const_var, + } + } +} + +pub(crate) trait FeltOperations { + fn add_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt; + fn sub_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt; + fn mul_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt; + fn add_felt_const(ptr: *mut (), lhs: Felt, rhs: F) -> Felt; + fn sub_felt_const(ptr: *mut (), lhs: Felt, rhs: F) -> Felt; + fn mul_const_felt(ptr: *mut (), lhs: Felt, rhs: F) -> Felt; + fn sub_const_felt(ptr: *mut (), lhs: F, rhs: Felt) -> Felt; + fn div_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt; + fn div_felt_const(ptr: *mut (), lhs: Felt, rhs: F) -> Felt; + fn div_const_felt(ptr: *mut (), lhs: F, rhs: Felt) -> Felt; + fn neg_felt(ptr: *mut (), lhs: Felt) -> Felt; + + fn felt_handle(element: &mut Box, ext_handle_ptr: *mut ()) -> FeltHandle { + FeltHandle { + ptr: element.as_mut() as *mut Self as *mut (), + ext_handle_ptr, + add_felt: Self::add_felt, + sub_felt: Self::sub_felt, + mul_felt: Self::mul_felt, + add_const_felt: Self::add_felt_const, + mul_felt_const: Self::mul_const_felt, + sub_felt_const: Self::sub_felt_const, + sub_const_felt: Self::sub_const_felt, + div_felt: Self::div_felt, + div_felt_const: Self::div_felt_const, + div_const_felt: Self::div_const_felt, + neg_felt: Self::neg_felt, + } + } +} + +pub(crate) trait ExtOperations { + fn add_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext; + fn add_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext; + fn add_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext; + fn add_const_ext(ptr: *mut (), lhs: Ext, rhs: EF) -> Ext; + fn add_const_base(ptr: *mut (), lhs: Ext, rhs: F) -> Ext; + + fn neg_ext(ptr: *mut (), lhs: Ext) -> Ext; + + fn sub_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext; + fn sub_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext; + fn sub_base_ext(ptr: *mut (), lhs: Felt, rhs: Ext) -> Ext; + fn sub_ext_const(ptr: *mut (), lhs: EF, rhs: Ext) -> Ext; + fn sub_const_ext(ptr: *mut (), lhs: Ext, rhs: EF) -> Ext; + fn sub_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext; + + fn div_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext; + fn div_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext; + fn div_base_ext(ptr: *mut (), lhs: Felt, rhs: Ext) -> Ext; + fn div_const_ext(ptr: *mut (), lhs: Ext, rhs: EF) -> Ext; + fn div_ext_const(ptr: *mut (), lhs: EF, rhs: Ext) -> Ext; + fn div_const_base(ptr: *mut (), lhs: Ext, rhs: F) -> Ext; + fn div_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext; + + fn mul_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext; + fn mul_const_ext(ptr: *mut (), lhs: Ext, rhs: EF) -> Ext; + fn mul_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext; + fn mul_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext; + + fn ext_handle(element: &mut Box) -> ExtHandle { + ExtHandle { + ptr: element.as_mut() as *mut Self as *mut (), + add_ext: Self::add_ext, + add_ext_base: Self::add_ext_base, + add_felt_const_ext: Self::add_felt_const_ext, + sub_ext: Self::sub_ext, + sub_base_ext: Self::sub_base_ext, + add_const_base: Self::add_const_base, + add_const_ext: Self::add_const_ext, + neg_ext: Self::neg_ext, + sub_ext_base: Self::sub_ext_base, + sub_felt_const_ext: Self::sub_felt_const_ext, + sub_const_ext: Self::sub_const_ext, + div_ext: Self::div_ext, + div_const_ext: Self::div_const_ext, + div_felt_const_ext: Self::div_felt_const_ext, + div_ext_base: Self::div_ext_base, + sub_ext_const: Self::sub_ext_const, + div_base_ext: Self::div_base_ext, + div_const_base: Self::div_const_base, + mul_ext: Self::mul_ext, + mul_const_ext: Self::mul_const_ext, + mul_ext_base: Self::mul_ext_base, + mul_felt_const_ext: Self::mul_felt_const_ext, + div_ext_const: Self::div_ext_const, + } + } +} + +impl VarOperations for UnsafeCell> { + fn add_var(ptr: *mut (), lhs: Var, rhs: Var) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddV(res, lhs, rhs)); + + res + } + + fn sub_var(ptr: *mut (), lhs: Var, rhs: Var) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubV(res, lhs, rhs)); + + res + } + + fn mul_var(ptr: *mut (), lhs: Var, rhs: Var) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::MulV(res, lhs, rhs)); + + res + } + + fn add_const_var(ptr: *mut (), lhs: Var, rhs: C::N) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddVI(res, lhs, rhs)); + + res + } + + fn mul_const_var(ptr: *mut (), lhs: Var, rhs: C::N) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::MulVI(res, lhs, rhs)); + + res + } + + fn sub_const_var(ptr: *mut (), lhs: C::N, rhs: Var) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, rhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubVIN(res, lhs, rhs)); + + res + } + + fn sub_var_const(ptr: *mut (), lhs: Var, rhs: C::N) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubVI(res, lhs, rhs)); + + res + } + + fn neg_var(ptr: *mut (), lhs: Var) -> Var { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Var::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::NegV(res, lhs)); + + res + } +} + +impl FeltOperations for UnsafeCell> { + fn add_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddF(res, lhs, rhs)); + + res + } + + fn sub_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubF(res, lhs, rhs)); + + res + } + + fn neg_felt(ptr: *mut (), lhs: Felt) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::NegF(res, lhs)); + + res + } + + fn mul_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::MulF(res, lhs, rhs)); + + res + } + + fn add_felt_const(ptr: *mut (), lhs: Felt, rhs: C::F) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddFI(res, lhs, rhs)); + + res + } + + fn sub_felt_const(ptr: *mut (), lhs: Felt, rhs: C::F) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubFI(res, lhs, rhs)); + + res + } + + fn sub_const_felt(ptr: *mut (), lhs: C::F, rhs: Felt) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, rhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubFIN(res, lhs, rhs)); + + res + } + + fn mul_const_felt(ptr: *mut (), lhs: Felt, rhs: C::F) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::MulFI(res, lhs, rhs)); + + res + } + + fn div_felt(ptr: *mut (), lhs: Felt, rhs: Felt) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::DivF(res, lhs, rhs)); + + res + } + + fn div_felt_const(ptr: *mut (), lhs: Felt, rhs: C::F) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::DivFI(res, lhs, rhs)); + + res + } + + fn div_const_felt(ptr: *mut (), lhs: C::F, rhs: Felt) -> Felt { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Felt::new(idx, rhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::DivFIN(res, lhs, rhs)); + + res + } +} + +impl ExtOperations for UnsafeCell> { + fn add_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddE(res, lhs, rhs)); + + res + } + + fn add_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddEF(res, lhs, rhs)); + + res + } + + fn add_const_base(ptr: *mut (), lhs: Ext, rhs: C::F) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddEFI(res, lhs, rhs)); + + res + } + + fn add_const_ext(ptr: *mut (), lhs: Ext, rhs: C::EF) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::AddEI(res, lhs, rhs)); + + res + } + + fn add_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: C::EF, + handle: *mut ExtHandle, + ) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let idx = inner.get_mut().variable_count; + let res = Ext::new(idx, handle); + let inner = inner.get_mut(); + + inner.variable_count += 1; + inner.operations.push(DslIr::AddEFFI(res, lhs, rhs)); + + res + } + + fn sub_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubE(res, lhs, rhs)); + + res + } + + fn sub_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubEF(res, lhs, rhs)); + + res + } + + fn sub_const_ext(ptr: *mut (), lhs: Ext, rhs: C::EF) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubEI(res, lhs, rhs)); + + res + } + + fn sub_ext_const(ptr: *mut (), lhs: C::EF, rhs: Ext) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, rhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::SubEIN(res, lhs, rhs)); + + res + } + + fn sub_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: C::EF, + handle: *mut ExtHandle, + ) -> Ext { + Self::add_felt_const_ext(ptr, lhs, -rhs, handle) + } + + fn sub_base_ext(ptr: *mut (), lhs: Felt, rhs: Ext) -> Ext { + // TODO: optimize to one opcode. + let rhs = Self::neg_ext(ptr, rhs); + Self::add_ext_base(ptr, rhs, lhs) + } + + fn neg_ext(ptr: *mut (), lhs: Ext) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::NegE(res, lhs)); + + res + } + + fn mul_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::MulE(res, lhs, rhs)); + + res + } + + fn mul_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::MulEF(res, lhs, rhs)); + + res + } + + fn mul_const_ext(ptr: *mut (), lhs: Ext, rhs: C::EF) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::MulEI(res, lhs, rhs)); + + res + } + + fn mul_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: C::EF, + handle: *mut ExtHandle, + ) -> Ext { + // TODO: optimize to one opcode. + let lhs = Self::add_felt_const_ext(ptr, lhs, C::EF::zero(), handle); + Self::mul_const_ext(ptr, lhs, rhs) + } + + fn div_ext(ptr: *mut (), lhs: Ext, rhs: Ext) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::DivE(res, lhs, rhs)); + + res + } + + fn div_const_base(ptr: *mut (), lhs: Ext, rhs: C::F) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::DivEFI(res, lhs, rhs)); + + res + } + + fn div_const_ext(ptr: *mut (), lhs: Ext, rhs: C::EF) -> Ext { + Self::mul_const_ext(ptr, lhs, rhs.inverse()) + } + + fn div_base_ext(ptr: *mut (), lhs: Felt, rhs: Ext) -> Ext { + // TODO: optimize to one opcode. + let lhs = Self::add_felt_const_ext(ptr, lhs, C::EF::zero(), rhs.handle); + Self::div_ext(ptr, lhs, rhs) + } + + fn div_ext_base(ptr: *mut (), lhs: Ext, rhs: Felt) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, lhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::DivEF(res, lhs, rhs)); + + res + } + + fn div_ext_const(ptr: *mut (), lhs: C::EF, rhs: Ext) -> Ext { + let mut inner = unsafe { ManuallyDrop::new(Box::from_raw(ptr as *mut Self)) }; + let inner = inner.get_mut(); + let idx = inner.variable_count; + let res = Ext::new(idx, rhs.handle); + inner.variable_count += 1; + + inner.operations.push(DslIr::DivEIN(res, lhs, rhs)); + + res + } + + fn div_felt_const_ext( + ptr: *mut (), + lhs: Felt, + rhs: C::EF, + handle: *mut ExtHandle, + ) -> Ext { + Self::mul_felt_const_ext(ptr, lhs, rhs.inverse(), handle) + } +} + +impl VarHandle { + pub fn add_v(&self, lhs: Var, rhs: Var) -> Var { + (self.add_var)(self.ptr, lhs, rhs) + } + + pub fn sub_v(&self, lhs: Var, rhs: Var) -> Var { + (self.sub_var)(self.ptr, lhs, rhs) + } + + pub fn neg_v(&self, lhs: Var) -> Var { + (self.neg_var)(self.ptr, lhs) + } + + pub fn mul_v(&self, lhs: Var, rhs: Var) -> Var { + (self.mul_var)(self.ptr, lhs, rhs) + } + + pub fn add_const_v(&self, lhs: Var, rhs: N) -> Var { + (self.add_var_const)(self.ptr, lhs, rhs) + } + + pub fn add_v_const(&self, lhs: N, rhs: Var) -> Var { + self.add_const_v(rhs, lhs) + } + + pub fn mul_const_v(&self, lhs: Var, rhs: N) -> Var { + (self.mul_var_const)(self.ptr, lhs, rhs) + } + + pub fn mul_v_const(&self, lhs: N, rhs: Var) -> Var { + self.mul_const_v(rhs, lhs) + } + + pub fn sub_const_v(&self, lhs: N, rhs: Var) -> Var { + (self.sub_const_var)(self.ptr, lhs, rhs) + } + + pub fn sub_v_const(&self, lhs: Var, rhs: N) -> Var { + (self.sub_var_const)(self.ptr, lhs, rhs) + } +} + +impl FeltHandle { + pub fn add_f(&self, lhs: Felt, rhs: Felt) -> Felt { + (self.add_felt)(self.ptr, lhs, rhs) + } + + pub fn add_const_f(&self, lhs: Felt, rhs: F) -> Felt { + (self.add_const_felt)(self.ptr, lhs, rhs) + } + + pub fn add_f_const(&self, lhs: F, rhs: Felt) -> Felt { + self.add_const_f(rhs, lhs) + } + + pub fn sub_f(&self, lhs: Felt, rhs: Felt) -> Felt { + (self.sub_felt)(self.ptr, lhs, rhs) + } + + pub fn sub_f_const(&self, lhs: Felt, rhs: F) -> Felt { + (self.sub_felt_const)(self.ptr, lhs, rhs) + } + + pub fn sub_const_f(&self, lhs: F, rhs: Felt) -> Felt { + (self.sub_const_felt)(self.ptr, lhs, rhs) + } + + pub fn neg_f(&self, lhs: Felt) -> Felt { + (self.neg_felt)(self.ptr, lhs) + } + + pub fn mul_f(&self, lhs: Felt, rhs: Felt) -> Felt { + (self.mul_felt)(self.ptr, lhs, rhs) + } + + pub fn mul_const_f(&self, lhs: Felt, rhs: F) -> Felt { + (self.mul_felt_const)(self.ptr, lhs, rhs) + } + + pub fn mul_f_const(&self, lhs: F, rhs: Felt) -> Felt { + self.mul_const_f(rhs, lhs) + } + + pub fn div_f(&self, lhs: Felt, rhs: Felt) -> Felt { + (self.div_felt)(self.ptr, lhs, rhs) + } + + pub fn div_f_const(&self, lhs: Felt, rhs: F) -> Felt { + (self.div_felt_const)(self.ptr, lhs, rhs) + } + + pub fn div_const_f(&self, lhs: F, rhs: Felt) -> Felt { + (self.div_const_felt)(self.ptr, lhs, rhs) + } +} + +impl> ExtHandle { + pub fn add_e(&self, lhs: Ext, rhs: Ext) -> Ext { + (self.add_ext)(self.ptr, lhs, rhs) + } + + pub fn add_e_f(&self, lhs: Ext, rhs: Felt) -> Ext { + (self.add_ext_base)(self.ptr, lhs, rhs) + } + + pub fn add_f_e(&self, lhs: Felt, rhs: Ext) -> Ext { + self.add_e_f(rhs, lhs) + } + + pub fn add_e_const_f(&self, lhs: Ext, rhs: F) -> Ext { + (self.add_const_base)(self.ptr, lhs, rhs) + } + + pub fn add_f_const_e( + &self, + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext { + (self.add_felt_const_ext)(self.ptr, lhs, rhs, handle) + } + + pub fn add_const_e_f( + &self, + lhs: EF, + rhs: Felt, + handle: *mut ExtHandle, + ) -> Ext { + self.add_f_const_e(rhs, lhs, handle) + } + + pub fn add_const_e(&self, lhs: Ext, rhs: EF) -> Ext { + (self.add_const_ext)(self.ptr, lhs, rhs) + } + + pub fn add_e_const(&self, lhs: EF, rhs: Ext) -> Ext { + (self.add_const_ext)(self.ptr, rhs, lhs) + } + + pub fn sub_e(&self, lhs: Ext, rhs: Ext) -> Ext { + (self.sub_ext)(self.ptr, lhs, rhs) + } + + pub fn sub_e_f(&self, lhs: Ext, rhs: Felt) -> Ext { + (self.sub_ext_base)(self.ptr, lhs, rhs) + } + + pub fn sub_f_e(&self, lhs: Felt, rhs: Ext) -> Ext { + (self.sub_base_ext)(self.ptr, lhs, rhs) + } + + pub fn sub_e_const_f(&self, lhs: Ext, rhs: F) -> Ext { + (self.sub_const_ext)(self.ptr, lhs, EF::from_base(rhs)) + } + + pub fn sub_f_const_e( + &self, + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext { + (self.sub_felt_const_ext)(self.ptr, lhs, rhs, handle) + } + + pub fn sub_const_e_f( + &self, + lhs: EF, + rhs: Felt, + handle: *mut ExtHandle, + ) -> Ext { + // TODO: optimize to one opcode. + let rhs = self.add_f_const_e(rhs, EF::zero(), handle); + self.sub_e_const(lhs, rhs) + } + + pub fn sub_const_e(&self, lhs: Ext, rhs: EF) -> Ext { + (self.sub_const_ext)(self.ptr, lhs, rhs) + } + + pub fn sub_e_const(&self, lhs: EF, rhs: Ext) -> Ext { + (self.sub_ext_const)(self.ptr, lhs, rhs) + } + + pub fn neg_e(&self, lhs: Ext) -> Ext { + (self.neg_ext)(self.ptr, lhs) + } + + pub fn mul_e(&self, lhs: Ext, rhs: Ext) -> Ext { + (self.mul_ext)(self.ptr, lhs, rhs) + } + + pub fn mul_e_f(&self, lhs: Ext, rhs: Felt) -> Ext { + (self.mul_ext_base)(self.ptr, lhs, rhs) + } + + pub fn mul_f_e(&self, lhs: Felt, rhs: Ext) -> Ext { + self.mul_e_f(rhs, lhs) + } + + pub fn mul_e_const_f(&self, lhs: Ext, rhs: F) -> Ext { + (self.mul_const_ext)(self.ptr, lhs, EF::from_base(rhs)) + } + + pub fn mul_f_const_e( + &self, + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext { + (self.mul_felt_const_ext)(self.ptr, lhs, rhs, handle) + } + + pub fn mul_const_e_f( + &self, + lhs: EF, + rhs: Felt, + handle: *mut ExtHandle, + ) -> Ext { + self.mul_f_const_e(rhs, lhs, handle) + } + + pub fn mul_const_e(&self, lhs: Ext, rhs: EF) -> Ext { + (self.mul_const_ext)(self.ptr, lhs, rhs) + } + + pub fn mul_e_const(&self, lhs: EF, rhs: Ext) -> Ext { + (self.mul_const_ext)(self.ptr, rhs, lhs) + } + + pub fn div_e(&self, lhs: Ext, rhs: Ext) -> Ext { + (self.div_ext)(self.ptr, lhs, rhs) + } + + pub fn div_e_f(&self, lhs: Ext, rhs: Felt) -> Ext { + (self.div_ext_base)(self.ptr, lhs, rhs) + } + + pub fn div_f_e(&self, lhs: Felt, rhs: Ext) -> Ext { + (self.div_base_ext)(self.ptr, lhs, rhs) + } + + pub fn div_e_const_f(&self, lhs: Ext, rhs: F) -> Ext { + (self.div_const_base)(self.ptr, lhs, rhs) + } + + pub fn div_f_const_e( + &self, + lhs: Felt, + rhs: EF, + handle: *mut ExtHandle, + ) -> Ext { + (self.div_felt_const_ext)(self.ptr, lhs, rhs, handle) + } + + pub fn div_const_e(&self, lhs: Ext, rhs: EF) -> Ext { + (self.div_const_ext)(self.ptr, lhs, rhs) + } + + pub fn div_e_const(&self, lhs: EF, rhs: Ext) -> Ext { + (self.div_ext_const)(self.ptr, lhs, rhs) + } +} diff --git a/crates/recursion/compiler/src/ir/bits.rs b/crates/recursion/compiler/src/ir/bits.rs index 25cf97c05f..dba3785a6f 100644 --- a/crates/recursion/compiler/src/ir/bits.rs +++ b/crates/recursion/compiler/src/ir/bits.rs @@ -10,7 +10,7 @@ impl Builder { assert!(C::N::bits() == NUM_BITS); let output = self.dyn_array::>(NUM_BITS); - self.push(DslIr::HintBitsV(output.clone(), num)); + self.push_op(DslIr::HintBitsV(output.clone(), num)); let sum: Var<_> = self.eval(C::N::zero()); for i in 0..NUM_BITS { @@ -42,7 +42,7 @@ impl Builder { output.push(self.uninit()); } - self.push(DslIr::CircuitNum2BitsV(num, bits, output.clone())); + self.push_op(DslIr::CircuitNum2BitsV(num, bits, output.clone())); output } @@ -59,7 +59,7 @@ impl Builder { /// Converts a felt to bits. pub fn num2bits_f(&mut self, num: Felt) -> Array> { let output = self.dyn_array::>(NUM_BITS); - self.push(DslIr::HintBitsF(output.clone(), num)); + self.push_op(DslIr::HintBitsF(output.clone(), num)); let sum: Felt<_> = self.eval(C::F::zero()); for i in 0..NUM_BITS { @@ -84,7 +84,7 @@ impl Builder { output.push(self.uninit()); } - self.push(DslIr::CircuitNum2BitsF(num, output.clone())); + self.push_op(DslIr::CircuitNum2BitsF(num, output.clone())); let output_array = self.vec(output.clone()); self.less_than_bb_modulus(output_array); diff --git a/crates/recursion/compiler/src/ir/builder.rs b/crates/recursion/compiler/src/ir/builder.rs index 19cd92b6e9..e3fdba9b89 100644 --- a/crates/recursion/compiler/src/ir/builder.rs +++ b/crates/recursion/compiler/src/ir/builder.rs @@ -1,4 +1,4 @@ -use std::{iter::Zip, vec::IntoIter}; +use std::{cell::UnsafeCell, iter::Zip, ptr, vec::IntoIter}; use backtrace::Backtrace; use p3_field::AbstractField; @@ -6,8 +6,9 @@ use sp1_core_machine::utils::sp1_debug_mode; use sp1_primitives::types::RecursionProgramType; use super::{ - Array, Config, DslIr, Ext, Felt, FromConstant, SymbolicExt, SymbolicFelt, SymbolicUsize, - SymbolicVar, Usize, Var, Variable, + Array, Config, DslIr, Ext, ExtHandle, ExtOperations, Felt, FeltHandle, FeltOperations, + FromConstant, SymbolicExt, SymbolicFelt, SymbolicUsize, SymbolicVar, Usize, Var, VarHandle, + VarOperations, Variable, }; /// TracedVec is a Vec wrapper that records a trace whenever an element is pushed. When extending @@ -76,17 +77,25 @@ impl IntoIterator for TracedVec { } } +#[derive(Debug, Clone)] +pub struct InnerBuilder { + pub(crate) variable_count: u32, + pub operations: TracedVec>, +} + /// A builder for the DSL. /// /// Can compile to both assembly and a set of constraints. -#[derive(Debug, Clone)] +#[derive(Debug)] pub struct Builder { - pub(crate) variable_count: u32, - pub operations: TracedVec>, + pub(crate) inner: Box>>, pub(crate) nb_public_values: Option>, pub(crate) witness_var_count: u32, pub(crate) witness_felt_count: u32, pub(crate) witness_ext_count: u32, + pub(crate) var_handle: Box>, + pub(crate) felt_handle: Box>, + pub(crate) ext_handle: Box>, pub(crate) p2_hash_num: Var, pub(crate) debug: bool, pub(crate) is_sub_builder: bool, @@ -102,15 +111,29 @@ impl Default for Builder { impl Builder { pub fn new(program_type: RecursionProgramType) -> Self { // We need to create a temporary placeholder for the p2_hash_num variable. - let placeholder_p2_hash_num = Var::new(0); + let placeholder_p2_hash_num = Var::new(0, ptr::null_mut()); - let mut new_builder = Self { + let mut inner = Box::new(UnsafeCell::new(InnerBuilder { variable_count: 0, + operations: Default::default(), + })); + + let var_handle = Box::new(VarOperations::var_handle(&mut inner)); + let mut ext_handle = Box::new(ExtOperations::ext_handle(&mut inner)); + let felt_handle = Box::new(FeltOperations::felt_handle( + &mut inner, + ext_handle.as_mut() as *mut _ as *mut (), + )); + + let mut new_builder = Self { + inner, witness_var_count: 0, witness_felt_count: 0, witness_ext_count: 0, - operations: Default::default(), nb_public_values: None, + var_handle, + felt_handle, + ext_handle, p2_hash_num: placeholder_p2_hash_num, debug: false, is_sub_builder: false, @@ -129,31 +152,35 @@ impl Builder { debug: bool, program_type: RecursionProgramType, ) -> Self { - Self { - variable_count, - // Witness counts are only used when the target is a gnark circuit. And sub-builders - // are not used when the target is a gnark circuit, so it's fine to set the - // witness counts to 0. - witness_var_count: 0, - witness_felt_count: 0, - witness_ext_count: 0, - operations: Default::default(), - nb_public_values, - p2_hash_num, - debug, - is_sub_builder: true, - program_type, - } + let mut builder = Self::new(program_type); + builder.inner.get_mut().variable_count = variable_count; + builder.nb_public_values = nb_public_values; + builder.p2_hash_num = p2_hash_num; + builder.debug = debug; + + builder } /// Pushes an operation to the builder. - pub fn push(&mut self, op: DslIr) { - self.operations.push(op); + pub fn push_op(&mut self, op: DslIr) { + self.inner.get_mut().operations.push(op); + } + + pub fn extend_ops(&mut self, ops: impl IntoIterator, Option)>) { + self.inner.get_mut().operations.extend(ops); } /// Pushes an operation to the builder and records a trace if SP1_DEBUG. pub fn trace_push(&mut self, op: DslIr) { - self.operations.trace_push(op); + self.inner.get_mut().operations.trace_push(op); + } + + pub fn variable_count(&self) -> u32 { + unsafe { (*self.inner.get()).variable_count } + } + + pub fn into_operations(self) -> TracedVec> { + self.inner.into_inner().operations } /// Creates an uninitialized variable. @@ -279,7 +306,7 @@ impl Builder { pub fn lt(&mut self, lhs: Var, rhs: Var) -> Var { let result = self.uninit(); - self.operations.push(DslIr::LessThan(result, lhs, rhs)); + self.push_op(DslIr::LessThan(result, lhs, rhs)); result } @@ -312,7 +339,7 @@ impl Builder { /// Break out of a loop. pub fn break_loop(&mut self) { - self.operations.push(DslIr::Break); + self.push_op(DslIr::Break); } pub fn print_debug(&mut self, val: usize) { @@ -322,23 +349,23 @@ impl Builder { /// Print a variable. pub fn print_v(&mut self, dst: Var) { - self.operations.push(DslIr::PrintV(dst)); + self.push_op(DslIr::PrintV(dst)); } /// Print a felt. pub fn print_f(&mut self, dst: Felt) { - self.operations.push(DslIr::PrintF(dst)); + self.push_op(DslIr::PrintF(dst)); } /// Print an ext. pub fn print_e(&mut self, dst: Ext) { - self.operations.push(DslIr::PrintE(dst)); + self.push_op(DslIr::PrintE(dst)); } /// Hint the length of the next vector of variables. pub fn hint_len(&mut self) -> Var { let len = self.uninit(); - self.operations.push(DslIr::HintLen(len)); + self.push_op(DslIr::HintLen(len)); len } @@ -346,7 +373,7 @@ impl Builder { pub fn hint_var(&mut self) -> Var { let len = self.hint_len(); let arr = self.dyn_array(len); - self.operations.push(DslIr::HintVars(arr.clone())); + self.push_op(DslIr::HintVars(arr.clone())); self.get(&arr, 0) } @@ -354,7 +381,7 @@ impl Builder { pub fn hint_felt(&mut self) -> Felt { let len = self.hint_len(); let arr = self.dyn_array(len); - self.operations.push(DslIr::HintFelts(arr.clone())); + self.push_op(DslIr::HintFelts(arr.clone())); self.get(&arr, 0) } @@ -362,7 +389,7 @@ impl Builder { pub fn hint_ext(&mut self) -> Ext { let len = self.hint_len(); let arr = self.dyn_array(len); - self.operations.push(DslIr::HintExts(arr.clone())); + self.push_op(DslIr::HintExts(arr.clone())); self.get(&arr, 0) } @@ -370,7 +397,7 @@ impl Builder { pub fn hint_vars(&mut self) -> Array> { let len = self.hint_len(); let arr = self.dyn_array(len); - self.operations.push(DslIr::HintVars(arr.clone())); + self.push_op(DslIr::HintVars(arr.clone())); arr } @@ -378,7 +405,7 @@ impl Builder { pub fn hint_felts(&mut self) -> Array> { let len = self.hint_len(); let arr = self.dyn_array(len); - self.operations.push(DslIr::HintFelts(arr.clone())); + self.push_op(DslIr::HintFelts(arr.clone())); arr } @@ -386,14 +413,14 @@ impl Builder { pub fn hint_exts(&mut self) -> Array> { let len = self.hint_len(); let arr = self.dyn_array(len); - self.operations.push(DslIr::HintExts(arr.clone())); + self.push_op(DslIr::HintExts(arr.clone())); arr } pub fn witness_var(&mut self) -> Var { assert!(!self.is_sub_builder, "Cannot create a witness var with a sub builder"); let witness = self.uninit(); - self.operations.push(DslIr::WitnessVar(witness, self.witness_var_count)); + self.push_op(DslIr::WitnessVar(witness, self.witness_var_count)); self.witness_var_count += 1; witness } @@ -401,7 +428,7 @@ impl Builder { pub fn witness_felt(&mut self) -> Felt { assert!(!self.is_sub_builder, "Cannot create a witness felt with a sub builder"); let witness = self.uninit(); - self.operations.push(DslIr::WitnessFelt(witness, self.witness_felt_count)); + self.push_op(DslIr::WitnessFelt(witness, self.witness_felt_count)); self.witness_felt_count += 1; witness } @@ -409,14 +436,14 @@ impl Builder { pub fn witness_ext(&mut self) -> Ext { assert!(!self.is_sub_builder, "Cannot create a witness ext with a sub builder"); let witness = self.uninit(); - self.operations.push(DslIr::WitnessExt(witness, self.witness_ext_count)); + self.push_op(DslIr::WitnessExt(witness, self.witness_ext_count)); self.witness_ext_count += 1; witness } /// Throws an error. pub fn error(&mut self) { - self.operations.trace_push(DslIr::Error()); + self.trace_push(DslIr::Error()); } /// Materializes a usize into a variable. @@ -429,7 +456,7 @@ impl Builder { /// Register a felt as public value. This is append to the proof's public values buffer. pub fn register_public_value(&mut self, val: Felt) { - self.operations.push(DslIr::RegisterPublicValue(val)); + self.push_op(DslIr::RegisterPublicValue(val)); } /// Register and commits a felt as public value. This value will be constrained when verified. @@ -440,7 +467,7 @@ impl Builder { } let nb_public_values = *self.nb_public_values.as_ref().unwrap(); - self.operations.push(DslIr::Commit(val, nb_public_values)); + self.push_op(DslIr::Commit(val, nb_public_values)); self.assign(nb_public_values, nb_public_values + C::N::one()); } @@ -455,33 +482,34 @@ impl Builder { } pub fn commit_vkey_hash_circuit(&mut self, var: Var) { - self.operations.push(DslIr::CircuitCommitVkeyHash(var)); + self.push_op(DslIr::CircuitCommitVkeyHash(var)); } pub fn commit_commited_values_digest_circuit(&mut self, var: Var) { - self.operations.push(DslIr::CircuitCommitCommitedValuesDigest(var)); + self.push_op(DslIr::CircuitCommitCommitedValuesDigest(var)); } pub fn reduce_e(&mut self, ext: Ext) { - self.operations.push(DslIr::ReduceE(ext)); + self.push_op(DslIr::ReduceE(ext)); } pub fn felt2var_circuit(&mut self, felt: Felt) -> Var { let var = self.uninit(); - self.operations.push(DslIr::CircuitFelt2Var(felt, var)); + self.push_op(DslIr::CircuitFelt2Var(felt, var)); var } pub fn cycle_tracker(&mut self, name: &str) { - self.operations.push(DslIr::CycleTracker(name.to_string())); + self.push_op(DslIr::CycleTracker(name.to_string())); } pub fn halt(&mut self) { - self.operations.push(DslIr::Halt); + self.push_op(DslIr::Halt); } } /// A builder for the DSL that handles if statements. +#[allow(dead_code)] pub struct IfBuilder<'a, C: Config> { lhs: SymbolicVar, rhs: SymbolicVar, @@ -490,6 +518,7 @@ pub struct IfBuilder<'a, C: Config> { } /// A set of conditions that if statements can be based on. +#[allow(dead_code)] enum IfCondition { EqConst(N, N), NeConst(N, N), @@ -506,7 +535,7 @@ impl<'a, C: Config> IfBuilder<'a, C> { // Execute the `then` block and collect the instructions. let mut f_builder = Builder::::new_sub_builder( - self.builder.variable_count, + self.builder.variable_count(), self.builder.nb_public_values, self.builder.p2_hash_num, self.builder.debug, @@ -515,35 +544,35 @@ impl<'a, C: Config> IfBuilder<'a, C> { f(&mut f_builder); self.builder.p2_hash_num = f_builder.p2_hash_num; - let then_instructions = f_builder.operations; + let then_instructions = f_builder.into_operations(); // Dispatch instructions to the correct conditional block. match condition { IfCondition::EqConst(lhs, rhs) => { if lhs == rhs { - self.builder.operations.extend(then_instructions); + self.builder.extend_ops(then_instructions); } } IfCondition::NeConst(lhs, rhs) => { if lhs != rhs { - self.builder.operations.extend(then_instructions); + self.builder.extend_ops(then_instructions); } } IfCondition::Eq(lhs, rhs) => { let op = DslIr::IfEq(Box::new((lhs, rhs, then_instructions, Default::default()))); - self.builder.operations.push(op); + self.builder.push_op(op); } IfCondition::EqI(lhs, rhs) => { let op = DslIr::IfEqI(Box::new((lhs, rhs, then_instructions, Default::default()))); - self.builder.operations.push(op); + self.builder.push_op(op); } IfCondition::Ne(lhs, rhs) => { let op = DslIr::IfNe(Box::new((lhs, rhs, then_instructions, Default::default()))); - self.builder.operations.push(op); + self.builder.push_op(op); } IfCondition::NeI(lhs, rhs) => { let op = DslIr::IfNeI(Box::new((lhs, rhs, then_instructions, Default::default()))); - self.builder.operations.push(op); + self.builder.push_op(op); } } } @@ -556,7 +585,7 @@ impl<'a, C: Config> IfBuilder<'a, C> { // Get the condition reduced from the expressions for lhs and rhs. let condition = self.condition(); let mut then_builder = Builder::::new_sub_builder( - self.builder.variable_count, + self.builder.variable_count(), self.builder.nb_public_values, self.builder.p2_hash_num, self.builder.debug, @@ -567,10 +596,10 @@ impl<'a, C: Config> IfBuilder<'a, C> { then_f(&mut then_builder); self.builder.p2_hash_num = then_builder.p2_hash_num; - let then_instructions = then_builder.operations; + let then_instructions = then_builder.into_operations(); let mut else_builder = Builder::::new_sub_builder( - self.builder.variable_count, + self.builder.variable_count(), self.builder.nb_public_values, self.builder.p2_hash_num, self.builder.debug, @@ -579,112 +608,113 @@ impl<'a, C: Config> IfBuilder<'a, C> { else_f(&mut else_builder); self.builder.p2_hash_num = else_builder.p2_hash_num; - let else_instructions = else_builder.operations; + let else_instructions = else_builder.into_operations(); // Dispatch instructions to the correct conditional block. match condition { IfCondition::EqConst(lhs, rhs) => { if lhs == rhs { - self.builder.operations.extend(then_instructions); + self.builder.extend_ops(then_instructions); } else { - self.builder.operations.extend(else_instructions); + self.builder.extend_ops(else_instructions); } } IfCondition::NeConst(lhs, rhs) => { if lhs != rhs { - self.builder.operations.extend(then_instructions); + self.builder.extend_ops(then_instructions); } else { - self.builder.operations.extend(else_instructions); + self.builder.extend_ops(else_instructions); } } IfCondition::Eq(lhs, rhs) => { let op = DslIr::IfEq(Box::new((lhs, rhs, then_instructions, else_instructions))); - self.builder.operations.push(op); + self.builder.push_op(op); } IfCondition::EqI(lhs, rhs) => { let op = DslIr::IfEqI(Box::new((lhs, rhs, then_instructions, else_instructions))); - self.builder.operations.push(op); + self.builder.push_op(op); } IfCondition::Ne(lhs, rhs) => { let op = DslIr::IfNe(Box::new((lhs, rhs, then_instructions, else_instructions))); - self.builder.operations.push(op); + self.builder.push_op(op); } IfCondition::NeI(lhs, rhs) => { let op = DslIr::IfNeI(Box::new((lhs, rhs, then_instructions, else_instructions))); - self.builder.operations.push(op); + self.builder.push_op(op); } } } fn condition(&mut self) -> IfCondition { - match (self.lhs.clone(), self.rhs.clone(), self.is_eq) { - (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _), true) => { - IfCondition::EqConst(lhs, rhs) - } - (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _), false) => { - IfCondition::NeConst(lhs, rhs) - } - (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _), true) => { - IfCondition::EqI(rhs, lhs) - } - (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _), false) => { - IfCondition::NeI(rhs, lhs) - } - (SymbolicVar::Const(lhs, _), rhs, true) => { - let rhs: Var = self.builder.eval(rhs); - IfCondition::EqI(rhs, lhs) - } - (SymbolicVar::Const(lhs, _), rhs, false) => { - let rhs: Var = self.builder.eval(rhs); - IfCondition::NeI(rhs, lhs) - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _), true) => { - let lhs: Var = self.builder.eval(lhs); - IfCondition::EqI(lhs, rhs) - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _), false) => { - let lhs: Var = self.builder.eval(lhs); - IfCondition::NeI(lhs, rhs) - } - (lhs, SymbolicVar::Const(rhs, _), true) => { - let lhs: Var = self.builder.eval(lhs); - IfCondition::EqI(lhs, rhs) - } - (lhs, SymbolicVar::Const(rhs, _), false) => { - let lhs: Var = self.builder.eval(lhs); - IfCondition::NeI(lhs, rhs) - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _), true) => IfCondition::Eq(lhs, rhs), - (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _), false) => { - IfCondition::Ne(lhs, rhs) - } - (SymbolicVar::Val(lhs, _), rhs, true) => { - let rhs: Var = self.builder.eval(rhs); - IfCondition::Eq(lhs, rhs) - } - (SymbolicVar::Val(lhs, _), rhs, false) => { - let rhs: Var = self.builder.eval(rhs); - IfCondition::Ne(lhs, rhs) - } - (lhs, SymbolicVar::Val(rhs, _), true) => { - let lhs: Var = self.builder.eval(lhs); - IfCondition::Eq(lhs, rhs) - } - (lhs, SymbolicVar::Val(rhs, _), false) => { - let lhs: Var = self.builder.eval(lhs); - IfCondition::Ne(lhs, rhs) - } - (lhs, rhs, true) => { - let lhs: Var = self.builder.eval(lhs); - let rhs: Var = self.builder.eval(rhs); - IfCondition::Eq(lhs, rhs) - } - (lhs, rhs, false) => { - let lhs: Var = self.builder.eval(lhs); - let rhs: Var = self.builder.eval(rhs); - IfCondition::Ne(lhs, rhs) - } - } + unimplemented!("Deprecated") + // match (self.lhs.clone(), self.rhs.clone(), self.is_eq) { + // (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _), true) => { + // IfCondition::EqConst(lhs, rhs) + // } + // (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _), false) => { + // IfCondition::NeConst(lhs, rhs) + // } + // (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _), true) => { + // IfCondition::EqI(rhs, lhs) + // } + // (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _), false) => { + // IfCondition::NeI(rhs, lhs) + // } + // (SymbolicVar::Const(lhs, _), rhs, true) => { + // let rhs: Var = self.builder.eval(rhs); + // IfCondition::EqI(rhs, lhs) + // } + // (SymbolicVar::Const(lhs, _), rhs, false) => { + // let rhs: Var = self.builder.eval(rhs); + // IfCondition::NeI(rhs, lhs) + // } + // (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _), true) => { + // let lhs: Var = self.builder.eval(lhs); + // IfCondition::EqI(lhs, rhs) + // } + // (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _), false) => { + // let lhs: Var = self.builder.eval(lhs); + // IfCondition::NeI(lhs, rhs) + // } + // (lhs, SymbolicVar::Const(rhs, _), true) => { + // let lhs: Var = self.builder.eval(lhs); + // IfCondition::EqI(lhs, rhs) + // } + // (lhs, SymbolicVar::Const(rhs, _), false) => { + // let lhs: Var = self.builder.eval(lhs); + // IfCondition::NeI(lhs, rhs) + // } + // (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _), true) => IfCondition::Eq(lhs, rhs), + // (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _), false) => { + // IfCondition::Ne(lhs, rhs) + // } + // (SymbolicVar::Val(lhs, _), rhs, true) => { + // let rhs: Var = self.builder.eval(rhs); + // IfCondition::Eq(lhs, rhs) + // } + // (SymbolicVar::Val(lhs, _), rhs, false) => { + // let rhs: Var = self.builder.eval(rhs); + // IfCondition::Ne(lhs, rhs) + // } + // (lhs, SymbolicVar::Val(rhs, _), true) => { + // let lhs: Var = self.builder.eval(lhs); + // IfCondition::Eq(lhs, rhs) + // } + // (lhs, SymbolicVar::Val(rhs, _), false) => { + // let lhs: Var = self.builder.eval(lhs); + // IfCondition::Ne(lhs, rhs) + // } + // (lhs, rhs, true) => { + // let lhs: Var = self.builder.eval(lhs); + // let rhs: Var = self.builder.eval(rhs); + // IfCondition::Eq(lhs, rhs) + // } + // (lhs, rhs, false) => { + // let lhs: Var = self.builder.eval(lhs); + // let rhs: Var = self.builder.eval(rhs); + // IfCondition::Ne(lhs, rhs) + // } + // } } } @@ -706,7 +736,7 @@ impl<'a, C: Config> RangeBuilder<'a, C> { let step_size = C::N::from_canonical_usize(self.step_size); let loop_variable: Var = self.builder.uninit(); let mut loop_body_builder = Builder::::new_sub_builder( - self.builder.variable_count, + self.builder.variable_count(), self.builder.nb_public_values, self.builder.p2_hash_num, self.builder.debug, @@ -716,7 +746,7 @@ impl<'a, C: Config> RangeBuilder<'a, C> { f(loop_variable, &mut loop_body_builder); self.builder.p2_hash_num = loop_body_builder.p2_hash_num; - let loop_instructions = loop_body_builder.operations; + let loop_instructions = loop_body_builder.into_operations(); let op = DslIr::For(Box::new(( self.start, @@ -725,6 +755,6 @@ impl<'a, C: Config> RangeBuilder<'a, C> { loop_variable, loop_instructions, ))); - self.builder.operations.push(op); + self.builder.push_op(op); } } diff --git a/crates/recursion/compiler/src/ir/mod.rs b/crates/recursion/compiler/src/ir/mod.rs index c0098c7932..299aba378c 100644 --- a/crates/recursion/compiler/src/ir/mod.rs +++ b/crates/recursion/compiler/src/ir/mod.rs @@ -1,5 +1,6 @@ use p3_field::{ExtensionField, PrimeField, TwoAdicField}; +mod arithmetic; mod bits; mod builder; mod collections; @@ -12,6 +13,7 @@ mod types; mod utils; mod var; +pub use arithmetic::*; pub use builder::*; pub use collections::*; pub use fold::*; diff --git a/crates/recursion/compiler/src/ir/poseidon.rs b/crates/recursion/compiler/src/ir/poseidon.rs index 4ef469e5fb..b06360eb6f 100644 --- a/crates/recursion/compiler/src/ir/poseidon.rs +++ b/crates/recursion/compiler/src/ir/poseidon.rs @@ -15,8 +15,7 @@ impl Builder { } Array::Dyn(_, len) => self.array::>(*len), }; - self.operations - .push(DslIr::Poseidon2PermuteBabyBear(Box::new((output.clone(), array.clone())))); + self.push_op(DslIr::Poseidon2PermuteBabyBear(Box::new((output.clone(), array.clone())))); output } @@ -24,8 +23,7 @@ impl Builder { /// /// Reference: [p3_poseidon2::Poseidon2] pub fn poseidon2_permute_mut(&mut self, array: &Array>) { - self.operations - .push(DslIr::Poseidon2PermuteBabyBear(Box::new((array.clone(), array.clone())))); + self.push_op(DslIr::Poseidon2PermuteBabyBear(Box::new((array.clone(), array.clone())))); } /// Applies the Poseidon2 absorb function to the given array. @@ -36,7 +34,7 @@ impl Builder { p2_hash_and_absorb_num: Var, input: &Array>, ) { - self.operations.push(DslIr::Poseidon2AbsorbBabyBear(p2_hash_and_absorb_num, input.clone())); + self.push_op(DslIr::Poseidon2AbsorbBabyBear(p2_hash_and_absorb_num, input.clone())); } /// Applies the Poseidon2 finalize to the given hash number. @@ -47,7 +45,7 @@ impl Builder { p2_hash_num: Var, output: &Array>, ) { - self.operations.push(DslIr::Poseidon2FinalizeBabyBear(p2_hash_num, output.clone())); + self.push_op(DslIr::Poseidon2FinalizeBabyBear(p2_hash_num, output.clone())); } /// Applies the Poseidon2 compression function to the given array. @@ -78,7 +76,7 @@ impl Builder { left: &Array>, right: &Array>, ) { - self.operations.push(DslIr::Poseidon2CompressBabyBear(Box::new(( + self.push_op(DslIr::Poseidon2CompressBabyBear(Box::new(( result.clone(), left.clone(), right.clone(), diff --git a/crates/recursion/compiler/src/ir/ptr.rs b/crates/recursion/compiler/src/ir/ptr.rs index daf658d85f..ed62bcfacc 100644 --- a/crates/recursion/compiler/src/ir/ptr.rs +++ b/crates/recursion/compiler/src/ir/ptr.rs @@ -18,7 +18,7 @@ impl Builder { /// Allocates an array on the heap. pub(crate) fn alloc(&mut self, len: Usize, size: usize) -> Ptr { let ptr = Ptr::uninit(self); - self.push(DslIr::Alloc(ptr, len, size)); + self.push_op(DslIr::Alloc(ptr, len, size)); ptr } diff --git a/crates/recursion/compiler/src/ir/symbolic.rs b/crates/recursion/compiler/src/ir/symbolic.rs index b1fbc0a666..ea9955b0f5 100644 --- a/crates/recursion/compiler/src/ir/symbolic.rs +++ b/crates/recursion/compiler/src/ir/symbolic.rs @@ -1,182 +1,40 @@ -use alloc::rc::Rc; use core::{ any::Any, ops::{Add, Div, Mul, Neg, Sub}, }; use std::{ any::TypeId, - hash::Hash, iter::{Product, Sum}, - mem, + mem::{self, ManuallyDrop}, ops::{AddAssign, DivAssign, MulAssign, SubAssign}, }; -use p3_field::{AbstractField, ExtensionField, Field, FieldArray}; +use p3_field::{AbstractField, ExtensionField, Field}; -use super::{Ext, Felt, Usize, Var}; - -const NUM_RANDOM_ELEMENTS: usize = 1; - -pub type Digest = FieldArray; - -pub fn elements() -> Digest { - // let powers = [1671541671, 1254988180, 442438744, 1716490559]; - let powers = [1671541671]; - let generator = F::generator(); - - Digest::from(powers.map(|p| generator.exp_u64(p))) -} - -pub fn ext_elements>() -> Digest { - let powers = [1021539871]; - // let powers = [1021539871, 1430550064, 447478069, 1248903325]; - let generator = EF::generator(); - - Digest::from(powers.map(|p| generator.exp_u64(p))) -} - -fn digest_id(id: u32) -> Digest { - let elements = elements(); - Digest::from( - elements.0.map(|e: F| (e + F::from_canonical_u32(id)).try_inverse().unwrap_or(F::one())), - ) -} - -fn digest_id_ext>(id: u32) -> Digest { - let elements = ext_elements(); - Digest::from( - elements.0.map(|e: EF| (e + EF::from_canonical_u32(id)).try_inverse().unwrap_or(EF::one())), - ) -} +use crate::ir::ExtHandle; -fn div_digests(a: Digest, b: Digest) -> Digest { - Digest::from(core::array::from_fn(|i| a.0[i] / b.0[i])) -} +use super::{Ext, Felt, Usize, Var}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Copy)] pub enum SymbolicVar { - Const(N, Digest), - Val(Var, Digest), - Add(Rc>, Rc>, Digest), - Mul(Rc>, Rc>, Digest), - Sub(Rc>, Rc>, Digest), - Neg(Rc>, Digest), + Const(N), + Val(Var), } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Copy)] pub enum SymbolicFelt { - Const(F, Digest), - Val(Felt, Digest), - Add(Rc>, Rc>, Digest), - Mul(Rc>, Rc>, Digest), - Sub(Rc>, Rc>, Digest), - Div(Rc>, Rc>, Digest), - Neg(Rc>, Digest), + Const(F), + Val(Felt), } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Copy)] pub enum SymbolicExt { - Const(EF, Digest), - Base(Rc>, Digest), - Val(Ext, Digest), - Add(Rc>, Rc>, Digest), - Mul(Rc>, Rc>, Digest), - Sub(Rc>, Rc>, Digest), - Div(Rc>, Rc>, Digest), - Neg(Rc>, Digest), -} - -impl Hash for SymbolicVar { - fn hash(&self, state: &mut H) { - for elem in self.digest().0.iter() { - elem.hash(state); - } - } -} - -impl PartialEq for SymbolicVar { - fn eq(&self, other: &Self) -> bool { - self.digest() == other.digest() - } -} - -impl Eq for SymbolicVar {} - -impl Hash for SymbolicFelt { - fn hash(&self, state: &mut H) { - for elem in self.digest().0.iter() { - elem.hash(state); - } - } -} - -impl PartialEq for SymbolicFelt { - fn eq(&self, other: &Self) -> bool { - self.digest() == other.digest() - } -} - -impl Eq for SymbolicFelt {} - -impl Hash for SymbolicExt { - fn hash(&self, state: &mut H) { - for elem in self.digest().0.iter() { - elem.hash(state); - } - } -} - -impl PartialEq for SymbolicExt { - fn eq(&self, other: &Self) -> bool { - self.digest() == other.digest() - } -} - -impl Eq for SymbolicExt {} - -impl SymbolicVar { - pub(crate) const fn digest(&self) -> Digest { - match self { - SymbolicVar::Const(_, d) => *d, - SymbolicVar::Val(_, d) => *d, - SymbolicVar::Add(_, _, d) => *d, - SymbolicVar::Mul(_, _, d) => *d, - SymbolicVar::Sub(_, _, d) => *d, - SymbolicVar::Neg(_, d) => *d, - } - } -} - -impl SymbolicFelt { - pub(crate) const fn digest(&self) -> Digest { - match self { - SymbolicFelt::Const(_, d) => *d, - SymbolicFelt::Val(_, d) => *d, - SymbolicFelt::Add(_, _, d) => *d, - SymbolicFelt::Mul(_, _, d) => *d, - SymbolicFelt::Sub(_, _, d) => *d, - SymbolicFelt::Div(_, _, d) => *d, - SymbolicFelt::Neg(_, d) => *d, - } - } -} - -impl SymbolicExt { - pub(crate) const fn digest(&self) -> Digest { - match self { - SymbolicExt::Const(_, d) => *d, - SymbolicExt::Base(_, d) => *d, - SymbolicExt::Val(_, d) => *d, - SymbolicExt::Add(_, _, d) => *d, - SymbolicExt::Mul(_, _, d) => *d, - SymbolicExt::Sub(_, _, d) => *d, - SymbolicExt::Div(_, _, d) => *d, - SymbolicExt::Neg(_, d) => *d, - } - } + Const(EF), + Base(SymbolicFelt), + Val(Ext), } -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, Copy)] pub enum SymbolicUsize { Const(usize), Var(SymbolicVar), @@ -193,25 +51,13 @@ pub enum ExtOperand> { } impl> ExtOperand { - pub fn digest(&self) -> Digest { - match self { - ExtOperand::Base(f) => SymbolicFelt::from(*f).digest().0.map(EF::from_base).into(), - ExtOperand::Const(ef) => (*ef).into(), - ExtOperand::Felt(f) => SymbolicFelt::from(*f).digest().0.map(EF::from_base).into(), - ExtOperand::Ext(e) => digest_id_ext::(e.0), - ExtOperand::SymFelt(f) => f.digest().0.map(EF::from_base).into(), - ExtOperand::Sym(e) => e.digest(), - } - } - pub fn symbolic(self) -> SymbolicExt { - let digest = self.digest(); match self { - ExtOperand::Base(f) => SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), digest), - ExtOperand::Const(ef) => SymbolicExt::Const(ef, digest), - ExtOperand::Felt(f) => SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), digest), - ExtOperand::Ext(e) => SymbolicExt::Val(e, digest), - ExtOperand::SymFelt(f) => SymbolicExt::Base(Rc::new(f), digest), + ExtOperand::Base(f) => SymbolicExt::Base(SymbolicFelt::from(f)), + ExtOperand::Const(ef) => SymbolicExt::Const(ef), + ExtOperand::Felt(f) => SymbolicExt::Base(SymbolicFelt::from(f)), + ExtOperand::Ext(e) => SymbolicExt::Val(e), + ExtOperand::SymFelt(f) => SymbolicExt::Base(f), ExtOperand::Sym(e) => e, } } @@ -223,7 +69,7 @@ pub trait ExtConst> { impl> ExtConst for EF { fn cons(self) -> SymbolicExt { - SymbolicExt::Const(self, self.into()) + SymbolicExt::Const(self) } } @@ -359,7 +205,7 @@ impl> AbstractField for SymbolicExt { } fn from_f(f: Self::F) -> Self { - SymbolicExt::Const(f, f.into()) + SymbolicExt::Const(f) } fn from_bool(b: bool) -> Self { SymbolicExt::from_f(EF::from_bool(b)) @@ -397,13 +243,13 @@ impl> AbstractField for SymbolicExt { impl From for SymbolicVar { fn from(n: N) -> Self { - SymbolicVar::Const(n, n.into()) + SymbolicVar::Const(n) } } impl From for SymbolicFelt { fn from(f: F) -> Self { - SymbolicFelt::Const(f, f.into()) + SymbolicFelt::Const(f) } } @@ -417,13 +263,13 @@ impl> From for SymbolicExt { impl From> for SymbolicVar { fn from(v: Var) -> Self { - SymbolicVar::Val(v, digest_id(v.0)) + SymbolicVar::Val(v) } } impl From> for SymbolicFelt { fn from(f: Felt) -> Self { - SymbolicFelt::Val(f, digest_id(f.0)) + SymbolicFelt::Val(f) } } @@ -439,8 +285,21 @@ impl Add for SymbolicVar { type Output = Self; fn add(self, rhs: Self) -> Self::Output { - let digest = self.digest() + rhs.digest(); - SymbolicVar::Add(Rc::new(self), Rc::new(rhs), digest) + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs + rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).add_const_v(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).add_v_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).add_v(lhs, rhs) }; + Self::Val(res) + } + } } } @@ -448,8 +307,21 @@ impl Add for SymbolicFelt { type Output = Self; fn add(self, rhs: Self) -> Self::Output { - let digest = self.digest() + rhs.digest(); - SymbolicFelt::Add(Rc::new(self), Rc::new(rhs), digest) + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs + rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).add_const_f(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).add_f_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).add_f(lhs, rhs) }; + Self::Val(res) + } + } } } @@ -458,8 +330,66 @@ impl, E: ExtensionOperand> Add for Sym fn add(self, rhs: E) -> Self::Output { let rhs = rhs.to_operand().symbolic(); - let digest = self.digest() + rhs.digest(); - SymbolicExt::Add(Rc::new(self), Rc::new(rhs), digest) + + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs + rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).add_const_e(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).add_e_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => Self::Const(lhs + rhs), + SymbolicFelt::Val(rhs) => { + let ext_handle_ptr = + unsafe { (*rhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let res = ext_handle.add_const_e_f(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } + }, + (Self::Base(lhs), Self::Const(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => Self::Const(rhs + lhs), + SymbolicFelt::Val(lhs) => { + let ext_handle_ptr = + unsafe { (*lhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let res = ext_handle.add_f_const_e(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } + }, + + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).add_e(lhs, rhs) }; + Self::Val(res) + } + (Self::Base(lhs), Self::Base(rhs)) => Self::Base(lhs + rhs), + (Self::Base(lhs), Self::Val(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => { + let res = unsafe { (*rhs.handle).add_e_const(EF::from_base(lhs), rhs) }; + Self::Val(res) + } + SymbolicFelt::Val(lhs) => { + let res = unsafe { (*rhs.handle).add_f_e(lhs, rhs) }; + Self::Val(res) + } + }, + (Self::Val(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => { + let res = unsafe { (*lhs.handle).add_const_e(lhs, EF::from_base(rhs)) }; + Self::Val(res) + } + SymbolicFelt::Val(rhs) => { + let res = unsafe { (*lhs.handle).add_e_f(lhs, rhs) }; + Self::Val(res) + } + }, + } } } @@ -467,8 +397,21 @@ impl Mul for SymbolicVar { type Output = Self; fn mul(self, rhs: Self) -> Self::Output { - let digest = self.digest() * rhs.digest(); - SymbolicVar::Mul(Rc::new(self), Rc::new(rhs), digest) + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs * rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).mul_const_v(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).mul_v_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).mul_v(lhs, rhs) }; + Self::Val(res) + } + } } } @@ -476,8 +419,21 @@ impl Mul for SymbolicFelt { type Output = Self; fn mul(self, rhs: Self) -> Self::Output { - let digest = self.digest() * rhs.digest(); - SymbolicFelt::Mul(Rc::new(self), Rc::new(rhs), digest) + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs * rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).mul_const_f(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).mul_f_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).mul_f(lhs, rhs) }; + Self::Val(res) + } + } } } @@ -485,36 +441,66 @@ impl, E: Any> Mul for SymbolicExt { type Output = Self; fn mul(self, rhs: E) -> Self::Output { - let rhs = rhs.to_operand(); - let rhs_digest = rhs.digest(); - let prod_digest = self.digest() * rhs_digest; - match rhs { - ExtOperand::Base(f) => SymbolicExt::Mul( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), rhs_digest)), - prod_digest, - ), - ExtOperand::Const(ef) => SymbolicExt::Mul( - Rc::new(self), - Rc::new(SymbolicExt::Const(ef, rhs_digest)), - prod_digest, - ), - ExtOperand::Felt(f) => SymbolicExt::Mul( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), rhs_digest)), - prod_digest, - ), - ExtOperand::Ext(e) => SymbolicExt::Mul( - Rc::new(self), - Rc::new(SymbolicExt::Val(e, rhs_digest)), - prod_digest, - ), - ExtOperand::SymFelt(f) => SymbolicExt::Mul( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(f), rhs_digest)), - prod_digest, - ), - ExtOperand::Sym(e) => SymbolicExt::Mul(Rc::new(self), Rc::new(e), prod_digest), + let rhs = rhs.to_operand().symbolic(); + + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs * rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).mul_const_e(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).mul_e_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => Self::Const(lhs * rhs), + SymbolicFelt::Val(rhs) => { + let ext_handle_ptr = + unsafe { (*rhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let res = ext_handle.mul_const_e_f(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } + }, + (Self::Base(lhs), Self::Const(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => Self::Const(EF::from_base(lhs) * rhs), + SymbolicFelt::Val(lhs) => { + let ext_handle_ptr = + unsafe { (*lhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let res = ext_handle.mul_f_const_e(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } + }, + + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).mul_e(lhs, rhs) }; + Self::Val(res) + } + (Self::Base(lhs), Self::Base(rhs)) => Self::Base(lhs * rhs), + (Self::Base(lhs), Self::Val(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => { + let res = unsafe { (*rhs.handle).mul_e_const(EF::from_base(lhs), rhs) }; + Self::Val(res) + } + SymbolicFelt::Val(lhs) => { + let res = unsafe { (*rhs.handle).mul_f_e(lhs, rhs) }; + Self::Val(res) + } + }, + (Self::Val(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => { + let res = unsafe { (*lhs.handle).mul_const_e(lhs, EF::from_base(rhs)) }; + Self::Val(res) + } + SymbolicFelt::Val(rhs) => { + let res = unsafe { (*lhs.handle).mul_e_f(lhs, rhs) }; + Self::Val(res) + } + }, } } } @@ -523,8 +509,21 @@ impl Sub for SymbolicVar { type Output = Self; fn sub(self, rhs: Self) -> Self::Output { - let digest = self.digest() - rhs.digest(); - SymbolicVar::Sub(Rc::new(self), Rc::new(rhs), digest) + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs - rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).sub_v_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).sub_const_v(lhs, rhs) }; + Self::Val(res) + } + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).sub_v(lhs, rhs) }; + Self::Val(res) + } + } } } @@ -532,8 +531,21 @@ impl Sub for SymbolicFelt { type Output = Self; fn sub(self, rhs: Self) -> Self::Output { - let digest = self.digest() - rhs.digest(); - SymbolicFelt::Sub(Rc::new(self), Rc::new(rhs), digest) + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs - rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).sub_f_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).sub_const_f(lhs, rhs) }; + Self::Val(res) + } + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).sub_f(lhs, rhs) }; + Self::Val(res) + } + } } } @@ -541,32 +553,66 @@ impl, E: Any> Sub for SymbolicExt { type Output = Self; fn sub(self, rhs: E) -> Self::Output { - let rhs = rhs.to_operand(); - let rhs_digest = rhs.digest(); - let digest = self.digest() - rhs_digest; - match rhs { - ExtOperand::Base(f) => SymbolicExt::Sub( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), rhs_digest)), - digest, - ), - ExtOperand::Const(ef) => { - SymbolicExt::Sub(Rc::new(self), Rc::new(SymbolicExt::Const(ef, rhs_digest)), digest) + let rhs = rhs.to_operand().symbolic(); + + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs - rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).sub_const_e(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).sub_e_const(lhs, rhs) }; + Self::Val(res) } - ExtOperand::Felt(f) => SymbolicExt::Sub( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), rhs_digest)), - digest, - ), - ExtOperand::Ext(e) => { - SymbolicExt::Sub(Rc::new(self), Rc::new(SymbolicExt::Val(e, rhs_digest)), digest) + (Self::Const(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => Self::Const(lhs - rhs), + SymbolicFelt::Val(rhs) => { + let ext_handle_ptr = + unsafe { (*rhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let res = ext_handle.sub_const_e_f(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } + }, + (Self::Base(lhs), Self::Const(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => Self::Const(EF::from_base(lhs) - rhs), + SymbolicFelt::Val(lhs) => { + let ext_handle_ptr = + unsafe { (*lhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let res = ext_handle.sub_f_const_e(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } + }, + + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).sub_e(lhs, rhs) }; + Self::Val(res) } - ExtOperand::SymFelt(f) => SymbolicExt::Sub( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(f), rhs_digest)), - digest, - ), - ExtOperand::Sym(e) => SymbolicExt::Sub(Rc::new(self), Rc::new(e), digest), + (Self::Base(lhs), Self::Base(rhs)) => Self::Base(lhs - rhs), + (Self::Base(lhs), Self::Val(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => { + let res = unsafe { (*rhs.handle).sub_e_const(EF::from_base(lhs), rhs) }; + Self::Val(res) + } + SymbolicFelt::Val(lhs) => { + let res = unsafe { (*rhs.handle).sub_f_e(lhs, rhs) }; + Self::Val(res) + } + }, + (Self::Val(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => { + let res = unsafe { (*lhs.handle).sub_const_e(lhs, EF::from_base(rhs)) }; + Self::Val(res) + } + SymbolicFelt::Val(rhs) => { + let res = unsafe { (*lhs.handle).sub_e_f(lhs, rhs) }; + Self::Val(res) + } + }, } } } @@ -575,10 +621,21 @@ impl Div for SymbolicFelt { type Output = Self; fn div(self, rhs: Self) -> Self::Output { - let self_digest = self.digest(); - let rhs_digest = rhs.digest(); - let digest = div_digests(self_digest, rhs_digest); - SymbolicFelt::Div(Rc::new(self), Rc::new(rhs), digest) + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs / rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).div_f_const(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).div_const_f(lhs, rhs) }; + Self::Val(res) + } + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).div_f(lhs, rhs) }; + Self::Val(res) + } + } } } @@ -586,32 +643,71 @@ impl, E: Any> Div for SymbolicExt { type Output = Self; fn div(self, rhs: E) -> Self::Output { - let rhs = rhs.to_operand(); - let rhs_digest = rhs.digest(); - let digest = div_digests(self.digest(), rhs_digest); - match rhs { - ExtOperand::Base(f) => SymbolicExt::Div( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), rhs_digest)), - digest, - ), - ExtOperand::Const(ef) => { - SymbolicExt::Div(Rc::new(self), Rc::new(SymbolicExt::Const(ef, rhs_digest)), digest) + let rhs = rhs.to_operand().symbolic(); + + match (self, rhs) { + (Self::Const(lhs), Self::Const(rhs)) => Self::Const(lhs / rhs), + (Self::Val(lhs), Self::Const(rhs)) => { + let res = unsafe { (*lhs.handle).div_const_e(lhs, rhs) }; + Self::Val(res) + } + (Self::Const(lhs), Self::Val(rhs)) => { + let res = unsafe { (*rhs.handle).div_e_const(lhs, rhs) }; + Self::Val(res) } - ExtOperand::Felt(f) => SymbolicExt::Div( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(SymbolicFelt::from(f)), rhs_digest)), - digest, - ), - ExtOperand::Ext(e) => { - SymbolicExt::Div(Rc::new(self), Rc::new(SymbolicExt::Val(e, rhs_digest)), digest) + (Self::Const(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => Self::Const(lhs / EF::from_base(rhs)), + SymbolicFelt::Val(rhs) => { + let ext_handle_ptr = + unsafe { (*rhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let rhs = rhs.inverse(); + if let SymbolicFelt::Val(rhs) = rhs { + let res = ext_handle.mul_const_e_f(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } else { + unreachable!() + } + } + }, + (Self::Base(lhs), Self::Const(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => Self::Const(EF::from_base(lhs) / rhs), + SymbolicFelt::Val(lhs) => { + let ext_handle_ptr = + unsafe { (*lhs.handle).ext_handle_ptr as *mut ExtHandle }; + let ext_handle: ManuallyDrop<_> = + unsafe { ManuallyDrop::new(Box::from_raw(ext_handle_ptr)) }; + let res = ext_handle.div_f_const_e(lhs, rhs, ext_handle_ptr); + Self::Val(res) + } + }, + + (Self::Val(lhs), Self::Val(rhs)) => { + let res = unsafe { (*lhs.handle).div_e(lhs, rhs) }; + Self::Val(res) } - ExtOperand::SymFelt(f) => SymbolicExt::Div( - Rc::new(self), - Rc::new(SymbolicExt::Base(Rc::new(f), rhs_digest)), - digest, - ), - ExtOperand::Sym(e) => SymbolicExt::Div(Rc::new(self), Rc::new(e), digest), + (Self::Base(lhs), Self::Base(rhs)) => Self::Base(lhs / rhs), + (Self::Base(lhs), Self::Val(rhs)) => match lhs { + SymbolicFelt::Const(lhs) => { + let res = unsafe { (*rhs.handle).div_e_const(EF::from_base(lhs), rhs) }; + Self::Val(res) + } + SymbolicFelt::Val(lhs) => { + let res = unsafe { (*rhs.handle).div_f_e(lhs, rhs) }; + Self::Val(res) + } + }, + (Self::Val(lhs), Self::Base(rhs)) => match rhs { + SymbolicFelt::Const(rhs) => { + let res = unsafe { (*lhs.handle).div_const_e(lhs, EF::from_base(rhs)) }; + Self::Val(res) + } + SymbolicFelt::Val(rhs) => { + let res = unsafe { (*lhs.handle).div_e_f(lhs, rhs) }; + Self::Val(res) + } + }, } } } @@ -620,8 +716,13 @@ impl Neg for SymbolicVar { type Output = Self; fn neg(self) -> Self::Output { - let digest = -self.digest(); - SymbolicVar::Neg(Rc::new(self), digest) + match self { + SymbolicVar::Const(n) => SymbolicVar::Const(-n), + SymbolicVar::Val(n) => { + let res = unsafe { (*n.handle).neg_v(n) }; + SymbolicVar::Val(res) + } + } } } @@ -629,8 +730,13 @@ impl Neg for SymbolicFelt { type Output = Self; fn neg(self) -> Self::Output { - let digest = -self.digest(); - SymbolicFelt::Neg(Rc::new(self), digest) + match self { + SymbolicFelt::Const(f) => SymbolicFelt::Const(-f), + SymbolicFelt::Val(f) => { + let res = unsafe { (*f.handle).neg_f(f) }; + SymbolicFelt::Val(res) + } + } } } @@ -638,8 +744,14 @@ impl> Neg for SymbolicExt { type Output = Self; fn neg(self) -> Self::Output { - let digest = -self.digest(); - SymbolicExt::Neg(Rc::new(self), digest) + match self { + SymbolicExt::Const(ef) => SymbolicExt::Const(-ef), + SymbolicExt::Base(f) => SymbolicExt::Base(-f), + SymbolicExt::Val(ef) => { + let res = unsafe { (*ef.handle).neg_e(ef) }; + SymbolicExt::Val(res) + } + } } } @@ -682,8 +794,7 @@ impl Sub for SymbolicVar { type Output = Self; fn sub(self, rhs: N) -> Self::Output { - let digest = self.digest() - rhs; - SymbolicVar::Sub(Rc::new(self), Rc::new(SymbolicVar::from_f(rhs)), digest) + self - SymbolicVar::from(rhs) } } @@ -998,19 +1109,19 @@ impl Sum for SymbolicVar { impl AddAssign for SymbolicVar { fn add_assign(&mut self, rhs: Self) { - *self = self.clone() + rhs; + *self = *self + rhs; } } impl SubAssign for SymbolicVar { fn sub_assign(&mut self, rhs: Self) { - *self = self.clone() - rhs; + *self = *self - rhs; } } impl MulAssign for SymbolicVar { fn mul_assign(&mut self, rhs: Self) { - *self = self.clone() * rhs; + *self = *self * rhs; } } @@ -1034,19 +1145,19 @@ impl Product for SymbolicFelt { impl AddAssign for SymbolicFelt { fn add_assign(&mut self, rhs: Self) { - *self = self.clone() + rhs; + *self = *self + rhs; } } impl SubAssign for SymbolicFelt { fn sub_assign(&mut self, rhs: Self) { - *self = self.clone() - rhs; + *self = *self - rhs; } } impl MulAssign for SymbolicFelt { fn mul_assign(&mut self, rhs: Self) { - *self = self.clone() * rhs; + *self = *self * rhs; } } @@ -1076,25 +1187,25 @@ impl> Default for SymbolicExt { impl, E: Any> AddAssign for SymbolicExt { fn add_assign(&mut self, rhs: E) { - *self = self.clone() + rhs; + *self = *self + rhs; } } impl, E: Any> SubAssign for SymbolicExt { fn sub_assign(&mut self, rhs: E) { - *self = self.clone() - rhs; + *self = *self - rhs; } } impl, E: Any> MulAssign for SymbolicExt { fn mul_assign(&mut self, rhs: E) { - *self = self.clone() * rhs; + *self = *self * rhs; } } impl, E: Any> DivAssign for SymbolicExt { fn div_assign(&mut self, rhs: E) { - *self = self.clone() / rhs; + *self = *self / rhs; } } @@ -1137,14 +1248,14 @@ impl, E: Any> ExtensionOperand for E { // *Saftey*: We know that E is a Symbolic Felt and we can transmute it to // SymbolicFelt but we need to clone the pointer. let value_ref = unsafe { mem::transmute::<&E, &SymbolicFelt>(&self) }; - let value = value_ref.clone(); + let value = *value_ref; ExtOperand::::SymFelt(value) } ty if ty == TypeId::of::>() => { // *Saftey*: We know that E is a SymbolicExt and we can transmute it to // SymbolicExt but we need to clone the pointer. let value_ref = unsafe { mem::transmute::<&E, &SymbolicExt>(&self) }; - let value = value_ref.clone(); + let value = *value_ref; ExtOperand::::Sym(value) } ty if ty == TypeId::of::>() => { @@ -1326,7 +1437,7 @@ impl Sub> for Usize { impl MulAssign> for SymbolicFelt { fn mul_assign(&mut self, rhs: Felt) { - *self = self.clone() * Self::from(rhs); + *self = *self * Self::from(rhs); } } diff --git a/crates/recursion/compiler/src/ir/types.rs b/crates/recursion/compiler/src/ir/types.rs index 2cbef531e5..7dd9036075 100644 --- a/crates/recursion/compiler/src/ir/types.rs +++ b/crates/recursion/compiler/src/ir/types.rs @@ -1,32 +1,47 @@ use alloc::format; -use core::marker::PhantomData; -use std::{collections::HashMap, hash::Hash}; -use p3_field::{AbstractField, ExtensionField, Field}; +use p3_field::{AbstractExtensionField, AbstractField, ExtensionField, Field}; use serde::{Deserialize, Serialize}; use super::{ - Builder, Config, DslIr, ExtConst, FromConstant, MemIndex, MemVariable, Ptr, SymbolicExt, - SymbolicFelt, SymbolicUsize, SymbolicVar, Variable, + Builder, Config, DslIr, ExtConst, ExtHandle, FeltHandle, FromConstant, MemIndex, MemVariable, + Ptr, SymbolicExt, SymbolicFelt, SymbolicUsize, SymbolicVar, VarHandle, Variable, }; /// A variable that represents a native field element. /// /// Used for counters, simple loops, etc. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub struct Var(pub u32, pub PhantomData); +pub struct Var { + pub idx: u32, + pub(crate) handle: *mut VarHandle, +} /// A variable that represents an emulated field element. /// /// Used to do field arithmetic for recursive verification. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub struct Felt(pub u32, pub PhantomData); +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct Felt { + pub idx: u32, + pub(crate) handle: *mut FeltHandle, +} /// A variable that represents an emulated extension field element. /// /// Used to do extension field arithmetic for recursive verification. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] -pub struct Ext(pub u32, pub PhantomData<(F, EF)>); +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct Ext { + pub idx: u32, + pub(crate) handle: *mut ExtHandle, +} + +unsafe impl Send for Var {} +unsafe impl Send for Ext {} +unsafe impl Send for Felt {} + +unsafe impl Sync for Var {} +unsafe impl Sync for Ext {} +unsafe impl Sync for Felt {} /// A variable that represents either a constant or variable counter. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] @@ -89,30 +104,30 @@ impl From for Usize { } impl Var { - pub const fn new(id: u32) -> Self { - Self(id, PhantomData) + pub const fn new(idx: u32, handle: *mut VarHandle) -> Self { + Self { idx, handle } } pub fn id(&self) -> String { - format!("var{}", self.0) + format!("var{}", self.idx) } pub fn loc(&self) -> String { - self.0.to_string() + self.idx.to_string() } } impl Felt { - pub const fn new(id: u32) -> Self { - Self(id, PhantomData) + pub const fn new(id: u32, handle: *mut FeltHandle) -> Self { + Self { idx: id, handle } } pub fn id(&self) -> String { - format!("felt{}", self.0) + format!("felt{}", self.idx) } pub fn loc(&self) -> String { - self.0.to_string() + self.idx.to_string() } pub fn inverse(&self) -> SymbolicFelt @@ -124,16 +139,16 @@ impl Felt { } impl Ext { - pub const fn new(id: u32) -> Self { - Self(id, PhantomData) + pub const fn new(id: u32, handle: *mut ExtHandle) -> Self { + Self { idx: id, handle } } pub fn id(&self) -> String { - format!("ext{}", self.0) + format!("ext{}", self.idx) } pub fn loc(&self) -> String { - self.0.to_string() + self.idx.to_string() } pub fn inverse(&self) -> SymbolicExt @@ -215,194 +230,25 @@ impl Variable for Usize { } } -impl Var { - fn assign_with_cache>( - &self, - src: SymbolicVar, - builder: &mut Builder, - cache: &mut HashMap, Self>, - ) { - if let Some(v) = cache.get(&src) { - builder.operations.push(DslIr::AddVI(*self, *v, C::N::zero())); - return; - } - match src { - SymbolicVar::Const(c, _) => { - builder.operations.push(DslIr::ImmV(*self, c)); - } - SymbolicVar::Val(v, _) => { - builder.operations.push(DslIr::AddVI(*self, v, C::N::zero())); - } - SymbolicVar::Add(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _)) => { - let sum = *lhs + *rhs; - builder.operations.push(DslIr::ImmV(*self, sum)); - } - (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _)) => { - builder.operations.push(DslIr::AddVI(*self, *rhs, *lhs)); - } - (SymbolicVar::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs.clone(), builder); - builder.push(DslIr::AddVI(*self, rhs_value, *lhs)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _)) => { - builder.push(DslIr::AddVI(*self, *lhs, *rhs)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _)) => { - builder.push(DslIr::AddV(*self, *lhs, *rhs)); - } - (SymbolicVar::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs.clone(), builder); - builder.push(DslIr::AddV(*self, *lhs, rhs_value)); - } - (lhs, SymbolicVar::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign(lhs.clone(), builder); - builder.push(DslIr::AddVI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicVar::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign(lhs.clone(), builder); - builder.push(DslIr::AddV(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::AddV(*self, lhs_value, rhs_value)); - } - }, - SymbolicVar::Mul(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _)) => { - let product = *lhs * *rhs; - builder.push(DslIr::ImmV(*self, product)); - } - (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _)) => { - builder.push(DslIr::MulVI(*self, *rhs, *lhs)); - } - (SymbolicVar::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulVI(*self, rhs_value, *lhs)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _)) => { - builder.push(DslIr::MulVI(*self, *lhs, *rhs)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _)) => { - builder.push(DslIr::MulV(*self, *lhs, *rhs)); - } - (SymbolicVar::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulV(*self, *lhs, rhs_value)); - } - (lhs, SymbolicVar::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::MulVI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicVar::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::MulV(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulV(*self, lhs_value, rhs_value)); - } - }, - SymbolicVar::Sub(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _)) => { - let difference = *lhs - *rhs; - builder.push(DslIr::ImmV(*self, difference)); - } - (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _)) => { - builder.push(DslIr::SubVIN(*self, *lhs, *rhs)); - } - (SymbolicVar::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubVIN(*self, *lhs, rhs_value)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _)) => { - builder.push(DslIr::SubVI(*self, *lhs, *rhs)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _)) => { - builder.push(DslIr::SubV(*self, *lhs, *rhs)); - } - (SymbolicVar::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubV(*self, *lhs, rhs_value)); - } - (lhs, SymbolicVar::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::SubVI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicVar::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::SubV(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubV(*self, lhs_value, rhs_value)); - } - }, - SymbolicVar::Neg(operand, _) => match &*operand { - SymbolicVar::Const(operand, _) => { - let negated = -*operand; - builder.push(DslIr::ImmV(*self, negated)); - } - SymbolicVar::Val(operand, _) => { - builder.push(DslIr::SubVIN(*self, C::N::zero(), *operand)); - } - operand => { - let operand_value = Self::uninit(builder); - operand_value.assign_with_cache(operand.clone(), builder, cache); - cache.insert(operand.clone(), operand_value); - builder.push(DslIr::SubVIN(*self, C::N::zero(), operand_value)); - } - }, - } - } -} - impl Variable for Var { type Expression = SymbolicVar; fn uninit(builder: &mut Builder) -> Self { - let var = Var(builder.variable_count, PhantomData); - builder.variable_count += 1; + let id = builder.variable_count(); + let var = Var::new(id, builder.var_handle.as_mut()); + builder.inner.get_mut().variable_count += 1; var } fn assign(&self, src: Self::Expression, builder: &mut Builder) { - self.assign_with_cache(src, builder, &mut HashMap::new()); + match src { + SymbolicVar::Const(src) => { + builder.push_op(DslIr::ImmV(*self, src)); + } + SymbolicVar::Val(src) => { + builder.push_op(DslIr::AddVI(*self, src, C::N::zero())); + } + } } fn assert_eq( @@ -414,35 +260,18 @@ impl Variable for Var { let rhs = rhs.into(); match (lhs, rhs) { - (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _)) => { + (SymbolicVar::Const(lhs), SymbolicVar::Const(rhs)) => { assert_eq!(lhs, rhs, "Assertion failed at compile time"); } - (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _)) => { + (SymbolicVar::Const(lhs), SymbolicVar::Val(rhs)) => { builder.trace_push(DslIr::AssertEqVI(rhs, lhs)); } - (SymbolicVar::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertEqVI(rhs_value, lhs)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _)) => { + (SymbolicVar::Val(lhs), SymbolicVar::Const(rhs)) => { builder.trace_push(DslIr::AssertEqVI(lhs, rhs)); } - (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _)) => { + (SymbolicVar::Val(lhs), SymbolicVar::Val(rhs)) => { builder.trace_push(DslIr::AssertEqV(lhs, rhs)); } - (SymbolicVar::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertEqV(lhs, rhs_value)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign(lhs, builder); - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertEqV(lhs_value, rhs_value)); - } } } @@ -455,35 +284,18 @@ impl Variable for Var { let rhs = rhs.into(); match (lhs, rhs) { - (SymbolicVar::Const(lhs, _), SymbolicVar::Const(rhs, _)) => { + (SymbolicVar::Const(lhs), SymbolicVar::Const(rhs)) => { assert_ne!(lhs, rhs, "Assertion failed at compile time"); } - (SymbolicVar::Const(lhs, _), SymbolicVar::Val(rhs, _)) => { + (SymbolicVar::Const(lhs), SymbolicVar::Val(rhs)) => { builder.trace_push(DslIr::AssertNeVI(rhs, lhs)); } - (SymbolicVar::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertNeVI(rhs_value, lhs)); - } - (SymbolicVar::Val(lhs, _), SymbolicVar::Const(rhs, _)) => { + (SymbolicVar::Val(lhs), SymbolicVar::Const(rhs)) => { builder.trace_push(DslIr::AssertNeVI(lhs, rhs)); } - (SymbolicVar::Val(lhs, _), SymbolicVar::Val(rhs, _)) => { + (SymbolicVar::Val(lhs), SymbolicVar::Val(rhs)) => { builder.trace_push(DslIr::AssertNeV(lhs, rhs)); } - (SymbolicVar::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertNeV(lhs, rhs_value)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign(lhs, builder); - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertNeV(lhs_value, rhs_value)); - } } } } @@ -494,240 +306,11 @@ impl MemVariable for Var { } fn load(&self, ptr: Ptr, index: MemIndex, builder: &mut Builder) { - builder.push(DslIr::LoadV(*self, ptr, index)); + builder.push_op(DslIr::LoadV(*self, ptr, index)); } fn store(&self, ptr: Ptr<::N>, index: MemIndex, builder: &mut Builder) { - builder.push(DslIr::StoreV(*self, ptr, index)); - } -} - -impl Felt { - fn assign_with_cache>( - &self, - src: SymbolicFelt, - builder: &mut Builder, - cache: &mut HashMap, Self>, - ) { - if let Some(v) = cache.get(&src) { - builder.operations.push(DslIr::AddFI(*self, *v, C::F::zero())); - return; - } - match src { - SymbolicFelt::Const(c, _) => { - builder.operations.push(DslIr::ImmF(*self, c)); - } - SymbolicFelt::Val(v, _) => { - builder.operations.push(DslIr::AddFI(*self, v, C::F::zero())); - } - SymbolicFelt::Add(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Const(rhs, _)) => { - let sum = *lhs + *rhs; - builder.operations.push(DslIr::ImmF(*self, sum)); - } - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.operations.push(DslIr::AddFI(*self, *rhs, *lhs)); - } - (SymbolicFelt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::AddFI(*self, rhs_value, *lhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Const(rhs, _)) => { - builder.push(DslIr::AddFI(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.push(DslIr::AddF(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::AddF(*self, *lhs, rhs_value)); - } - (lhs, SymbolicFelt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::AddFI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicFelt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::AddF(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::AddF(*self, lhs_value, rhs_value)); - } - }, - SymbolicFelt::Mul(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Const(rhs, _)) => { - let product = *lhs * *rhs; - builder.push(DslIr::ImmF(*self, product)); - } - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.push(DslIr::MulFI(*self, *rhs, *lhs)); - } - (SymbolicFelt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulFI(*self, rhs_value, *lhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Const(rhs, _)) => { - builder.push(DslIr::MulFI(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.push(DslIr::MulF(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulF(*self, *lhs, rhs_value)); - } - (lhs, SymbolicFelt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::MulFI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicFelt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::MulF(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulF(*self, lhs_value, rhs_value)); - } - }, - SymbolicFelt::Sub(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Const(rhs, _)) => { - let difference = *lhs - *rhs; - builder.push(DslIr::ImmF(*self, difference)); - } - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.push(DslIr::SubFIN(*self, *lhs, *rhs)); - } - (SymbolicFelt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubFIN(*self, *lhs, rhs_value)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Const(rhs, _)) => { - builder.push(DslIr::SubFI(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.push(DslIr::SubF(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubF(*self, *lhs, rhs_value)); - } - (lhs, SymbolicFelt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::SubFI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicFelt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::SubF(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubF(*self, lhs_value, rhs_value)); - } - }, - SymbolicFelt::Div(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Const(rhs, _)) => { - let quotient = *lhs / *rhs; - builder.push(DslIr::ImmF(*self, quotient)); - } - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.push(DslIr::DivFIN(*self, *lhs, *rhs)); - } - (SymbolicFelt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::DivFIN(*self, *lhs, rhs_value)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Const(rhs, _)) => { - builder.push(DslIr::DivFI(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Val(rhs, _)) => { - builder.push(DslIr::DivF(*self, *lhs, *rhs)); - } - (SymbolicFelt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::DivF(*self, *lhs, rhs_value)); - } - (lhs, SymbolicFelt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::DivFI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicFelt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::DivF(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_cache(lhs.clone(), builder, cache); - cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, cache); - cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::DivF(*self, lhs_value, rhs_value)); - } - }, - SymbolicFelt::Neg(operand, _) => match &*operand { - SymbolicFelt::Const(operand, _) => { - let negated = -*operand; - builder.push(DslIr::ImmF(*self, negated)); - } - SymbolicFelt::Val(operand, _) => { - builder.push(DslIr::SubFIN(*self, C::F::zero(), *operand)); - } - operand => { - let operand_value = Self::uninit(builder); - operand_value.assign_with_cache(operand.clone(), builder, cache); - cache.insert(operand.clone(), operand_value); - builder.push(DslIr::SubFIN(*self, C::F::zero(), operand_value)); - } - }, - } + builder.push_op(DslIr::StoreV(*self, ptr, index)); } } @@ -735,13 +318,21 @@ impl Variable for Felt { type Expression = SymbolicFelt; fn uninit(builder: &mut Builder) -> Self { - let felt = Felt(builder.variable_count, PhantomData); - builder.variable_count += 1; + let idx = builder.variable_count(); + let felt = Felt::::new(idx, builder.felt_handle.as_mut()); + builder.inner.get_mut().variable_count += 1; felt } fn assign(&self, src: Self::Expression, builder: &mut Builder) { - self.assign_with_cache(src, builder, &mut HashMap::new()); + match src { + SymbolicFelt::Const(src) => { + builder.push_op(DslIr::ImmF(*self, src)); + } + SymbolicFelt::Val(src) => { + builder.push_op(DslIr::AddFI(*self, src, C::F::zero())); + } + } } fn assert_eq( @@ -753,35 +344,18 @@ impl Variable for Felt { let rhs = rhs.into(); match (lhs, rhs) { - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Const(rhs, _)) => { + (SymbolicFelt::Const(lhs), SymbolicFelt::Const(rhs)) => { assert_eq!(lhs, rhs, "Assertion failed at compile time"); } - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Val(rhs, _)) => { + (SymbolicFelt::Const(lhs), SymbolicFelt::Val(rhs)) => { builder.trace_push(DslIr::AssertEqFI(rhs, lhs)); } - (SymbolicFelt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertEqFI(rhs_value, lhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Const(rhs, _)) => { + (SymbolicFelt::Val(lhs), SymbolicFelt::Const(rhs)) => { builder.trace_push(DslIr::AssertEqFI(lhs, rhs)); } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Val(rhs, _)) => { + (SymbolicFelt::Val(lhs), SymbolicFelt::Val(rhs)) => { builder.trace_push(DslIr::AssertEqF(lhs, rhs)); } - (SymbolicFelt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertEqF(lhs, rhs_value)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign(lhs, builder); - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertEqF(lhs_value, rhs_value)); - } } } @@ -794,35 +368,18 @@ impl Variable for Felt { let rhs = rhs.into(); match (lhs, rhs) { - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Const(rhs, _)) => { + (SymbolicFelt::Const(lhs), SymbolicFelt::Const(rhs)) => { assert_ne!(lhs, rhs, "Assertion failed at compile time"); } - (SymbolicFelt::Const(lhs, _), SymbolicFelt::Val(rhs, _)) => { + (SymbolicFelt::Const(lhs), SymbolicFelt::Val(rhs)) => { builder.trace_push(DslIr::AssertNeFI(rhs, lhs)); } - (SymbolicFelt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertNeFI(rhs_value, lhs)); - } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Const(rhs, _)) => { + (SymbolicFelt::Val(lhs), SymbolicFelt::Const(rhs)) => { builder.trace_push(DslIr::AssertNeFI(lhs, rhs)); } - (SymbolicFelt::Val(lhs, _), SymbolicFelt::Val(rhs, _)) => { + (SymbolicFelt::Val(lhs), SymbolicFelt::Val(rhs)) => { builder.trace_push(DslIr::AssertNeF(lhs, rhs)); } - (SymbolicFelt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertNeF(lhs, rhs_value)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign(lhs, builder); - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs, builder); - builder.trace_push(DslIr::AssertNeF(lhs_value, rhs_value)); - } } } } @@ -833,285 +390,11 @@ impl MemVariable for Felt { } fn load(&self, ptr: Ptr, index: MemIndex, builder: &mut Builder) { - builder.push(DslIr::LoadF(*self, ptr, index)); + builder.push_op(DslIr::LoadF(*self, ptr, index)); } fn store(&self, ptr: Ptr<::N>, index: MemIndex, builder: &mut Builder) { - builder.push(DslIr::StoreF(*self, ptr, index)); - } -} - -impl> Ext { - fn assign_with_caches>( - &self, - src: SymbolicExt, - builder: &mut Builder, - ext_cache: &mut HashMap, Ext>, - base_cache: &mut HashMap, Felt>, - ) { - if let Some(v) = ext_cache.get(&src) { - builder.operations.push(DslIr::AddEI(*self, *v, C::EF::zero())); - return; - } - match src { - SymbolicExt::Base(v, _) => match &*v { - SymbolicFelt::Const(c, _) => { - builder.operations.push(DslIr::ImmE(*self, C::EF::from_base(*c))); - } - SymbolicFelt::Val(v, _) => { - builder.operations.push(DslIr::AddEFFI(*self, *v, C::EF::zero())); - } - v => { - let v_value = Felt::uninit(builder); - v_value.assign(v.clone(), builder); - builder.push(DslIr::AddEFFI(*self, v_value, C::EF::zero())); - } - }, - SymbolicExt::Const(c, _) => { - builder.operations.push(DslIr::ImmE(*self, c)); - } - SymbolicExt::Val(v, _) => { - builder.operations.push(DslIr::AddEI(*self, v, C::EF::zero())); - } - SymbolicExt::Add(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicExt::Const(lhs, _), SymbolicExt::Const(rhs, _)) => { - let sum = *lhs + *rhs; - builder.operations.push(DslIr::ImmE(*self, sum)); - } - (SymbolicExt::Const(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.operations.push(DslIr::AddEI(*self, *rhs, *lhs)); - } - (SymbolicExt::Const(lhs, _), SymbolicExt::Base(rhs, _)) => match rhs.as_ref() { - SymbolicFelt::Const(rhs, _) => { - let sum = *lhs + C::EF::from_base(*rhs); - builder.operations.push(DslIr::ImmE(*self, sum)); - } - SymbolicFelt::Val(rhs, _) => { - builder.operations.push(DslIr::AddEFFI(*self, *rhs, *lhs)); - } - rhs => { - let rhs_value: Felt<_> = Felt::uninit(builder); - rhs_value.assign_with_cache(rhs.clone(), builder, base_cache); - base_cache.insert(rhs.clone(), rhs_value); - builder.operations.push(DslIr::AddEFFI(*self, rhs_value, *lhs)); - } - }, - (SymbolicExt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::AddEI(*self, rhs_value, *lhs)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Const(rhs, _)) => { - builder.push(DslIr::AddEI(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Base(rhs, _)) => match rhs.as_ref() { - SymbolicFelt::Const(rhs, _) => { - builder.push(DslIr::AddEFI(*self, *lhs, *rhs)); - } - SymbolicFelt::Val(rhs, _) => { - builder.push(DslIr::AddEF(*self, *lhs, *rhs)); - } - rhs => { - let rhs = builder.eval(rhs.clone()); - builder.push(DslIr::AddEF(*self, *lhs, rhs)); - } - }, - (SymbolicExt::Val(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.push(DslIr::AddE(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::AddE(*self, *lhs, rhs_value)); - } - (lhs, SymbolicExt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::AddEI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicExt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::AddE(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::AddE(*self, lhs_value, rhs_value)); - } - }, - SymbolicExt::Mul(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicExt::Const(lhs, _), SymbolicExt::Const(rhs, _)) => { - let product = *lhs * *rhs; - builder.push(DslIr::ImmE(*self, product)); - } - (SymbolicExt::Const(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.push(DslIr::MulEI(*self, *rhs, *lhs)); - } - (SymbolicExt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulEI(*self, rhs_value, *lhs)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Const(rhs, _)) => { - builder.push(DslIr::MulEI(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.push(DslIr::MulE(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulE(*self, *lhs, rhs_value)); - } - (lhs, SymbolicExt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::MulEI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicExt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::MulE(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::MulE(*self, lhs_value, rhs_value)); - } - }, - SymbolicExt::Sub(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicExt::Const(lhs, _), SymbolicExt::Const(rhs, _)) => { - let difference = *lhs - *rhs; - builder.push(DslIr::ImmE(*self, difference)); - } - (SymbolicExt::Const(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.push(DslIr::SubEIN(*self, *lhs, *rhs)); - } - (SymbolicExt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubEIN(*self, *lhs, rhs_value)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Const(rhs, _)) => { - builder.push(DslIr::SubEI(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.push(DslIr::SubE(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::SubE(*self, *lhs, rhs_value)); - } - (lhs, SymbolicExt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::SubEI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicExt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::SubE(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign(rhs.clone(), builder); - builder.push(DslIr::SubE(*self, lhs_value, rhs_value)); - } - }, - SymbolicExt::Div(lhs, rhs, _) => match (&*lhs, &*rhs) { - (SymbolicExt::Const(lhs, _), SymbolicExt::Const(rhs, _)) => { - let quotient = *lhs / *rhs; - builder.push(DslIr::ImmE(*self, quotient)); - } - (SymbolicExt::Const(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.push(DslIr::DivEIN(*self, *lhs, *rhs)); - } - (SymbolicExt::Const(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::DivEIN(*self, *lhs, rhs_value)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Const(rhs, _)) => { - builder.push(DslIr::DivEI(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), SymbolicExt::Val(rhs, _)) => { - builder.push(DslIr::DivE(*self, *lhs, *rhs)); - } - (SymbolicExt::Val(lhs, _), rhs) => { - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::DivE(*self, *lhs, rhs_value)); - } - (lhs, SymbolicExt::Const(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::DivEI(*self, lhs_value, *rhs)); - } - (lhs, SymbolicExt::Val(rhs, _)) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - builder.push(DslIr::DivE(*self, lhs_value, *rhs)); - } - (lhs, rhs) => { - let lhs_value = Self::uninit(builder); - lhs_value.assign_with_caches(lhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(lhs.clone(), lhs_value); - let rhs_value = Self::uninit(builder); - rhs_value.assign_with_caches(rhs.clone(), builder, ext_cache, base_cache); - ext_cache.insert(rhs.clone(), rhs_value); - builder.push(DslIr::DivE(*self, lhs_value, rhs_value)); - } - }, - SymbolicExt::Neg(operand, _) => match &*operand { - SymbolicExt::Const(operand, _) => { - let negated = -*operand; - builder.push(DslIr::ImmE(*self, negated)); - } - SymbolicExt::Val(operand, _) => { - builder.push(DslIr::NegE(*self, *operand)); - } - operand => { - let operand_value = Self::uninit(builder); - operand_value.assign_with_caches( - operand.clone(), - builder, - ext_cache, - base_cache, - ); - ext_cache.insert(operand.clone(), operand_value); - builder.push(DslIr::NegE(*self, operand_value)); - } - }, - } + builder.push_op(DslIr::StoreF(*self, ptr, index)); } } @@ -1119,13 +402,29 @@ impl Variable for Ext { type Expression = SymbolicExt; fn uninit(builder: &mut Builder) -> Self { - let ext = Ext(builder.variable_count, PhantomData); - builder.variable_count += 1; + let idx = builder.variable_count(); + let ext = Ext::::new(idx, builder.ext_handle.as_mut()); + builder.inner.get_mut().variable_count += 1; ext } fn assign(&self, src: Self::Expression, builder: &mut Builder) { - self.assign_with_caches(src, builder, &mut HashMap::new(), &mut HashMap::new()); + match src { + SymbolicExt::Const(src) => { + builder.push_op(DslIr::ImmE(*self, src)); + } + SymbolicExt::Base(src) => match src { + SymbolicFelt::Const(src) => { + builder.push_op(DslIr::ImmE(*self, C::EF::from_base(src))); + } + SymbolicFelt::Val(src) => { + builder.push_op(DslIr::AddEFFI(*self, src, C::EF::zero())); + } + }, + SymbolicExt::Val(src) => { + builder.push_op(DslIr::AddEI(*self, src, C::EF::zero())); + } + } } fn assert_eq( @@ -1137,24 +436,24 @@ impl Variable for Ext { let rhs = rhs.into(); match (lhs, rhs) { - (SymbolicExt::Const(lhs, _), SymbolicExt::Const(rhs, _)) => { + (SymbolicExt::Const(lhs), SymbolicExt::Const(rhs)) => { assert_eq!(lhs, rhs, "Assertion failed at compile time"); } - (SymbolicExt::Const(lhs, _), SymbolicExt::Val(rhs, _)) => { + (SymbolicExt::Const(lhs), SymbolicExt::Val(rhs)) => { builder.trace_push(DslIr::AssertEqEI(rhs, lhs)); } - (SymbolicExt::Const(lhs, _), rhs) => { + (SymbolicExt::Const(lhs), rhs) => { let rhs_value = Self::uninit(builder); rhs_value.assign(rhs, builder); builder.trace_push(DslIr::AssertEqEI(rhs_value, lhs)); } - (SymbolicExt::Val(lhs, _), SymbolicExt::Const(rhs, _)) => { + (SymbolicExt::Val(lhs), SymbolicExt::Const(rhs)) => { builder.trace_push(DslIr::AssertEqEI(lhs, rhs)); } - (SymbolicExt::Val(lhs, _), SymbolicExt::Val(rhs, _)) => { + (SymbolicExt::Val(lhs), SymbolicExt::Val(rhs)) => { builder.trace_push(DslIr::AssertEqE(lhs, rhs)); } - (SymbolicExt::Val(lhs, _), rhs) => { + (SymbolicExt::Val(lhs), rhs) => { let rhs_value = Self::uninit(builder); rhs_value.assign(rhs, builder); builder.trace_push(DslIr::AssertEqE(lhs, rhs_value)); @@ -1178,24 +477,24 @@ impl Variable for Ext { let rhs = rhs.into(); match (lhs, rhs) { - (SymbolicExt::Const(lhs, _), SymbolicExt::Const(rhs, _)) => { + (SymbolicExt::Const(lhs), SymbolicExt::Const(rhs)) => { assert_ne!(lhs, rhs, "Assertion failed at compile time"); } - (SymbolicExt::Const(lhs, _), SymbolicExt::Val(rhs, _)) => { + (SymbolicExt::Const(lhs), SymbolicExt::Val(rhs)) => { builder.trace_push(DslIr::AssertNeEI(rhs, lhs)); } - (SymbolicExt::Const(lhs, _), rhs) => { + (SymbolicExt::Const(lhs), rhs) => { let rhs_value = Self::uninit(builder); rhs_value.assign(rhs, builder); builder.trace_push(DslIr::AssertNeEI(rhs_value, lhs)); } - (SymbolicExt::Val(lhs, _), SymbolicExt::Const(rhs, _)) => { + (SymbolicExt::Val(lhs), SymbolicExt::Const(rhs)) => { builder.trace_push(DslIr::AssertNeEI(lhs, rhs)); } - (SymbolicExt::Val(lhs, _), SymbolicExt::Val(rhs, _)) => { + (SymbolicExt::Val(lhs), SymbolicExt::Val(rhs)) => { builder.trace_push(DslIr::AssertNeE(lhs, rhs)); } - (SymbolicExt::Val(lhs, _), rhs) => { + (SymbolicExt::Val(lhs), rhs) => { let rhs_value = Self::uninit(builder); rhs_value.assign(rhs, builder); builder.trace_push(DslIr::AssertNeE(lhs, rhs_value)); @@ -1217,11 +516,11 @@ impl MemVariable for Ext { } fn load(&self, ptr: Ptr, index: MemIndex, builder: &mut Builder) { - builder.push(DslIr::LoadE(*self, ptr, index)); + builder.push_op(DslIr::LoadE(*self, ptr, index)); } fn store(&self, ptr: Ptr<::N>, index: MemIndex, builder: &mut Builder) { - builder.push(DslIr::StoreE(*self, ptr, index)); + builder.push_op(DslIr::StoreE(*self, ptr, index)); } } diff --git a/crates/recursion/compiler/src/ir/utils.rs b/crates/recursion/compiler/src/ir/utils.rs index 0276d6eac5..f327418be9 100644 --- a/crates/recursion/compiler/src/ir/utils.rs +++ b/crates/recursion/compiler/src/ir/utils.rs @@ -14,14 +14,14 @@ impl Builder { /// Select a variable based on a condition. pub fn select_v(&mut self, cond: Var, a: Var, b: Var) -> Var { let c = self.uninit(); - self.operations.push(DslIr::CircuitSelectV(cond, a, b, c)); + self.push_op(DslIr::CircuitSelectV(cond, a, b, c)); c } /// Select a felt based on a condition. pub fn select_f(&mut self, cond: Var, a: Felt, b: Felt) -> Felt { let c = self.uninit(); - self.operations.push(DslIr::CircuitSelectF(cond, a, b, c)); + self.push_op(DslIr::CircuitSelectF(cond, a, b, c)); c } @@ -33,7 +33,7 @@ impl Builder { b: Ext, ) -> Ext { let c = self.uninit(); - self.operations.push(DslIr::CircuitSelectE(cond, a, b, c)); + self.push_op(DslIr::CircuitSelectE(cond, a, b, c)); c } @@ -157,7 +157,7 @@ impl Builder { // Call the DslIR instruction ExpReverseBitsLen, which modifies the memory pointed to by // `x_copy_arr_ptr`. - self.push(DslIr::ExpReverseBitsLen(x_copy_arr_ptr, ptr.address, bit_len_var)); + self.push_op(DslIr::ExpReverseBitsLen(x_copy_arr_ptr, ptr.address, bit_len_var)); // Return the value stored at the address pointed to by `x_copy_arr_ptr`. self.get(&x_copy_arr, 0) @@ -227,14 +227,14 @@ impl Builder { pub fn felts2ext(&mut self, felts: &[Felt]) -> Ext { assert_eq!(felts.len(), 4); let out: Ext = self.uninit(); - self.push(DslIr::CircuitFelts2Ext(felts.try_into().unwrap(), out)); + self.push_op(DslIr::CircuitFelts2Ext(felts.try_into().unwrap(), out)); out } /// Converts an ext to a slice of felts. pub fn ext2felt(&mut self, value: Ext) -> Array> { let result = self.dyn_array(4); - self.operations.push(DslIr::HintExt2Felt(result.clone(), value)); + self.push_op(DslIr::HintExt2Felt(result.clone(), value)); // Verify that the decomposed extension element is correct. let mut reconstructed_ext: Ext = self.constant(C::EF::zero()); @@ -255,108 +255,7 @@ impl Builder { let b = self.uninit(); let c = self.uninit(); let d = self.uninit(); - self.operations.push(DslIr::CircuitExt2Felt([a, b, c, d], value)); + self.push_op(DslIr::CircuitExt2Felt([a, b, c, d], value)); [a, b, c, d] } } - -#[cfg(test)] -mod tests { - use p3_field::PrimeField32; - use p3_util::reverse_bits_len; - use rand::{thread_rng, Rng}; - use sp1_recursion_core::runtime::{Runtime, NUM_BITS}; - - use p3_field::AbstractField; - use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkGenericConfig}; - - use crate::{ - asm::AsmBuilder, - ir::{Felt, Var}, - }; - - #[test] - fn test_num2bits() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - - let mut rng = thread_rng(); - let config = SC::default(); - - // Initialize a builder. - let mut builder = AsmBuilder::::default(); - - // Get a random var with `NUM_BITS` bits. - let num_val: F = rng.gen(); - - // Materialize the number as a var - let num: Var<_> = builder.eval(num_val); - // Materialize the number as a felt - let num_felt: Felt<_> = builder.eval(num_val); - - // Get the bits. - let bits = builder.num2bits_v(num); - let bits_felt = builder.num2bits_f(num_felt); - - // Compare the expected bits with the actual bits. - for i in 0..NUM_BITS { - // Get the i-th bit of the number. - let expected_bit = F::from_canonical_u32((num_val.as_canonical_u32() >> i) & 1); - // Compare the expected bit of the var with the actual bit. - let bit = builder.get(&bits, i); - builder.assert_var_eq(bit, expected_bit); - // Compare the expected bit of the felt with the actual bit. - let bit_felt = builder.get(&bits_felt, i); - builder.assert_var_eq(bit_felt, expected_bit); - } - - // Test the conversion back to a number. - let num_back = builder.bits2num_v(&bits); - builder.assert_var_eq(num_back, num); - let num_felt_back = builder.bits2num_f(&bits_felt); - builder.assert_felt_eq(num_felt_back, num_felt); - - let program = builder.compile_program(); - - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); - } - - #[test] - fn test_reverse_bits_len() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - - let mut rng = thread_rng(); - let config = SC::default(); - - // Initialize a builder. - let mut builder = AsmBuilder::::default(); - - // Get a random var with `NUM_BITS` bits. - let x_val: F = rng.gen(); - - // Materialize the number as a var - let x: Var<_> = builder.eval(x_val); - let x_bits = builder.num2bits_v(x); - - for i in 1..NUM_BITS { - // Get the reference value. - let expected_value = reverse_bits_len(x_val.as_canonical_u32() as usize, i); - let value_bits = builder.reverse_bits_len(&x_bits, i); - let value = builder.bits2num_v(&value_bits); - builder.assert_usize_eq(value, expected_value); - let var_i: Var<_> = builder.eval(F::from_canonical_usize(i)); - let value_var_bits = builder.reverse_bits_len(&x_bits, var_i); - let value_var = builder.bits2num_v(&value_var_bits); - builder.assert_usize_eq(value_var, expected_value); - } - - let program = builder.compile_program(); - - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); - } -} diff --git a/crates/recursion/compiler/tests/arithmetic.rs b/crates/recursion/compiler/tests/arithmetic.rs index d218854019..252f6db2a2 100644 --- a/crates/recursion/compiler/tests/arithmetic.rs +++ b/crates/recursion/compiler/tests/arithmetic.rs @@ -1,6 +1,6 @@ use rand::{thread_rng, Rng}; -use p3_field::AbstractField; +use p3_field::{AbstractExtensionField, AbstractField}; use sp1_recursion_compiler::{ asm::AsmBuilder, ir::{Ext, ExtConst, Felt, SymbolicExt, Var}, @@ -67,12 +67,17 @@ fn test_compiler_arithmetic() { for _ in 0..10 { a_expr += b_ext * a_val + EF::one(); a_val += b_ext_val * a_val + EF::one(); - builder.assert_ext_eq(a_expr.clone(), a_val.cons()) + builder.assert_ext_eq(a_expr, a_val.cons()) } builder.assert_ext_eq(a_ext * b_ext, (a_ext_val * b_ext_val).cons()); builder.assert_ext_eq(a_ext - b_ext, (a_ext_val - b_ext_val).cons()); builder.assert_ext_eq(a_ext / b_ext, (a_ext_val / b_ext_val).cons()); builder.assert_ext_eq(-a_ext, (-a_ext_val).cons()); + let division_value = rng.gen::(); + builder.assert_ext_eq( + SymbolicExt::from(a) / division_value, + (EF::from_base(a_felt_val) / division_value).cons(), + ); } let program = builder.compile_program(); diff --git a/crates/recursion/compiler/tests/array.rs b/crates/recursion/compiler/tests/array.rs deleted file mode 100644 index 71dedb5485..0000000000 --- a/crates/recursion/compiler/tests/array.rs +++ /dev/null @@ -1,119 +0,0 @@ -use rand::{thread_rng, Rng}; - -use p3_field::AbstractField; -use sp1_recursion_compiler::{ - asm::AsmBuilder, - ir::{Array, Builder, Config, Ext, ExtConst, Felt, MemIndex, MemVariable, Ptr, Var, Variable}, -}; -use sp1_recursion_core::runtime::Runtime; -use sp1_recursion_derive::DslVariable; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkGenericConfig}; - -#[derive(DslVariable, Clone, Debug)] -pub struct Point { - x: Var, - y: Felt, - z: Ext, -} - -#[test] -fn test_compiler_array() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - - // Sum all the values of an array. - let len: usize = 1000; - let mut rng = thread_rng(); - - let mut static_array = builder.array::>(len); - - // Put values statically - for i in 0..len { - builder.set(&mut static_array, i, F::one()); - } - // Assert values set. - for i in 0..len { - let value = builder.get(&static_array, i); - builder.assert_var_eq(value, F::one()); - } - - let dyn_len: Var<_> = builder.eval(F::from_canonical_usize(len)); - let mut var_array = builder.array::>(dyn_len); - let mut felt_array = builder.array::>(dyn_len); - let mut ext_array = builder.array::>(dyn_len); - // Put values statically - let var_vals = (0..len).map(|_| rng.gen::()).collect::>(); - let felt_vals = (0..len).map(|_| rng.gen::()).collect::>(); - let ext_vals = (0..len).map(|_| rng.gen::()).collect::>(); - for i in 0..len { - builder.set(&mut var_array, i, var_vals[i]); - builder.set(&mut felt_array, i, felt_vals[i]); - builder.set(&mut ext_array, i, ext_vals[i].cons()); - } - // Assert values set. - for i in 0..len { - let var_value = builder.get(&var_array, i); - builder.assert_var_eq(var_value, var_vals[i]); - let felt_value = builder.get(&felt_array, i); - builder.assert_felt_eq(felt_value, felt_vals[i]); - let ext_value = builder.get(&ext_array, i); - builder.assert_ext_eq(ext_value, ext_vals[i].cons()); - } - - // Put values dynamically - builder.range(0, dyn_len).for_each(|i, builder| { - builder.set(&mut var_array, i, i * F::two()); - builder.set(&mut felt_array, i, F::from_canonical_u32(3)); - builder.set(&mut ext_array, i, (EF::from_canonical_u32(4)).cons()); - }); - - // Assert values set. - builder.range(0, dyn_len).for_each(|i, builder| { - let var_value = builder.get(&var_array, i); - builder.assert_var_eq(var_value, i * F::two()); - let felt_value = builder.get(&felt_array, i); - builder.assert_felt_eq(felt_value, F::from_canonical_u32(3)); - let ext_value = builder.get(&ext_array, i); - builder.assert_ext_eq(ext_value, EF::from_canonical_u32(4).cons()); - }); - - // Test the derived macro and mixed size allocations. - let mut point_array = builder.dyn_array::>(len); - - builder.range(0, dyn_len).for_each(|i, builder| { - let x: Var<_> = builder.eval(F::two()); - let y: Felt<_> = builder.eval(F::one()); - let z: Ext<_, _> = builder.eval(EF::one().cons()); - let point = Point { x, y, z }; - builder.set(&mut point_array, i, point); - }); - - builder.range(0, dyn_len).for_each(|i, builder| { - let point = builder.get(&point_array, i); - builder.assert_var_eq(point.x, F::two()); - builder.assert_felt_eq(point.y, F::one()); - builder.assert_ext_eq(point.z, EF::one().cons()); - }); - - let mut array = builder.dyn_array::>>(len); - - builder.range(0, array.len()).for_each(|i, builder| { - builder.set(&mut array, i, var_array.clone()); - }); - - builder.range(0, array.len()).for_each(|i, builder| { - let point_array_back = builder.get(&array, i); - builder.assert_eq::>(point_array_back, var_array.clone()); - }); - - let code = builder.compile_asm(); - println!("{code}"); - - let program = code.machine_code(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} diff --git a/crates/recursion/compiler/tests/conditionals.rs b/crates/recursion/compiler/tests/conditionals.rs deleted file mode 100644 index 41827a42ed..0000000000 --- a/crates/recursion/compiler/tests/conditionals.rs +++ /dev/null @@ -1,87 +0,0 @@ -use p3_baby_bear::BabyBear; -use p3_field::{extension::BinomialExtensionField, AbstractField}; -use sp1_recursion_compiler::{asm::AsmBuilder, ir::Var}; -use sp1_recursion_core::runtime::Runtime; -use sp1_stark::baby_bear_poseidon2::BabyBearPoseidon2; - -#[test] -fn test_compiler_conditionals() { - type SC = BabyBearPoseidon2; - type F = BabyBear; - type EF = BinomialExtensionField; - let mut builder = AsmBuilder::::default(); - - let zero: Var<_> = builder.eval(F::zero()); - let one: Var<_> = builder.eval(F::one()); - let two: Var<_> = builder.eval(F::two()); - let three: Var<_> = builder.eval(F::from_canonical_u32(3)); - let four: Var<_> = builder.eval(F::from_canonical_u32(4)); - - let c: Var<_> = builder.eval(F::zero()); - builder.if_eq(zero, zero).then(|builder| { - builder.if_eq(one, one).then(|builder| { - builder.if_eq(two, two).then(|builder| { - builder.if_eq(three, three).then(|builder| { - builder.if_eq(four, four).then(|builder| builder.assign(c, F::one())) - }) - }) - }) - }); - builder.assert_var_eq(c, F::one()); - - let c: Var<_> = builder.eval(F::zero()); - builder.if_eq(zero, one).then_or_else( - |builder| { - builder - .if_eq(one, one) - .then(|builder| builder.if_eq(two, two).then(|builder| builder.assign(c, F::one()))) - }, - |builder| { - builder.if_ne(three, four).then_or_else(|_| {}, |builder| builder.assign(c, F::zero())) - }, - ); - builder.assert_var_eq(c, F::zero()); - - let code = builder.compile_asm(); - println!("{}", code); - // let program = builder.compile(); - let program = code.machine_code(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} - -#[test] -fn test_compiler_conditionals_v2() { - type SC = BabyBearPoseidon2; - type F = BabyBear; - type EF = BinomialExtensionField; - let mut builder = AsmBuilder::::default(); - - let zero: Var<_> = builder.eval(F::zero()); - let one: Var<_> = builder.eval(F::one()); - let two: Var<_> = builder.eval(F::two()); - let three: Var<_> = builder.eval(F::from_canonical_u32(3)); - let four: Var<_> = builder.eval(F::from_canonical_u32(4)); - - let c: Var<_> = builder.eval(F::zero()); - builder.if_eq(zero, zero).then(|builder| { - builder.if_eq(one, one).then(|builder| { - builder.if_eq(two, two).then(|builder| { - builder.if_eq(three, three).then(|builder| { - builder.if_eq(four, four).then(|builder| builder.assign(c, F::one())) - }) - }) - }) - }); - - let code = builder.compile_asm(); - println!("{}", code); - // let program = builder.compile(); - let program = code.machine_code(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} diff --git a/crates/recursion/compiler/tests/for_loops.rs b/crates/recursion/compiler/tests/for_loops.rs deleted file mode 100644 index b57fe3e43c..0000000000 --- a/crates/recursion/compiler/tests/for_loops.rs +++ /dev/null @@ -1,219 +0,0 @@ -use p3_baby_bear::BabyBear; -use p3_field::AbstractField; -use sp1_recursion_compiler::{ - asm::{AsmBuilder, AsmConfig}, - ir::{Array, SymbolicVar, Var}, -}; -use sp1_recursion_core::runtime::Runtime; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkGenericConfig}; - -#[test] -fn test_compiler_for_loops() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - - let n_val = BabyBear::from_canonical_u32(10); - let m_val = BabyBear::from_canonical_u32(5); - - let zero: Var<_> = builder.eval(F::zero()); - let n: Var<_> = builder.eval(n_val); - let m: Var<_> = builder.eval(m_val); - - let i_counter: Var<_> = builder.eval(F::zero()); - let total_counter: Var<_> = builder.eval(F::zero()); - builder.range(zero, n).for_each(|_, builder| { - builder.assign(i_counter, i_counter + F::one()); - - let j_counter: Var<_> = builder.eval(F::zero()); - builder.range(zero, m).for_each(|_, builder| { - builder.assign(total_counter, total_counter + F::one()); - builder.assign(j_counter, j_counter + F::one()); - }); - // Assert that the inner loop ran m times, in two different ways. - builder.assert_var_eq(j_counter, m_val); - builder.assert_var_eq(j_counter, m); - }); - // Assert that the outer loop ran n times, in two different ways. - builder.assert_var_eq(i_counter, n_val); - builder.assert_var_eq(i_counter, n); - // Assert that the total counter is equal to n * m, in two ways. - builder.assert_var_eq(total_counter, n_val * m_val); - builder.assert_var_eq(total_counter, n * m); - - let program = builder.compile_program(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} - -#[test] -fn test_compiler_nested_array_loop() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - type C = AsmConfig; - - let mut array: Array>> = builder.array(100); - - builder.range(0, array.len()).for_each(|i, builder| { - let mut inner_array = builder.array::>(10); - builder.range(0, inner_array.len()).for_each(|j, builder| { - builder.set(&mut inner_array, j, i + j); - }); - builder.set(&mut array, i, inner_array); - }); - - // Test that the array is correctly initialized. - builder.range(0, array.len()).for_each(|i, builder| { - let inner_array = builder.get(&array, i); - builder.range(0, inner_array.len()).for_each(|j, builder| { - let val = builder.get(&inner_array, j); - builder.assert_var_eq(val, i + j); - }); - }); - - let code = builder.compile_asm(); - - println!("{}", code); - - let program = code.machine_code(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} - -#[test] -fn test_compiler_break() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - type C = AsmConfig; - - let len = 100; - let break_len = F::from_canonical_usize(10); - - let mut array: Array> = builder.array(len); - - builder.range(0, array.len()).for_each(|i, builder| { - builder.set(&mut array, i, i); - - builder.if_eq(i, break_len).then(|builder| builder.break_loop()); - }); - - // Test that the array is correctly initialized. - - builder.range(0, array.len()).for_each(|i, builder| { - let value = builder.get(&array, i); - builder.if_eq(i, break_len + F::one()).then_or_else( - |builder| builder.assert_var_eq(value, i), - |builder| { - builder.assert_var_eq(value, F::zero()); - builder.break_loop(); - }, - ); - }); - - let is_break: Var<_> = builder.eval(F::one()); - builder.range(0, array.len()).for_each(|i, builder| { - let exp_value: Var<_> = builder.eval(i * is_break); - let value = builder.get(&array, i); - builder.assert_var_eq(value, exp_value); - builder.if_eq(i, break_len).then(|builder| builder.assign(is_break, F::zero())); - }); - - // Test the break instructions in a nested loop. - - let mut array: Array> = builder.array(len); - builder.range(0, array.len()).for_each(|i, builder| { - let counter: Var<_> = builder.eval(F::zero()); - - builder.range(0, i).for_each(|_, builder| { - builder.assign(counter, counter + F::one()); - builder.if_eq(counter, break_len).then(|builder| builder.break_loop()); - }); - - builder.set(&mut array, i, counter); - }); - - // Test that the array is correctly initialized. - - let is_break: Var<_> = builder.eval(F::one()); - builder.range(0, array.len()).for_each(|i, builder| { - let exp_value: Var<_> = - builder.eval(i * is_break + (SymbolicVar::::one() - is_break) * break_len); - let value = builder.get(&array, i); - builder.assert_var_eq(value, exp_value); - builder.if_eq(i, break_len).then(|builder| builder.assign(is_break, F::zero())); - }); - - let code = builder.compile_asm(); - - println!("{}", code); - - let program = code.machine_code(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} - -#[test] -fn test_compiler_step_by() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - - let n_val = BabyBear::from_canonical_u32(20); - - let zero: Var<_> = builder.eval(F::zero()); - let n: Var<_> = builder.eval(n_val); - - let i_counter: Var<_> = builder.eval(F::zero()); - builder.range(zero, n).step_by(2).for_each(|_, builder| { - builder.assign(i_counter, i_counter + F::one()); - }); - // Assert that the outer loop ran n times, in two different ways. - let n_exp = n_val / F::two(); - builder.assert_var_eq(i_counter, n_exp); - - let program = builder.compile_program(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} - -#[test] -fn test_compiler_bneinc() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - - let n_val = BabyBear::from_canonical_u32(20); - - let zero: Var<_> = builder.eval(F::zero()); - let n: Var<_> = builder.eval(n_val); - - let i_counter: Var<_> = builder.eval(F::zero()); - builder.range(zero, n).step_by(1).for_each(|_, builder| { - builder.assign(i_counter, i_counter + F::one()); - }); - - let code = builder.clone().compile_asm(); - - println!("{}", code); - - let program = builder.compile_program(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} diff --git a/crates/recursion/compiler/tests/io.rs b/crates/recursion/compiler/tests/io.rs deleted file mode 100644 index 4ba5a86545..0000000000 --- a/crates/recursion/compiler/tests/io.rs +++ /dev/null @@ -1,42 +0,0 @@ -use p3_field::AbstractField; -use sp1_recursion_compiler::asm::AsmBuilder; -use sp1_recursion_core::runtime::Runtime; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkGenericConfig}; - -#[test] -fn test_io() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - - let arr = builder.hint_vars(); - builder.range(0, arr.len()).for_each(|i, builder| { - let el = builder.get(&arr, i); - builder.print_v(el); - }); - - let arr = builder.hint_felts(); - builder.range(0, arr.len()).for_each(|i, builder| { - let el = builder.get(&arr, i); - builder.print_f(el); - }); - - let arr = builder.hint_exts(); - builder.range(0, arr.len()).for_each(|i, builder| { - let el = builder.get(&arr, i); - builder.print_e(el); - }); - - let program = builder.compile_program(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.witness_stream = vec![ - vec![F::zero().into(), F::zero().into(), F::one().into()], - vec![F::zero().into(), F::zero().into(), F::two().into()], - vec![F::one().into(), F::one().into(), F::two().into()], - ] - .into(); - runtime.run().unwrap(); -} diff --git a/crates/recursion/compiler/tests/lt.rs b/crates/recursion/compiler/tests/lt.rs deleted file mode 100644 index 698db8fcb4..0000000000 --- a/crates/recursion/compiler/tests/lt.rs +++ /dev/null @@ -1,28 +0,0 @@ -use p3_field::AbstractField; -use sp1_recursion_compiler::{asm::AsmBuilder, prelude::*}; -use sp1_recursion_core::runtime::Runtime; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkGenericConfig}; - -#[test] -fn test_compiler_less_than() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - - let a: Var<_> = builder.constant(F::from_canonical_u32(10)); - let b: Var<_> = builder.constant(F::from_canonical_u32(20)); - let c = builder.lt(a, b); - builder.assert_var_eq(c, F::one()); - - let a: Var<_> = builder.constant(F::from_canonical_u32(20)); - let b: Var<_> = builder.constant(F::from_canonical_u32(10)); - let c = builder.lt(a, b); - builder.assert_var_eq(c, F::zero()); - - let program = builder.compile_program(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} diff --git a/crates/recursion/compiler/tests/poseidon2.rs b/crates/recursion/compiler/tests/poseidon2.rs deleted file mode 100644 index 6cad8032f2..0000000000 --- a/crates/recursion/compiler/tests/poseidon2.rs +++ /dev/null @@ -1,156 +0,0 @@ -use p3_field::{AbstractField, PrimeField32}; -use p3_symmetric::Permutation; -use rand::{thread_rng, Rng}; -use sp1_core_machine::utils::setup_logger; -use sp1_recursion_compiler::{ - asm::AsmBuilder, - ir::{Array, Var}, -}; -use sp1_recursion_core::runtime::{Runtime, PERMUTATION_WIDTH}; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkGenericConfig}; - -#[test] -fn test_compiler_poseidon2_permute() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - - let mut rng = thread_rng(); - - let config = SC::default(); - let perm = &config.perm; - - let mut builder = AsmBuilder::::default(); - - let random_state_vals: [F; PERMUTATION_WIDTH] = rng.gen(); - // Execute the reference permutation - let expected_result = perm.permute(random_state_vals); - - // Execture the permutation in the VM - // Initialize an array and populate it with the entries. - let var_width: Var = builder.eval(F::from_canonical_usize(PERMUTATION_WIDTH)); - let mut random_state = builder.array(var_width); - for (i, val) in random_state_vals.iter().enumerate() { - builder.set(&mut random_state, i, *val); - } - - // Assert that the values are set correctly. - for (i, val) in random_state_vals.iter().enumerate() { - let res = builder.get(&random_state, i); - builder.assert_felt_eq(res, *val); - } - - let result = builder.poseidon2_permute(&random_state); - - assert!(matches!(result, Array::Dyn(_, _))); - - // Assert that the result is equal to the expected result. - for (i, val) in expected_result.iter().enumerate() { - let res = builder.get(&result, i); - builder.assert_felt_eq(res, *val); - } - - let program = builder.compile_program(); - - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); - println!( - "The program executed successfully, number of cycles: {}", - runtime.clk.as_canonical_u32() / 4 - ); -} - -#[test] -fn test_compiler_poseidon2_hash() { - setup_logger(); - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - - let mut rng = thread_rng(); - - let config = SC::default(); - - let mut builder = AsmBuilder::::default(); - - let random_state_vals_1: [F; 42] = rng.gen(); - println!("{:?}", random_state_vals_1); - let random_state_vals_2: [F; 42] = rng.gen(); - println!("{:?}", random_state_vals_2); - - let mut random_state_v1 = - builder.dyn_array(random_state_vals_1.len() + random_state_vals_2.len()); - for (i, val) in random_state_vals_1.iter().enumerate() { - builder.set(&mut random_state_v1, i, *val); - } - for (i, val) in random_state_vals_2.iter().enumerate() { - builder.set(&mut random_state_v1, i + random_state_vals_1.len(), *val); - } - - let mut random_state_v2_1 = builder.dyn_array(random_state_vals_1.len()); - for (i, val) in random_state_vals_1.iter().enumerate() { - builder.set(&mut random_state_v2_1, i, *val); - } - let mut random_state_v2_2 = builder.dyn_array(random_state_vals_2.len()); - for (i, val) in random_state_vals_2.iter().enumerate() { - builder.set(&mut random_state_v2_2, i, *val); - } - - let mut nested_random_state = builder.dyn_array(2); - builder.set(&mut nested_random_state, 0, random_state_v2_1.clone()); - builder.set(&mut nested_random_state, 1, random_state_v2_2.clone()); - - let result = builder.poseidon2_hash(&random_state_v1); - let result_x = builder.poseidon2_hash_x(&nested_random_state); - - builder.range(0, result.len()).for_each(|i, builder| { - let el = builder.get(&result, i); - let el_x = builder.get(&result_x, i); - builder.assert_felt_eq(el, el_x); - }); - - let program = builder.compile_program(); - - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); - println!( - "The program executed successfully, number of cycles: {}", - runtime.clk.as_canonical_u32() / 4 - ); - runtime.print_stats(); -} - -#[test] -fn test_compiler_poseidon2_hash_v2() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - - let mut rng = thread_rng(); - - let config = SC::default(); - - let mut builder = AsmBuilder::::default(); - - let random_state_vals: [F; 2] = rng.gen(); - - let mut random_state = builder.dyn_array(PERMUTATION_WIDTH); - for (i, val) in random_state_vals.iter().enumerate() { - builder.set(&mut random_state, i, *val); - } - - let idx: Var<_> = builder.eval(F::zero()); - builder.if_eq(idx, F::zero()).then(|builder| { - let element = builder.get(&random_state, idx); - builder.print_f(element); - }); - - let program = builder.compile_program(); - - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); - println!( - "The program executed successfully, number of cycles: {}", - runtime.clk.as_canonical_u32() / 4 - ); -} diff --git a/crates/recursion/compiler/tests/public_values.rs b/crates/recursion/compiler/tests/public_values.rs deleted file mode 100644 index 02115ab621..0000000000 --- a/crates/recursion/compiler/tests/public_values.rs +++ /dev/null @@ -1,29 +0,0 @@ -use p3_field::AbstractField; -use sp1_recursion_compiler::{asm::AsmBuilder, prelude::*}; -use sp1_recursion_core::runtime::Runtime; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkGenericConfig}; - -#[test] -fn test_compiler_public_values() { - type SC = BabyBearPoseidon2; - type F = ::Val; - type EF = ::Challenge; - let mut builder = AsmBuilder::::default(); - - let a: Felt<_> = builder.constant(F::from_canonical_u32(10)); - let b: Felt<_> = builder.constant(F::from_canonical_u32(20)); - - let dyn_len: Var<_> = builder.eval(F::from_canonical_usize(2)); - let mut var_array = builder.dyn_array::>(dyn_len); - builder.set(&mut var_array, 0, a); - builder.set(&mut var_array, 1, b); - // builder.write_public_values(&var_array); - // builder.write_public_values(&var_array); - // builder.commit_public_values(); - - let program = builder.compile_program(); - - let config = SC::default(); - let mut runtime = Runtime::::new(&program, config.perm.clone()); - runtime.run().unwrap(); -} diff --git a/crates/recursion/program/src/fri/two_adic_pcs.rs b/crates/recursion/program/src/fri/two_adic_pcs.rs index 10f49aba42..e71bbd2145 100644 --- a/crates/recursion/program/src/fri/two_adic_pcs.rs +++ b/crates/recursion/program/src/fri/two_adic_pcs.rs @@ -143,7 +143,7 @@ pub fn verify_two_adic_pcs( builder.set_value(&mut input_ptr, 0, input); let ps_at_z_len = ps_at_z.len().materialize(builder); - builder.push(DslIr::FriFold(ps_at_z_len, input_ptr.clone())); + builder.push_op(DslIr::FriFold(ps_at_z_len, input_ptr.clone())); }); }); }); diff --git a/crates/stark/src/types.rs b/crates/stark/src/types.rs index 482ecd1424..04b1418879 100644 --- a/crates/stark/src/types.rs +++ b/crates/stark/src/types.rs @@ -39,13 +39,17 @@ pub struct ShardCommitment { } #[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(bound(serialize = "T: Serialize"))] +#[serde(bound(deserialize = "T: Deserialize<'de>"))] pub struct AirOpenedValues { pub local: Vec, pub next: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ChipOpenedValues { +#[serde(bound(serialize = "T: Serialize"))] +#[serde(bound(deserialize = "T: Deserialize<'de>"))] +pub struct ChipOpenedValues { pub preprocessed: AirOpenedValues, pub main: AirOpenedValues, pub permutation: AirOpenedValues, @@ -55,7 +59,7 @@ pub struct ChipOpenedValues { } #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ShardOpenedValues { +pub struct ShardOpenedValues { pub chips: Vec>, } From 0a6af0686cdfc04ceeb41d4c2a11cdeaf97f36b2 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 14:42:32 -0700 Subject: [PATCH 132/268] chore: merge dev (#1439) Co-authored-by: Shaked Regev Co-authored-by: John Guibas Co-authored-by: Yuwen Zhang Co-authored-by: Matt Stam <15695189+mattstam@users.noreply.github.com> Co-authored-by: shakedregev <35384901+shakedregev@users.noreply.github.com> Co-authored-by: Chris T. --- .github/workflows/eval.yml | 47 - .github/workflows/pr.yml | 47 +- Cargo.lock | 1452 +++++++++++++++-- Cargo.toml | 6 +- crates/core/executor/src/events/alu.rs | 10 +- crates/core/executor/src/events/cpu.rs | 22 +- .../executor/src/events/precompiles/ec.rs | 11 +- .../src/events/precompiles/edwards.rs | 7 +- .../src/events/precompiles/fptower.rs | 10 +- .../events/precompiles/keccak256_permute.rs | 7 +- .../src/events/precompiles/sha256_compress.rs | 7 +- .../src/events/precompiles/sha256_extend.rs | 3 +- .../src/events/precompiles/uint256.rs | 7 +- crates/core/executor/src/events/utils.rs | 37 +- crates/core/executor/src/executor.rs | 60 +- crates/core/executor/src/record.rs | 4 +- crates/core/executor/src/syscalls/context.rs | 6 +- .../src/syscalls/precompiles/fptower/fp.rs | 2 +- .../precompiles/fptower/fp2_addsub.rs | 2 +- .../syscalls/precompiles/fptower/fp2_mul.rs | 2 +- crates/core/machine/src/cpu/trace.rs | 18 +- .../src/syscall/precompiles/fptower/fp.rs | 9 +- crates/eval/Cargo.toml | 27 + crates/eval/programs/fibonacci/elf | Bin 0 -> 127644 bytes crates/eval/programs/fibonacci/input.bin | Bin 0 -> 36 bytes crates/eval/programs/ssz-withdrawals/elf | Bin 0 -> 200548 bytes .../eval/programs/ssz-withdrawals/input.bin | Bin 0 -> 24 bytes crates/eval/programs/tendermint/elf | Bin 0 -> 1175064 bytes crates/eval/programs/tendermint/input.bin | Bin 0 -> 105667 bytes crates/eval/src/lib.rs | 424 +++++ crates/eval/src/main.rs | 8 + crates/eval/src/program.rs | 37 + crates/sdk/Cargo.toml | 19 +- crates/sdk/src/artifacts.rs | 15 +- crates/sdk/src/install.rs | 46 +- crates/sdk/src/lib.rs | 21 + crates/sdk/src/network/prover.rs | 5 +- crates/stark/Cargo.toml | 2 + crates/zkvm/entrypoint/Cargo.toml | 2 +- 39 files changed, 2075 insertions(+), 307 deletions(-) delete mode 100644 .github/workflows/eval.yml create mode 100644 crates/eval/Cargo.toml create mode 100755 crates/eval/programs/fibonacci/elf create mode 100644 crates/eval/programs/fibonacci/input.bin create mode 100755 crates/eval/programs/ssz-withdrawals/elf create mode 100644 crates/eval/programs/ssz-withdrawals/input.bin create mode 100755 crates/eval/programs/tendermint/elf create mode 100644 crates/eval/programs/tendermint/input.bin create mode 100644 crates/eval/src/lib.rs create mode 100644 crates/eval/src/main.rs create mode 100644 crates/eval/src/program.rs diff --git a/.github/workflows/eval.yml b/.github/workflows/eval.yml deleted file mode 100644 index 02e4e3c2cf..0000000000 --- a/.github/workflows/eval.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Evaluate Performance - -on: - schedule: - - cron: "0 0 * * *" # Runs at 00:00 UTC every day - -jobs: - benchmark: - name: Benchmark - runs-on: ${{ matrix.runner_label }} - strategy: - matrix: - include: - - runner_label: self-hosted-x86 - arch: x86 - - runner_label: self-hosted-arm64 - arch: arm64 - if: "! contains(toJSON(github.event.commits.*.message), '[skip-ci]')" - env: - CARGO_NET_GIT_FETCH_WITH_CLI: "true" - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Set up git private repo access - run: | - git config --global url."https://${{ secrets.PRIVATE_PULL_TOKEN }}@github.com/".insteadOf ssh://git@github.com - git config --global url."https://${{ secrets.PRIVATE_PULL_TOKEN }}@github.com".insteadOf https://github.com - - - name: Setup toolchain - id: rustc-toolchain - run: rustup show - - - name: Install SP1 toolchain - run: | - curl -L https://sp1.succinct.xyz | bash - sp1up - - - name: Build and Run Evaluation - run: | - ./eval.sh - - - name: Upload Benchmark as Artifact - uses: actions/upload-artifact@v4 - with: - name: benchmark-results-${{ matrix.arch }} - path: benchmark.csv diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9cdf5340b5..3fb88e95fd 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,7 +2,7 @@ name: PR on: push: - branches: [main] + branches: [main, dev] pull_request: branches: - "**" @@ -120,6 +120,15 @@ jobs: env: CARGO_INCREMENTAL: 1 + - name: Add wasm target + run: rustup target add wasm32-unknown-unknown + + - name: Check wasm compatibility for sdk + uses: actions-rs/cargo@v1 + with: + command: check + args: -p sp1-sdk --target wasm32-unknown-unknown --no-default-features + examples: name: Examples runs-on: [runs-on, runner=8cpu-linux-x64, "run-id=${{ github.run_id }}"] @@ -188,3 +197,39 @@ jobs: cargo remove sp1-sdk cargo add sp1-sdk --path $GITHUB_WORKSPACE/crates/sdk SP1_DEV=1 RUST_LOG=info cargo run --release -- --prove + + performance: + name: Performance + runs-on: [runs-on, family=c7a.48xlarge, "run-id=${{ github.run_id }}"] + env: + CARGO_NET_GIT_FETCH_WITH_CLI: "true" + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Setup CI + uses: ./.github/actions/setup + + - name: Install SP1 toolchain + run: | + curl -L https://sp1.succinct.xyz | bash + ~/.sp1/bin/sp1up + ~/.sp1/bin/cargo-prove prove --version + + - name: Build program and run script + run: | + cd crates/eval + RUSTFLAGS='-C target-cpu=native' cargo run --release -- \ + --programs fibonacci,ssz-withdrawals,tendermint \ + --post-to-slack ${{ github.ref == 'refs/heads/dev' }} \ + --slack-channel-id "${{ secrets.SLACK_CHANNEL_ID }}" \ + --slack-token "${{ secrets.SLACK_TOKEN }}" \ + --post-to-github ${{ github.event_name == 'pull_request' }} \ + --github-token "${{ secrets.GITHUB_TOKEN }}" \ + --repo-owner "${{ github.repository_owner }}" \ + --repo-name "${{ github.event.repository.name }}" \ + --pr-number "${{ github.event.pull_request.number }}" \ + --pr-name "${{ github.event.pull_request.title }}" \ + --branch-name "${{ github.head_ref || github.ref_name }}" \ + --commit-hash "${{ github.sha }}" \ + --author "${{ github.event.pull_request.user.login || github.actor }}" diff --git a/Cargo.lock b/Cargo.lock index d6a80d72c6..cd185896b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,6 +38,26 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher 0.2.5", +] + [[package]] name = "aes" version = "0.8.4" @@ -45,10 +65,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", - "cipher", + "cipher 0.4.4", "cpufeatures", ] +[[package]] +name = "aes-gcm" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +dependencies = [ + "aead", + "aes 0.6.0", + "cipher 0.2.5", + "ctr 0.6.0", + "ghash", + "subtle", +] + +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher 0.2.5", + "opaque-debug", +] + [[package]] name = "ahash" version = "0.8.11" @@ -83,7 +137,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", - "bytes", + "bytes 1.7.1", "cfg-if", "const-hex", "derive_more", @@ -92,7 +146,7 @@ dependencies = [ "k256", "keccak-asm", "proptest", - "rand", + "rand 0.8.5", "ruint", "serde", "tiny-keccak", @@ -105,7 +159,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" dependencies = [ "arrayvec", - "bytes", + "bytes 1.7.1", ] [[package]] @@ -366,7 +420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -376,7 +430,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -391,6 +445,172 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.0", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.3.4", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.3.0", + "once_cell", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.3", + "rustix 0.38.34", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 1.13.0", + "async-lock 2.8.0", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 1.13.0", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-tls" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400" +dependencies = [ + "futures-core", + "futures-io", + "rustls 0.19.1", + "webpki", + "webpki-roots 0.21.1", +] + [[package]] name = "async-trait" version = "0.1.81" @@ -402,6 +622,19 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "async-tungstenite" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e6acf7e4a267eecbb127ed696bb2d50572c22ba7f586a646321e1798d8336a1" +dependencies = [ + "futures-io", + "futures-util", + "log", + "pin-project-lite", + "tungstenite", +] + [[package]] name = "async_io_stream" version = "0.3.3" @@ -444,7 +677,7 @@ checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" dependencies = [ "async-trait", "axum-core", - "bytes", + "bytes 1.7.1", "futures-util", "http 1.1.0", "http-body 1.0.1", @@ -477,7 +710,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" dependencies = [ "async-trait", - "bytes", + "bytes 1.7.1", "futures-util", "http 1.1.0", "http-body 1.0.1", @@ -507,6 +740,12 @@ dependencies = [ "serde", ] +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + [[package]] name = "base16ct" version = "0.2.0" @@ -648,6 +887,15 @@ dependencies = [ "rayon-core", ] +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -657,6 +905,19 @@ dependencies = [ "generic-array 0.14.7", ] +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", +] + [[package]] name = "bls12_381" version = "0.7.1" @@ -666,7 +927,7 @@ dependencies = [ "ff 0.12.1", "group 0.12.1", "pairing", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -676,7 +937,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ - "sha2", + "sha2 0.10.8", "tinyvec", ] @@ -704,6 +965,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "bytes" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + [[package]] name = "bytes" version = "1.7.1" @@ -842,6 +1109,15 @@ dependencies = [ "half", ] +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "cipher" version = "0.4.4" @@ -882,7 +1158,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.1", ] [[package]] @@ -918,10 +1194,10 @@ dependencies = [ "bs58", "coins-core", "digest 0.10.7", - "hmac", + "hmac 0.12.1", "k256", "serde", - "sha2", + "sha2 0.10.8", "thiserror", ] @@ -933,11 +1209,11 @@ checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" dependencies = [ "bitvec", "coins-bip32", - "hmac", + "hmac 0.12.1", "once_cell", "pbkdf2 0.12.2", - "rand", - "sha2", + "rand 0.8.5", + "sha2 0.10.8", "thiserror", ] @@ -956,7 +1232,7 @@ dependencies = [ "ripemd", "serde", "serde_derive", - "sha2", + "sha2 0.10.8", "sha3", "thiserror", ] @@ -967,6 +1243,15 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "console" version = "0.15.8" @@ -999,6 +1284,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const_fn" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" + [[package]] name = "constant_time_eq" version = "0.3.0" @@ -1011,6 +1302,23 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "cookie" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" +dependencies = [ + "aes-gcm", + "base64 0.13.1", + "hkdf", + "hmac 0.10.1", + "percent-encoding", + "rand 0.8.5", + "sha2 0.9.9", + "time 0.2.27", + "version_check", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1036,6 +1344,12 @@ dependencies = [ "libc", ] +[[package]] +name = "cpuid-bool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" + [[package]] name = "criterion" version = "0.5.1" @@ -1110,7 +1424,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array 0.14.7", - "rand_core", + "rand_core 0.6.4", "subtle", "zeroize", ] @@ -1125,6 +1439,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-mac" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + [[package]] name = "csv" version = "1.3.0" @@ -1146,13 +1470,22 @@ dependencies = [ "memchr", ] +[[package]] +name = "ctr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +dependencies = [ + "cipher 0.2.5", +] + [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -1165,6 +1498,37 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "curl" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" +dependencies = [ + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.5.7", + "windows-sys 0.52.0", +] + +[[package]] +name = "curl-sys" +version = "0.4.74+curl-8.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8af10b986114528fcdc4b63b6f5f021b7057618411046a4de2ba0f0149a097bf" +dependencies = [ + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.52.0", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -1191,14 +1555,38 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + [[package]] name = "darling" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", ] [[package]] @@ -1211,17 +1599,28 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.11.1", "syn 2.0.72", ] +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + [[package]] name = "darling_macro" version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core", + "darling_core 0.20.10", "quote", "syn 2.0.72", ] @@ -1363,7 +1762,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", @@ -1411,6 +1810,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + [[package]] name = "downcast-rs" version = "1.2.1" @@ -1424,7 +1829,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05213e96f184578b5f70105d4d0a644a168e99e12d7bea0b200c15d67b5c182" dependencies = [ "futures", - "rand", + "rand 0.8.5", "reqwest 0.11.27", "thiserror", "tokio", @@ -1475,7 +1880,7 @@ dependencies = [ "generic-array 0.14.7", "group 0.13.0", "pkcs8", - "rand_core", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -1521,11 +1926,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" dependencies = [ "base64 0.21.7", - "bytes", + "bytes 1.7.1", "hex", "k256", "log", - "rand", + "rand 0.8.5", "rlp", "serde", "sha3", @@ -1554,17 +1959,17 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ - "aes", - "ctr", + "aes 0.8.4", + "ctr 0.9.2", "digest 0.10.7", "hex", - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", - "rand", + "rand 0.8.5", "scrypt", "serde", "serde_json", - "sha2", + "sha2 0.10.8", "sha3", "thiserror", "uuid", @@ -1708,7 +2113,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" dependencies = [ "arrayvec", - "bytes", + "bytes 1.7.1", "cargo_metadata", "chrono", "const-hex", @@ -1719,7 +2124,7 @@ dependencies = [ "num_enum 0.7.3", "once_cell", "open-fastrlp", - "rand", + "rand 0.8.5", "rlp", "serde", "serde_json", @@ -1766,7 +2171,7 @@ dependencies = [ "async-trait", "auto_impl", "base64 0.21.7", - "bytes", + "bytes 1.7.1", "const-hex", "enr", "ethers-core", @@ -1806,12 +2211,39 @@ dependencies = [ "elliptic-curve", "eth-keystore", "ethers-core", - "rand", - "sha2", + "rand 0.8.5", + "sha2 0.10.8", "thiserror", "tracing", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] + [[package]] name = "eyre" version = "0.6.12" @@ -1822,6 +2254,15 @@ dependencies = [ "once_cell", ] +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + [[package]] name = "fastrand" version = "2.1.0" @@ -1836,7 +2277,7 @@ checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ "arrayvec", "auto_impl", - "bytes", + "bytes 1.7.1", ] [[package]] @@ -1846,7 +2287,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ "bitvec", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1859,7 +2300,7 @@ dependencies = [ "bitvec", "byteorder", "ff_derive", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -1892,7 +2333,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ "byteorder", - "rand", + "rand 0.8.5", "rustc-hex", "static_assertions", ] @@ -1903,6 +2344,17 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "flume" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132" +dependencies = [ + "futures-core", + "futures-sink", + "spinning_top", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1987,6 +2439,34 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.1.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-locks" version = "0.7.1" @@ -2084,6 +2564,17 @@ dependencies = [ "typenum", ] +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -2091,8 +2582,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +dependencies = [ + "opaque-debug", + "polyval", ] [[package]] @@ -2151,7 +2654,7 @@ checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ "ff 0.12.1", "memuse", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -2162,7 +2665,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff 0.13.0", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -2172,7 +2675,7 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "bytes", + "bytes 1.7.1", "fnv", "futures-core", "futures-sink", @@ -2192,7 +2695,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ "atomic-waker", - "bytes", + "bytes 1.7.1", "fnv", "futures-core", "futures-sink", @@ -2233,7 +2736,7 @@ dependencies = [ "ff 0.12.1", "group 0.12.1", "pasta_curves 0.4.1", - "rand_core", + "rand_core 0.6.4", "rayon", ] @@ -2275,6 +2778,12 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "hex" version = "0.4.3" @@ -2287,6 +2796,26 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hkdf" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +dependencies = [ + "digest 0.9.0", + "hmac 0.10.1", +] + +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + [[package]] name = "hmac" version = "0.12.1" @@ -2311,7 +2840,7 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "bytes", + "bytes 1.7.1", "fnv", "itoa", ] @@ -2322,7 +2851,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ - "bytes", + "bytes 1.7.1", "fnv", "itoa", ] @@ -2333,7 +2862,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "bytes", + "bytes 1.7.1", "http 0.2.12", "pin-project-lite", ] @@ -2344,7 +2873,7 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "bytes", + "bytes 1.7.1", "http 1.1.0", ] @@ -2354,13 +2883,49 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "bytes", + "bytes 1.7.1", "futures-util", "http 1.1.0", "http-body 1.0.1", "pin-project-lite", ] +[[package]] +name = "http-client" +version = "6.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "http-types", + "isahc", + "log", +] + +[[package]] +name = "http-types" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" +dependencies = [ + "anyhow", + "async-channel 1.9.0", + "async-std", + "base64 0.13.1", + "cookie", + "futures-lite 1.13.0", + "infer", + "pin-project-lite", + "rand 0.7.3", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "url", +] + [[package]] name = "httparse" version = "1.9.4" @@ -2379,7 +2944,7 @@ version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ - "bytes", + "bytes 1.7.1", "futures-channel", "futures-core", "futures-util", @@ -2390,7 +2955,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -2403,7 +2968,7 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ - "bytes", + "bytes 1.7.1", "futures-channel", "futures-util", "h2 0.4.5", @@ -2456,7 +3021,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "bytes", + "bytes 1.7.1", "http-body-util", "hyper 1.4.1", "hyper-util", @@ -2472,14 +3037,14 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" dependencies = [ - "bytes", + "bytes 1.7.1", "futures-channel", "futures-util", "http 1.1.0", "http-body 1.0.1", "hyper 1.4.1", "pin-project-lite", - "socket2", + "socket2 0.5.7", "tokio", "tower", "tower-service", @@ -2604,6 +3169,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + [[package]] name = "inout" version = "0.1.3" @@ -2622,6 +3193,17 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", +] + [[package]] name = "ipnet" version = "2.9.0" @@ -2634,7 +3216,7 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", "windows-sys 0.52.0", ] @@ -2645,6 +3227,29 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +[[package]] +name = "isahc" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a" +dependencies = [ + "bytes 0.5.6", + "crossbeam-utils", + "curl", + "curl-sys", + "flume", + "futures-lite 1.13.0", + "http 0.2.12", + "log", + "once_cell", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] + [[package]] name = "itertools" version = "0.10.5" @@ -2720,7 +3325,7 @@ dependencies = [ "bls12_381", "ff 0.12.1", "group 0.12.1", - "rand_core", + "rand_core 0.6.4", "subtle", ] @@ -2734,7 +3339,7 @@ dependencies = [ "ecdsa", "elliptic-curve", "once_cell", - "sha2", + "sha2 0.10.8", "signature", ] @@ -2757,6 +3362,15 @@ dependencies = [ "sha3-asm", ] +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -2806,6 +3420,16 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +[[package]] +name = "libnghttp2-sys" +version = "0.1.10+1.61.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "libredox" version = "0.1.3" @@ -2828,6 +3452,12 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -2849,6 +3479,9 @@ name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] [[package]] name = "lru" @@ -2892,6 +3525,16 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -2913,9 +3556,9 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -3022,7 +3665,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -3032,7 +3675,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", - "rand", + "rand 0.8.5", ] [[package]] @@ -3103,7 +3746,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", ] @@ -3191,6 +3834,12 @@ version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "open-fastrlp" version = "0.1.4" @@ -3199,7 +3848,7 @@ checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" dependencies = [ "arrayvec", "auto_impl", - "bytes", + "bytes 1.7.1", "ethereum-types", "open-fastrlp-derive", ] @@ -3210,7 +3859,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" dependencies = [ - "bytes", + "bytes 1.7.1", "proc-macro2", "quote", "syn 1.0.109", @@ -3293,7 +3942,7 @@ dependencies = [ "p3-mds", "p3-poseidon2", "p3-symmetric", - "rand", + "rand 0.8.5", "serde", ] @@ -3318,7 +3967,7 @@ dependencies = [ "p3-field", "p3-poseidon2", "p3-symmetric", - "rand", + "rand 0.8.5", "serde", ] @@ -3372,7 +4021,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "p3-util", - "rand", + "rand 0.8.5", "serde", ] @@ -3442,7 +4091,7 @@ dependencies = [ "p3-field", "p3-maybe-rayon", "p3-util", - "rand", + "rand 0.8.5", "serde", "tracing", ] @@ -3468,7 +4117,7 @@ dependencies = [ "p3-matrix", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", ] [[package]] @@ -3498,7 +4147,7 @@ dependencies = [ "p3-field", "p3-mds", "p3-symmetric", - "rand", + "rand 0.8.5", ] [[package]] @@ -3578,6 +4227,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "parking_lot" version = "0.12.3" @@ -3611,7 +4266,7 @@ dependencies = [ "ff 0.12.1", "group 0.12.1", "lazy_static", - "rand", + "rand 0.8.5", "static_assertions", "subtle", ] @@ -3626,7 +4281,7 @@ dependencies = [ "ff 0.13.0", "group 0.13.0", "lazy_static", - "rand", + "rand 0.8.5", "static_assertions", "subtle", ] @@ -3653,7 +4308,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", ] [[package]] @@ -3734,6 +4389,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.1.0", + "futures-io", +] + [[package]] name = "pkcs8" version = "0.10.2" @@ -3784,6 +4450,48 @@ dependencies = [ "plotters-backend", ] +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix 0.38.34", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "polyval" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +dependencies = [ + "cpuid-bool", + "opaque-debug", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "1.7.0" @@ -3898,6 +4606,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + [[package]] name = "proc-macro2" version = "1.0.86" @@ -3918,8 +4632,8 @@ dependencies = [ "bitflags 2.6.0", "lazy_static", "num-traits", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax 0.8.4", "rusty-fork", @@ -3933,7 +4647,7 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ - "bytes", + "bytes 1.7.1", "prost-derive", ] @@ -3943,7 +4657,7 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ - "bytes", + "bytes 1.7.1", "heck", "itertools 0.12.1", "log", @@ -4001,13 +4715,13 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" dependencies = [ - "bytes", + "bytes 1.7.1", "pin-project-lite", "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", "rustls 0.23.12", - "socket2", + "socket2 0.5.7", "thiserror", "tokio", "tracing", @@ -4019,8 +4733,8 @@ version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" dependencies = [ - "bytes", - "rand", + "bytes 1.7.1", + "rand 0.8.5", "ring 0.17.8", "rustc-hash 2.0.0", "rustls 0.23.12", @@ -4038,7 +4752,7 @@ checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" dependencies = [ "libc", "once_cell", - "socket2", + "socket2 0.5.7", "tracing", "windows-sys 0.52.0", ] @@ -4058,6 +4772,19 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + [[package]] name = "rand" version = "0.8.5" @@ -4065,8 +4792,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -4076,7 +4813,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", ] [[package]] @@ -4085,7 +4831,16 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", ] [[package]] @@ -4094,7 +4849,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" dependencies = [ - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -4141,7 +4896,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror", ] @@ -4197,7 +4952,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64 0.21.7", - "bytes", + "bytes 1.7.1", "encoding_rs", "futures-core", "futures-util", @@ -4238,7 +4993,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ "base64 0.22.1", - "bytes", + "bytes 1.7.1", "encoding_rs", "futures-core", "futures-util", @@ -4302,7 +5057,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] @@ -4329,7 +5084,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", @@ -4351,7 +5106,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" dependencies = [ - "bytes", + "bytes 1.7.1", "rlp-derive", "rustc-hex", ] @@ -4387,14 +5142,14 @@ dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", - "bytes", + "bytes 1.7.1", "fastrlp", "num-bigint 0.4.6", "num-traits", "parity-scale-codec", "primitive-types", "proptest", - "rand", + "rand 0.8.5", "rlp", "ruint-macro", "serde", @@ -4432,6 +5187,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + [[package]] name = "rustc_version" version = "0.3.3" @@ -4450,6 +5214,20 @@ dependencies = [ "semver 1.0.23", ] +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + [[package]] name = "rustix" version = "0.38.34" @@ -4459,10 +5237,23 @@ dependencies = [ "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +dependencies = [ + "base64 0.13.1", + "log", + "ring 0.16.20", + "sct 0.6.1", + "webpki", +] + [[package]] name = "rustls" version = "0.21.12" @@ -4472,7 +5263,7 @@ dependencies = [ "log", "ring 0.17.8", "rustls-webpki 0.101.7", - "sct", + "sct 0.7.1", ] [[package]] @@ -4565,7 +5356,7 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" dependencies = [ - "cipher", + "cipher 0.4.4", ] [[package]] @@ -4651,10 +5442,20 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", "salsa20", - "sha2", + "sha2 0.10.8", +] + +[[package]] +name = "sct" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", ] [[package]] @@ -4710,13 +5511,22 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + [[package]] name = "semver" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" dependencies = [ - "semver-parser", + "semver-parser 0.10.2", ] [[package]] @@ -4728,6 +5538,12 @@ dependencies = [ "serde", ] +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + [[package]] name = "semver-parser" version = "0.10.2" @@ -4791,6 +5607,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + [[package]] name = "serde_spanned" version = "0.6.7" @@ -4812,6 +5639,16 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" +dependencies = [ + "serde", + "serde_with_macros 1.5.2", +] + [[package]] name = "serde_with" version = "3.9.0" @@ -4826,8 +5663,20 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "serde_with_macros", - "time", + "serde_with_macros 3.9.0", + "time 0.3.36", +] + +[[package]] +name = "serde_with_macros" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" +dependencies = [ + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -4836,7 +5685,7 @@ version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ - "darling", + "darling 0.20.10", "proc-macro2", "quote", "syn 2.0.72", @@ -4867,6 +5716,45 @@ dependencies = [ "syn 2.0.72", ] +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.10.8" @@ -4929,7 +5817,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -4941,7 +5829,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "thiserror", - "time", + "time 0.3.36", ] [[package]] @@ -4959,6 +5847,36 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slack-rust" +version = "0.0.1-alpha" +source = "git+https://github.com/dselans/slack-rust.git?branch=main#8212d4e8de30ebb3f536da35eab27e7e0820461b" +dependencies = [ + "async-std", + "async-tls", + "async-trait", + "async-tungstenite", + "futures-util", + "log", + "rustls 0.19.1", + "serde", + "serde_json", + "serde_with 1.14.0", + "surf", + "url", +] + +[[package]] +name = "sluice" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" +dependencies = [ + "async-channel 1.9.0", + "futures-core", + "futures-io", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -4981,6 +5899,16 @@ dependencies = [ "scale-info", ] +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "socket2" version = "0.5.7" @@ -5019,7 +5947,7 @@ dependencies = [ "hex", "indicatif", "prettytable-rs", - "rand", + "rand 0.8.5", "regex", "reqwest 0.12.5", "rustc-demangle", @@ -5055,10 +5983,10 @@ dependencies = [ "p3-field", "p3-keccak-air", "p3-maybe-rayon", - "rand", + "rand 0.8.5", "rrs-succinct", "serde", - "serde_with", + "serde_with 3.9.0", "sp1-curves", "sp1-derive", "sp1-primitives", @@ -5113,11 +6041,11 @@ dependencies = [ "p3-symmetric", "p3-uni-stark", "p3-util", - "rand", + "rand 0.8.5", "rayon-scan", "rrs-succinct", "serde", - "serde_with", + "serde_with 3.9.0", "size", "snowbridge-amcl", "sp1-core-executor", @@ -5172,7 +6100,7 @@ dependencies = [ "k256", "num", "p3-field", - "rand", + "rand 0.8.5", "serde", "snowbridge-amcl", "sp1-primitives", @@ -5189,6 +6117,26 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "sp1-eval" +version = "1.2.0-rc1" +dependencies = [ + "anyhow", + "bincode", + "clap", + "csv", + "p3-baby-bear", + "reqwest 0.12.5", + "serde", + "serde_json", + "slack-rust", + "sp1-prover", + "sp1-sdk", + "sp1-stark", + "time 0.3.36", + "tokio", +] + [[package]] name = "sp1-helper" version = "1.2.0-rc1" @@ -5278,7 +6226,7 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", "serde", "sp1-core-machine", "sp1-recursion-compiler", @@ -5312,7 +6260,7 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", "serde", "sp1-core-executor", "sp1-core-machine", @@ -5349,7 +6297,7 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", "rayon", "serde", "sp1-core-machine", @@ -5386,9 +6334,9 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", "serde", - "serde_with", + "serde_with 3.9.0", "sp1-core-executor", "sp1-core-machine", "sp1-derive", @@ -5423,9 +6371,9 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", "serde", - "serde_with", + "serde_with 3.9.0", "sp1-core-executor", "sp1-core-machine", "sp1-derive", @@ -5472,10 +6420,10 @@ dependencies = [ "p3-baby-bear", "p3-field", "p3-symmetric", - "rand", + "rand 0.8.5", "serde", "serde_json", - "sha2", + "sha2 0.10.8", "sp1-core-machine", "sp1-recursion-compiler", "sp1-stark", @@ -5500,7 +6448,7 @@ dependencies = [ "p3-poseidon2", "p3-symmetric", "p3-util", - "rand", + "rand 0.8.5", "serde", "sp1-core-executor", "sp1-core-machine", @@ -5525,6 +6473,7 @@ dependencies = [ "dirs", "ethers", "futures", + "getrandom 0.2.15", "hashbrown 0.14.5", "hex", "indicatif", @@ -5540,7 +6489,7 @@ dependencies = [ "reqwest-middleware", "serde", "serde_json", - "sha2", + "sha2 0.10.8", "sp1-core-executor", "sp1-core-machine", "sp1-cuda", @@ -5562,6 +6511,7 @@ name = "sp1-stark" version = "1.2.0-rc1" dependencies = [ "arrayref", + "getrandom 0.2.15", "hashbrown 0.14.5", "itertools 0.13.0", "p3-air", @@ -5592,15 +6542,15 @@ version = "1.2.0-rc1" dependencies = [ "bincode", "cfg-if", - "getrandom", + "getrandom 0.2.15", "lazy_static", "libm", "once_cell", "p3-baby-bear", "p3-field", - "rand", + "rand 0.8.5", "serde", - "sha2", + "sha2 0.10.8", "sp1-lib", "sp1-primitives", ] @@ -5617,6 +6567,15 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spinning_top" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" +dependencies = [ + "lock_api", +] + [[package]] name = "spki" version = "0.7.3" @@ -5640,12 +6599,76 @@ dependencies = [ "winapi", ] +[[package]] +name = "standback" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" +dependencies = [ + "version_check", +] + [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version 0.2.3", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1 0.6.1", + "syn 1.0.109", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.1" @@ -5689,6 +6712,29 @@ dependencies = [ "zeroize", ] +[[package]] +name = "surf" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7" +dependencies = [ + "async-std", + "async-trait", + "cfg-if", + "encoding_rs", + "futures-util", + "getrandom 0.2.15", + "http-client", + "http-types", + "log", + "mime_guess", + "once_cell", + "pin-project-lite", + "serde", + "serde_json", + "web-sys", +] + [[package]] name = "syn" version = "1.0.109" @@ -5790,9 +6836,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53" dependencies = [ "cfg-if", - "fastrand", + "fastrand 2.1.0", "once_cell", - "rustix", + "rustix 0.38.34", "windows-sys 0.52.0", ] @@ -5848,6 +6894,21 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +dependencies = [ + "const_fn", + "libc", + "standback", + "stdweb", + "time-macros 0.1.1", + "version_check", + "winapi", +] + [[package]] name = "time" version = "0.3.36" @@ -5862,7 +6923,7 @@ dependencies = [ "powerfmt", "serde", "time-core", - "time-macros", + "time-macros 0.2.18", ] [[package]] @@ -5871,6 +6932,16 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +[[package]] +name = "time-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" +dependencies = [ + "proc-macro-hack", + "time-macros-impl", +] + [[package]] name = "time-macros" version = "0.2.18" @@ -5881,6 +6952,19 @@ dependencies = [ "time-core", ] +[[package]] +name = "time-macros-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "standback", + "syn 1.0.109", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -5922,13 +7006,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", - "bytes", + "bytes 1.7.1", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.7", "tokio-macros", "windows-sys 0.52.0", ] @@ -5981,7 +7065,7 @@ version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ - "bytes", + "bytes 1.7.1", "futures-core", "futures-sink", "pin-project-lite", @@ -6163,6 +7247,25 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tungstenite" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" +dependencies = [ + "base64 0.13.1", + "byteorder", + "bytes 1.7.1", + "http 0.2.12", + "httparse", + "log", + "rand 0.8.5", + "sha1 0.10.6", + "thiserror", + "url", + "utf-8", +] + [[package]] name = "twirp-build-rs" version = "0.3.0" @@ -6180,7 +7283,7 @@ checksum = "dfa3161d8eee0abcad4e762f4215381a430cc1281870d575b0f1e4fbfc74b8ce" dependencies = [ "async-trait", "axum", - "bytes", + "bytes 1.7.1", "futures", "http 1.1.0", "http-body-util", @@ -6225,6 +7328,15 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -6264,6 +7376,16 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +[[package]] +name = "universal-hash" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +dependencies = [ + "generic-array 0.14.7", + "subtle", +] + [[package]] name = "untrusted" version = "0.7.1" @@ -6285,8 +7407,15 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + [[package]] name = "utf8parse" version = "0.2.2" @@ -6299,7 +7428,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] @@ -6309,6 +7438,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "value-bag" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" + [[package]] name = "vcpkg" version = "0.2.15" @@ -6331,7 +7466,7 @@ dependencies = [ "cfg-if", "git2", "rustversion", - "time", + "time 0.3.36", ] [[package]] @@ -6349,6 +7484,12 @@ dependencies = [ "libc", ] +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + [[package]] name = "walkdir" version = "2.5.0" @@ -6368,6 +7509,12 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -6473,6 +7620,25 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webpki" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + +[[package]] +name = "webpki-roots" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +dependencies = [ + "webpki", +] + [[package]] name = "webpki-roots" version = "0.25.4" @@ -6497,7 +7663,7 @@ dependencies = [ "either", "home", "once_cell", - "rustix", + "rustix 0.38.34", ] [[package]] @@ -6831,9 +7997,9 @@ dependencies = [ "jubjub", "lazy_static", "pasta_curves 0.5.1", - "rand", + "rand 0.8.5", "serde", - "sha2", + "sha2 0.10.8", "sha3", "subtle", ] diff --git a/Cargo.toml b/Cargo.toml index 60b361d1ff..61029a2038 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ members = [ "crates/core/machine", "crates/curves", "crates/derive", + "crates/eval", "crates/helper", "crates/primitives", "crates/prover", @@ -48,11 +49,12 @@ debug-assertions = true [workspace.dependencies] # sp1 sp1-build = { path = "crates/build", version = "1.2.0-rc1" } +sp1-cli = { path = "crates/cli", version = "1.2.0-rc1", default-features = false } sp1-core-machine = { path = "crates/core/machine", version = "1.2.0-rc1" } sp1-core-executor = { path = "crates/core/executor", version = "1.2.0-rc1" } -sp1-derive = { path = "crates/derive", version = "1.2.0-rc1" } -sp1-cli = { path = "crates/cli", version = "1.2.0-rc1", default-features = false } sp1-curves = { path = "crates/curves", version = "1.2.0-rc1" } +sp1-derive = { path = "crates/derive", version = "1.2.0-rc1" } +sp1-eval = { path = "crates/eval", version = "1.2.0-rc1" } sp1-helper = { path = "crates/helper", version = "1.2.0-rc1", default-features = false } sp1-primitives = { path = "crates/primitives", version = "1.2.0-rc1" } sp1-prover = { path = "crates/prover", version = "1.2.0-rc1" } diff --git a/crates/core/executor/src/events/alu.rs b/crates/core/executor/src/events/alu.rs index 67b30a6a19..b2ace9b673 100644 --- a/crates/core/executor/src/events/alu.rs +++ b/crates/core/executor/src/events/alu.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use crate::Opcode; -use super::create_alu_lookups; +use super::{create_alu_lookups, LookupId}; /// Arithmetic Logic Unit (ALU) Event. /// @@ -11,7 +11,7 @@ use super::create_alu_lookups; #[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct AluEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. @@ -26,8 +26,8 @@ pub struct AluEvent { pub b: u32, /// The third operand. pub c: u32, - /// The result of the operation. - pub sub_lookups: [u128; 6], + /// The result of the operation in the format of [``LookupId``; 6] + pub sub_lookups: [LookupId; 6], } impl AluEvent { @@ -35,7 +35,7 @@ impl AluEvent { #[must_use] pub fn new(shard: u32, channel: u8, clk: u32, opcode: Opcode, a: u32, b: u32, c: u32) -> Self { Self { - lookup_id: 0, + lookup_id: LookupId::default(), shard, channel, clk, diff --git a/crates/core/executor/src/events/cpu.rs b/crates/core/executor/src/events/cpu.rs index 31af950d4d..cf6d9b4dae 100644 --- a/crates/core/executor/src/events/cpu.rs +++ b/crates/core/executor/src/events/cpu.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use crate::Instruction; -use super::memory::MemoryRecordEnum; +use super::{memory::MemoryRecordEnum, LookupId}; /// CPU Event. /// @@ -41,23 +41,23 @@ pub struct CpuEvent { /// The exit code. pub exit_code: u32, /// The ALU lookup id. - pub alu_lookup_id: u128, + pub alu_lookup_id: LookupId, /// The syscall lookup id. - pub syscall_lookup_id: u128, + pub syscall_lookup_id: LookupId, /// The memory add lookup id. - pub memory_add_lookup_id: u128, + pub memory_add_lookup_id: LookupId, /// The memory sub lookup id. - pub memory_sub_lookup_id: u128, + pub memory_sub_lookup_id: LookupId, /// The branch gt lookup id. - pub branch_gt_lookup_id: u128, + pub branch_gt_lookup_id: LookupId, /// The branch lt lookup id. - pub branch_lt_lookup_id: u128, + pub branch_lt_lookup_id: LookupId, /// The branch add lookup id. - pub branch_add_lookup_id: u128, + pub branch_add_lookup_id: LookupId, /// The jump jal lookup id. - pub jump_jal_lookup_id: u128, + pub jump_jal_lookup_id: LookupId, /// The jump jalr lookup id. - pub jump_jalr_lookup_id: u128, + pub jump_jalr_lookup_id: LookupId, /// The auipc lookup id. - pub auipc_lookup_id: u128, + pub auipc_lookup_id: LookupId, } diff --git a/crates/core/executor/src/events/precompiles/ec.rs b/crates/core/executor/src/events/precompiles/ec.rs index 03efcb7749..ff8fee9844 100644 --- a/crates/core/executor/src/events/precompiles/ec.rs +++ b/crates/core/executor/src/events/precompiles/ec.rs @@ -9,7 +9,10 @@ use sp1_primitives::consts::{bytes_to_words_le_vec, words_to_bytes_le_vec}; use typenum::Unsigned; use crate::{ - events::memory::{MemoryReadRecord, MemoryWriteRecord}, + events::{ + memory::{MemoryReadRecord, MemoryWriteRecord}, + LookupId, + }, syscalls::SyscallContext, }; @@ -18,7 +21,7 @@ use crate::{ /// This event is emitted when an elliptic curve addition operation is performed. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct EllipticCurveAddEvent { - pub(crate) lookup_id: u128, + pub(crate) lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. @@ -45,7 +48,7 @@ pub struct EllipticCurveAddEvent { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct EllipticCurveDoubleEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. @@ -66,7 +69,7 @@ pub struct EllipticCurveDoubleEvent { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct EllipticCurveDecompressEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. diff --git a/crates/core/executor/src/events/precompiles/edwards.rs b/crates/core/executor/src/events/precompiles/edwards.rs index 672602b2ef..17daf6837e 100644 --- a/crates/core/executor/src/events/precompiles/edwards.rs +++ b/crates/core/executor/src/events/precompiles/edwards.rs @@ -1,7 +1,10 @@ use serde::{Deserialize, Serialize}; use sp1_curves::{edwards::WORDS_FIELD_ELEMENT, COMPRESSED_POINT_BYTES, NUM_BYTES_FIELD_ELEMENT}; -use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; +use crate::events::{ + memory::{MemoryReadRecord, MemoryWriteRecord}, + LookupId, +}; /// Edwards Decompress Event. /// @@ -9,7 +12,7 @@ use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct EdDecompressEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. diff --git a/crates/core/executor/src/events/precompiles/fptower.rs b/crates/core/executor/src/events/precompiles/fptower.rs index bfe30431fe..1ae2afd005 100644 --- a/crates/core/executor/src/events/precompiles/fptower.rs +++ b/crates/core/executor/src/events/precompiles/fptower.rs @@ -1,8 +1,8 @@ use serde::{Deserialize, Serialize}; -use crate::events::{MemoryReadRecord, MemoryWriteRecord}; +use crate::events::{LookupId, MemoryReadRecord, MemoryWriteRecord}; -/// Airthmetic operation for emulating modular arithmetic. +/// This is an arithmetic operation for emulating modular arithmetic. #[derive(PartialEq, Copy, Clone, Debug, Serialize, Deserialize)] pub enum FieldOperation { /// Addition. @@ -21,7 +21,7 @@ pub enum FieldOperation { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct FpOpEvent { /// The lookup id. - pub lookup_id: usize, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. @@ -50,7 +50,7 @@ pub struct FpOpEvent { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Fp2AddSubEvent { /// The lookup id. - pub lookup_id: usize, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. @@ -77,7 +77,7 @@ pub struct Fp2AddSubEvent { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Fp2MulEvent { /// The lookup id. - pub lookup_id: usize, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. diff --git a/crates/core/executor/src/events/precompiles/keccak256_permute.rs b/crates/core/executor/src/events/precompiles/keccak256_permute.rs index e9934eb2d7..19ad295034 100644 --- a/crates/core/executor/src/events/precompiles/keccak256_permute.rs +++ b/crates/core/executor/src/events/precompiles/keccak256_permute.rs @@ -1,6 +1,9 @@ use serde::{Deserialize, Serialize}; -use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; +use crate::events::{ + memory::{MemoryReadRecord, MemoryWriteRecord}, + LookupId, +}; pub(crate) const STATE_SIZE: usize = 25; @@ -10,7 +13,7 @@ pub(crate) const STATE_SIZE: usize = 25; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct KeccakPermuteEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. diff --git a/crates/core/executor/src/events/precompiles/sha256_compress.rs b/crates/core/executor/src/events/precompiles/sha256_compress.rs index 421ed54e8d..4c3f42bf3d 100644 --- a/crates/core/executor/src/events/precompiles/sha256_compress.rs +++ b/crates/core/executor/src/events/precompiles/sha256_compress.rs @@ -1,6 +1,9 @@ use serde::{Deserialize, Serialize}; -use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; +use crate::events::{ + memory::{MemoryReadRecord, MemoryWriteRecord}, + LookupId, +}; /// SHA-256 Compress Event. /// @@ -8,7 +11,7 @@ use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ShaCompressEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. diff --git a/crates/core/executor/src/events/precompiles/sha256_extend.rs b/crates/core/executor/src/events/precompiles/sha256_extend.rs index 64d7e4330c..f63998362d 100644 --- a/crates/core/executor/src/events/precompiles/sha256_extend.rs +++ b/crates/core/executor/src/events/precompiles/sha256_extend.rs @@ -1,6 +1,7 @@ use serde::{Deserialize, Serialize}; use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; +use crate::events::LookupId; /// SHA-256 Extend Event. /// @@ -8,7 +9,7 @@ use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ShaExtendEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. diff --git a/crates/core/executor/src/events/precompiles/uint256.rs b/crates/core/executor/src/events/precompiles/uint256.rs index 7c4cb136f4..bcd13e140b 100644 --- a/crates/core/executor/src/events/precompiles/uint256.rs +++ b/crates/core/executor/src/events/precompiles/uint256.rs @@ -1,6 +1,9 @@ use serde::{Deserialize, Serialize}; -use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; +use crate::events::{ + memory::{MemoryReadRecord, MemoryWriteRecord}, + LookupId, +}; /// Uint256 Mul Event. /// @@ -8,7 +11,7 @@ use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Uint256MulEvent { /// The lookup identifer. - pub lookup_id: u128, + pub lookup_id: LookupId, /// The shard number. pub shard: u32, /// The channel number. diff --git a/crates/core/executor/src/events/utils.rs b/crates/core/executor/src/events/utils.rs index 7ef304ae44..681bc6cc78 100644 --- a/crates/core/executor/src/events/utils.rs +++ b/crates/core/executor/src/events/utils.rs @@ -1,3 +1,5 @@ +use serde::Deserialize; +use serde::Serialize; use std::{ fmt::Display, iter::{Map, Peekable}, @@ -5,18 +7,41 @@ use std::{ use rand::{thread_rng, Rng}; -/// Creates a new ALU lookup id. +/// A unique identifier for lookups. +/// +/// We use 4 u32s instead of a u128 to make it compatible with C. +#[derive(Deserialize, Serialize, Debug, Clone, Copy, Default, Eq, Hash, PartialEq)] + +pub struct LookupId { + /// First part of the id. + pub a: u32, + /// Second part of the id. + pub b: u32, + /// Third part of the id. + pub c: u32, + /// Fourth part of the id. + pub d: u32, +} + +/// Creates a new ALU lookup id with ``LookupId`` #[must_use] -pub fn create_alu_lookup_id() -> u128 { +pub fn create_alu_lookup_id() -> LookupId { let mut rng = thread_rng(); - rng.gen() + LookupId { a: rng.gen(), b: rng.gen(), c: rng.gen(), d: rng.gen() } } -/// Creates a new ALU lookup ids. +/// Creates a new ALU lookup id with ``LookupId`` #[must_use] -pub fn create_alu_lookups() -> [u128; 6] { +pub fn create_alu_lookups() -> [LookupId; 6] { let mut rng = thread_rng(); - [rng.gen(), rng.gen(), rng.gen(), rng.gen(), rng.gen(), rng.gen()] + [ + LookupId { a: rng.gen(), b: rng.gen(), c: rng.gen(), d: rng.gen() }, + LookupId { a: rng.gen(), b: rng.gen(), c: rng.gen(), d: rng.gen() }, + LookupId { a: rng.gen(), b: rng.gen(), c: rng.gen(), d: rng.gen() }, + LookupId { a: rng.gen(), b: rng.gen(), c: rng.gen(), d: rng.gen() }, + LookupId { a: rng.gen(), b: rng.gen(), c: rng.gen(), d: rng.gen() }, + LookupId { a: rng.gen(), b: rng.gen(), c: rng.gen(), d: rng.gen() }, + ] } /// Returns sorted and formatted rows of a table of counts (e.g. `opcode_counts`). diff --git a/crates/core/executor/src/executor.rs b/crates/core/executor/src/executor.rs index a5361a1d5c..c72e02dfef 100644 --- a/crates/core/executor/src/executor.rs +++ b/crates/core/executor/src/executor.rs @@ -13,8 +13,9 @@ use thiserror::Error; use crate::{ context::SP1Context, events::{ - create_alu_lookup_id, create_alu_lookups, AluEvent, CpuEvent, MemoryAccessPosition, - MemoryInitializeFinalizeEvent, MemoryReadRecord, MemoryRecord, MemoryWriteRecord, + create_alu_lookup_id, create_alu_lookups, AluEvent, CpuEvent, LookupId, + MemoryAccessPosition, MemoryInitializeFinalizeEvent, MemoryReadRecord, MemoryRecord, + MemoryWriteRecord, }, hook::{HookEnv, HookRegistry}, record::{ExecutionRecord, MemoryAccessRecord}, @@ -143,6 +144,10 @@ pub enum ExecutionError { /// The execution failed with an unimplemented feature. #[error("got unimplemented as opcode")] Unimplemented(), + + /// The program ended in unconstrained mode. + #[error("program ended in unconstrained mode")] + EndInUnconstrained(), } macro_rules! assert_valid_memory_access { @@ -252,7 +257,10 @@ impl<'a> Executor<'a> { let addr = Register::from_u32(i as u32) as u32; let record = self.state.memory.get(&addr); - if self.executor_mode != ExecutorMode::Simple { + // Only add the previous memory state to checkpoint map if we're in checkpoint mode, + // or if we're in unconstrained mode. In unconstrained mode, the mode is always + // Simple. + if self.executor_mode == ExecutorMode::Checkpoint || self.unconstrained { match record { Some(record) => { self.memory_checkpoint.entry(addr).or_insert_with(|| Some(*record)); @@ -277,7 +285,7 @@ impl<'a> Executor<'a> { let addr = register as u32; let record = self.state.memory.get(&addr); - if self.executor_mode != ExecutorMode::Simple { + if self.executor_mode == ExecutorMode::Checkpoint || self.unconstrained { match record { Some(record) => { self.memory_checkpoint.entry(addr).or_insert_with(|| Some(*record)); @@ -300,7 +308,7 @@ impl<'a> Executor<'a> { #[allow(clippy::single_match_else)] let record = self.state.memory.get(&addr); - if self.executor_mode != ExecutorMode::Simple { + if self.executor_mode == ExecutorMode::Checkpoint || self.unconstrained { match record { Some(record) => { self.memory_checkpoint.entry(addr).or_insert_with(|| Some(*record)); @@ -348,7 +356,7 @@ impl<'a> Executor<'a> { pub fn mr(&mut self, addr: u32, shard: u32, timestamp: u32) -> MemoryReadRecord { // Get the memory record entry. let entry = self.state.memory.entry(addr); - if self.executor_mode != ExecutorMode::Simple { + if self.executor_mode == ExecutorMode::Checkpoint || self.unconstrained { match entry { Entry::Occupied(ref entry) => { let record = entry.get(); @@ -393,7 +401,7 @@ impl<'a> Executor<'a> { pub fn mw(&mut self, addr: u32, value: u32, shard: u32, timestamp: u32) -> MemoryWriteRecord { // Get the memory record entry. let entry = self.state.memory.entry(addr); - if self.executor_mode != ExecutorMode::Simple { + if self.executor_mode == ExecutorMode::Checkpoint || self.unconstrained { match entry { Entry::Occupied(ref entry) => { let record = entry.get(); @@ -525,8 +533,8 @@ impl<'a> Executor<'a> { memory_store_value: Option, record: MemoryAccessRecord, exit_code: u32, - lookup_id: u128, - syscall_lookup_id: u128, + lookup_id: LookupId, + syscall_lookup_id: LookupId, ) { let cpu_event = CpuEvent { shard, @@ -560,7 +568,7 @@ impl<'a> Executor<'a> { } /// Emit an ALU event. - fn emit_alu(&mut self, clk: u32, opcode: Opcode, a: u32, b: u32, c: u32, lookup_id: u128) { + fn emit_alu(&mut self, clk: u32, opcode: Opcode, a: u32, b: u32, c: u32, lookup_id: LookupId) { let event = AluEvent { lookup_id, shard: self.shard(), @@ -628,7 +636,7 @@ impl<'a> Executor<'a> { a: u32, b: u32, c: u32, - lookup_id: u128, + lookup_id: LookupId, ) { self.rw(rd, a); if self.executor_mode == ExecutorMode::Trace { @@ -685,13 +693,19 @@ impl<'a> Executor<'a> { let (addr, memory_read_value): (u32, u32); let mut memory_store_value: Option = None; - if self.executor_mode != ExecutorMode::Simple { + if self.executor_mode == ExecutorMode::Trace { self.memory_accesses = MemoryAccessRecord::default(); } - let lookup_id = - if self.executor_mode == ExecutorMode::Simple { 0 } else { create_alu_lookup_id() }; - let syscall_lookup_id = - if self.executor_mode == ExecutorMode::Simple { 0 } else { create_alu_lookup_id() }; + let lookup_id = if self.executor_mode == ExecutorMode::Simple { + LookupId::default() + } else { + create_alu_lookup_id() + }; + let syscall_lookup_id = if self.executor_mode == ExecutorMode::Simple { + LookupId::default() + } else { + create_alu_lookup_id() + }; if self.print_report && !self.unconstrained { self.report @@ -1119,8 +1133,14 @@ impl<'a> Executor<'a> { } } - Ok(self.state.pc.wrapping_sub(self.program.pc_base) - >= (self.program.instructions.len() * 4) as u32) + let done = self.state.pc == 0 + || self.state.pc.wrapping_sub(self.program.pc_base) + >= (self.program.instructions.len() * 4) as u32; + if done && self.unconstrained { + log::error!("program ended in unconstrained mode at clk {}", self.state.global_clk); + return Err(ExecutionError::EndInUnconstrained()); + } + Ok(done) } /// Bump the record. @@ -1156,7 +1176,7 @@ impl<'a> Executor<'a> { self.executor_mode = ExecutorMode::Checkpoint; self.print_report = true; - // Take memory out and then clone so that memory is not cloned. + // Take memory out of state before cloning it so that memory is not cloned. let memory = std::mem::take(&mut self.state.memory); let mut checkpoint = tracing::info_span!("clone").in_scope(|| self.state.clone()); self.state.memory = memory; @@ -1347,7 +1367,7 @@ impl<'a> Executor<'a> { self.report.touched_memory_addresses = self.state.memory.len() as u64; for addr in self.state.memory.keys() { - if addr == &0 { + if *addr == 0 { // Handled above. continue; } diff --git a/crates/core/executor/src/record.rs b/crates/core/executor/src/record.rs index fe2fab16de..ab78477f02 100644 --- a/crates/core/executor/src/record.rs +++ b/crates/core/executor/src/record.rs @@ -10,7 +10,7 @@ use super::{program::Program, Opcode}; use crate::events::{ add_sharded_byte_lookup_events, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, EdDecompressEvent, EllipticCurveAddEvent, EllipticCurveDecompressEvent, - EllipticCurveDoubleEvent, Fp2AddSubEvent, Fp2MulEvent, FpOpEvent, KeccakPermuteEvent, + EllipticCurveDoubleEvent, Fp2AddSubEvent, Fp2MulEvent, FpOpEvent, KeccakPermuteEvent, LookupId, MemoryInitializeFinalizeEvent, MemoryRecordEnum, ShaCompressEvent, ShaExtendEvent, Uint256MulEvent, }; @@ -89,7 +89,7 @@ pub struct ExecutionRecord { /// The public values. pub public_values: PublicValues, /// The nonce lookup. - pub nonce_lookup: HashMap, + pub nonce_lookup: HashMap, } impl ExecutionRecord { diff --git a/crates/core/executor/src/syscalls/context.rs b/crates/core/executor/src/syscalls/context.rs index 3d9716bb4b..60c93e478b 100644 --- a/crates/core/executor/src/syscalls/context.rs +++ b/crates/core/executor/src/syscalls/context.rs @@ -1,5 +1,5 @@ use crate::{ - events::{MemoryReadRecord, MemoryWriteRecord}, + events::{LookupId, MemoryReadRecord, MemoryWriteRecord}, record::ExecutionRecord, Executor, Register, }; @@ -19,7 +19,7 @@ pub struct SyscallContext<'a, 'b: 'a> { /// The runtime. pub rt: &'a mut Executor<'b>, /// The syscall lookup id. - pub syscall_lookup_id: u128, + pub syscall_lookup_id: LookupId, } impl<'a, 'b> SyscallContext<'a, 'b> { @@ -33,7 +33,7 @@ impl<'a, 'b> SyscallContext<'a, 'b> { next_pc: runtime.state.pc.wrapping_add(4), exit_code: 0, rt: runtime, - syscall_lookup_id: 0, + syscall_lookup_id: LookupId::default(), } } diff --git a/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs b/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs index 93ea8f3f77..703efa87a5 100644 --- a/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs +++ b/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs @@ -55,7 +55,7 @@ impl Syscall for FpOpSyscall

{ rt.clk += 1; let x_memory_records = rt.mw_slice(x_ptr, &result); - let lookup_id = rt.syscall_lookup_id as usize; + let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); let channel = rt.current_channel(); match P::FIELD_TYPE { diff --git a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs index 6d737db27f..548566d61c 100644 --- a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs +++ b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs @@ -63,7 +63,7 @@ impl Syscall for Fp2AddSubSyscall

{ result.resize(num_words, 0); let x_memory_records = rt.mw_slice(x_ptr, &result); - let lookup_id = rt.syscall_lookup_id as usize; + let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); let channel = rt.current_channel(); let op = self.op; diff --git a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs index d4e4748d9b..652bba0037 100644 --- a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs +++ b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs @@ -62,7 +62,7 @@ impl Syscall for Fp2MulSyscall

{ result.resize(num_words, 0); let x_memory_records = rt.mw_slice(x_ptr, &result); - let lookup_id = rt.syscall_lookup_id as usize; + let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); let channel = rt.current_channel(); match P::FIELD_TYPE { diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index 5c9d413cb6..5189d77747 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -2,11 +2,11 @@ use hashbrown::HashMap; use itertools::Itertools; use sp1_core_executor::{ events::{ - create_alu_lookups, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, MemoryRecordEnum, + create_alu_lookups, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, LookupId, + MemoryRecordEnum, }, syscalls::SyscallCode, - ByteOpcode, - ByteOpcode::U16Range, + ByteOpcode::{self, U16Range}, ExecutionRecord, Opcode, Program, Register::X0, }; @@ -110,7 +110,7 @@ impl CpuChip { fn event_to_row( &self, event: &CpuEvent, - nonce_lookup: &HashMap, + nonce_lookup: &HashMap, cols: &mut CpuCols, blu_events: &mut impl ByteRecord, ) -> HashMap> { @@ -252,7 +252,7 @@ impl CpuChip { event: &CpuEvent, new_alu_events: &mut HashMap>, blu_events: &mut impl ByteRecord, - nonce_lookup: &HashMap, + nonce_lookup: &HashMap, ) { if !matches!( event.instruction.opcode, @@ -406,7 +406,7 @@ impl CpuChip { cols: &mut CpuCols, event: &CpuEvent, alu_events: &mut HashMap>, - nonce_lookup: &HashMap, + nonce_lookup: &HashMap, ) { if event.instruction.is_branch_instruction() { let branch_columns = cols.opcode_specific_columns.branch_mut(); @@ -522,7 +522,7 @@ impl CpuChip { cols: &mut CpuCols, event: &CpuEvent, alu_events: &mut HashMap>, - nonce_lookup: &HashMap, + nonce_lookup: &HashMap, ) { if event.instruction.is_jump_instruction() { let jump_columns = cols.opcode_specific_columns.jump_mut(); @@ -593,7 +593,7 @@ impl CpuChip { cols: &mut CpuCols, event: &CpuEvent, alu_events: &mut HashMap>, - nonce_lookup: &HashMap, + nonce_lookup: &HashMap, ) { if matches!(event.instruction.opcode, Opcode::AUIPC) { let auipc_columns = cols.opcode_specific_columns.auipc_mut(); @@ -628,7 +628,7 @@ impl CpuChip { &self, cols: &mut CpuCols, event: &CpuEvent, - nonce_lookup: &HashMap, + nonce_lookup: &HashMap, ) -> bool { let mut is_halt = false; diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs index a87170afc2..35a04f8238 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs @@ -8,7 +8,7 @@ use crate::air::MemoryAirBuilder; use generic_array::GenericArray; use itertools::Itertools; use num::{BigUint, Zero}; -use p3_air::{Air, BaseAir}; +use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ @@ -202,11 +202,18 @@ where let main = builder.main(); let local = main.row_slice(0); let local: &FpOpCols = (*local).borrow(); + let next = main.row_slice(1); + let next: &FpOpCols = (*next).borrow(); + + // Check that nonce is incremented. + builder.when_first_row().assert_zero(local.nonce); + builder.when_transition().assert_eq(local.nonce + AB::Expr::one(), next.nonce); // Check that operations flags are boolean. builder.assert_bool(local.is_add); builder.assert_bool(local.is_sub); builder.assert_bool(local.is_mul); + // Check that only one of them is set. builder.assert_eq(local.is_add + local.is_sub + local.is_mul, AB::Expr::one()); diff --git a/crates/eval/Cargo.toml b/crates/eval/Cargo.toml new file mode 100644 index 0000000000..2f6163b988 --- /dev/null +++ b/crates/eval/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "sp1-eval" +description = "A performance evaluation tool for SP1 programs." +readme = "../../README.md" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +repository = { workspace = true } +keywords = { workspace = true } +categories = { workspace = true } + +[dependencies] +sp1-prover = { workspace = true } +sp1-sdk = { workspace = true } +p3-baby-bear = { workspace = true } +sp1-stark = { workspace = true } + +anyhow = "1.0.83" +clap = { version = "4.5.9", features = ["derive"] } +csv = "1.3.0" +serde = "1.0.204" +bincode = "1.3.3" +time = "0.3.26" +slack-rust = { git = "https://github.com/dselans/slack-rust.git", branch = "main" } +tokio = { version = "1.39.0", features = ["full"] } +reqwest = { version = "0.12.4", features = ["json"] } +serde_json = "1.0.104" diff --git a/crates/eval/programs/fibonacci/elf b/crates/eval/programs/fibonacci/elf new file mode 100755 index 0000000000000000000000000000000000000000..10b446cae33f413cf491b66cbe04b8bc2b8f26c6 GIT binary patch literal 127644 zcmeFa33wIN-S~gz&YgRc7#5k3unB=n!cs)-2(f*uCWQdnR;w5mZMEeJsO_t55zsE0 zc)1C<>#(W?A#7S-s~tn^^3z1T3EIBef(c+PsF46_-H^qlbbO8mxxX8aeSKZ|fe;M+humA7ftd#s)azA)}_siUSGhhF& zca)O%3V`Z+gErGD@!?bCk)`62%T|H$3+ z(|=$8O@V(?;NKMZHwFGpf&cGOz&4D(#R^Xj#RgY|VuS7p#qtN5v5{vOu@NOkZ1_b+ zZ0L6lJM(nKeIqt#rE)Wil^rfoc2;-gW}P0gPs&$rxL94M%2j+`IK#FolxrEvj)aw4 z8CFZM$GgkRXPKoHD&BvTVHVV@c-YE_zqvZwo42~y39nYyy|?1i_@xi41kVzwq>A5K zW?ZN0Lh+nZGf{evir-ykwoEJdMA{|_N|jk)sl*x!xE5`99x@B)bN2pjcBELv?@MJQ z^6Nt;<4FuI37Nx;P-0lUVGge_62nUj^9zQ-n9Z5xN)_z~cdK-RZRM-j;FT&?__z}M zeVprVkb6?cwn~3hD|IVVkI2=oN_wtUY}gU%J|^QU9y+VLs?*OZQ@?SOjQfxJ{;hIf z#&z9$13nhK^IWB7sxjNmLW^-klv!8_TnjuR%C3y4JWrk{eq*jpK`ZXhi5T(wcs3^z ziud99M&16wylQ>@g?~*v!I%!mMxLw^Lo8({X_p+YVj~_`8t6Jx(e+=LOa1fF%G=wD_$N6 zbH5EfV%~G1WqklY^@6~&qm^|sH|`O7xxiAiF$9*6WAa6*l?*%W~^*qO_E8oUU4yrVg70$#$MI zt1afn6uk9V^&FN$gPsMdR_It6dC0MvR07%vU1pZ^EHbVmJ$~!cBl0^tl8?+Nc(&tn z>;L%A$2~>=$bjn7nVzLjAEBpyeo{cYda0kLX)w-9JHxJdCg}TF`UZA!G~kVt9eMDm zw&rC2*_sC7gU)crl=;s_HQJHy9Mvu{v2&k`HU)h?M_qsZH7^ye;1wfL&HX|1p36$GLK%0AAYExSzs`iJ(W35c(Op5 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�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 M@BeiwI6U`%01P#qEC2ui literal 0 HcmV?d00001 diff --git a/crates/eval/programs/fibonacci/input.bin b/crates/eval/programs/fibonacci/input.bin new file mode 100644 index 0000000000000000000000000000000000000000..a8e468e7760f7c99e246615b87321c7562ba53f2 GIT binary patch literal 36 ScmZQ%fB+UK{e=+W`9j literal 0 HcmV?d00001 diff --git a/crates/eval/programs/ssz-withdrawals/elf b/crates/eval/programs/ssz-withdrawals/elf new file mode 100755 index 0000000000000000000000000000000000000000..ef27bf0f3729d8a697d5f422bbc23b9d546185fc GIT binary patch literal 200548 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õV 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 literal 0 HcmV?d00001 diff --git a/crates/eval/programs/ssz-withdrawals/input.bin b/crates/eval/programs/ssz-withdrawals/input.bin new file mode 100644 index 0000000000000000000000000000000000000000..4ac5fc6cf890b46738523c4d4d9d964e312f368f GIT binary patch literal 24 KcmZQzzzzTa7ytnP literal 0 HcmV?d00001 diff --git a/crates/eval/programs/tendermint/elf b/crates/eval/programs/tendermint/elf new file mode 100755 index 0000000000000000000000000000000000000000..6ecc25003e0727a072640401ee3548822a263164 GIT binary patch literal 1175064 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
GIc)k!)4;oi{VC|#69qy=Wpu<|i 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

2w7!!XW0hrDZiUB zN?HcZ8b}L{7TGPTo&AUn5}JY^X#uJDa+C;eq=k)rpiOtL%M@&8PIqtb^Y}sg=qmK6 z?0rd7{Mx8)lq90Q20!*S*67)yn@DN1-TJjkw~;Dv$cU+awF%r0`8I(r%1FZN>=^@F zufOnzl1DsIjI#%3V#E0_^p{)7L&kF#vQHIgNUqblaFo{#23c zd1jp)Y5=ciw8J|*2k-)Cj#)$5Q_*W}#HI#5@eN`_>Ev~tA@_4I7?8ROMA{*nXe4Dk0Xmc0w_R5?0!HsrS<2dIm6o^S2+4d^k@EkxIfKMS(Xo&3K6 z{d6Lu!*`i>bQ|B*s`|X~&#P~JV>Ws}^ckUX_)E{icOE%%%3AQ%4Y$~#uI<$Cbdqu? z5Bcyt;j)!(2VJ(y9!&OG0lX7wgC{>no`N%&acZ$ZiM7|*nOCOP@fiw7@ME7`}v848p5ntMd&zQ1j)po^i@;-E#pV97Err;HPi;Pfr zobQ%1zGJ4y3d!&D+P-Jpr;8k!tSh6f9`>fG9pKa2;T`TSX@gIsw84x2nUw8kR)WW0 zRQ=|`$5pxZ;x`$OPb2?tC!S=AW?~!hr>Zt)x!k8LWq|h;g16hBeQJqAeMuRUy1?-Y zO2YPTgM*LdA|tW47I?>OgC{>rY?Dd&>~{EAPCLBbxgB2b0H0vZ3Gkqt z-tF*--W}lc+slvTx4{b@%Jzf&t>$JkV<_bWF#}W4H~zP7pWqzc{!Ul=g}%5Tyo+;A zR9m~cC3=_3x^HlI<(w61+s0HS@9_=tm}+NE8=PC9cUL}D3O>=j4Ia6pGqKf5Hl_~f zLK*1Pf$!E1?{sU2*SogE$GWz|$GWt`C%Ux5C-U0iov+|+j)yPQ?qHm+XAH6@NI6Gr z$Q*Qv%;RZ0wMvOGiJrUUU-&IL(B<-|1zP>plI{K00X+ z;tfe-z1{Le&$hF-#h&e!$9njj$0BERCt+x#z$Uu2!NE)Wh;LXDzHb}6G05qm&UOjl zd$hyr9pIfl?eKc94)DD?z+cf`zH>!8ywkHCKK2#7#V#fOcIu9?p*z8?8}_n$7$@tn zMcl46huFu@`}C53W(@rZUA$@7FxX>Heni%R0=L}hC-sx&+q54#6c~eI{n~uoq+Z&c zZ#U5Hk@&qS7^iQLCZGX%_`(^5j%8;zpeq%4_6ymXI%Hv){Q4pD1XD*E_)L z1s&iEJHYpAhmRGum#_D0hj%W+3m)Df+L?;JL3FsA_o{w1SI!OWKOgVr{R(vc?8WEf zD>U-3q4Wv!`_M*o3K#JU0q3^ypklEOql=iv`F_l#!!{PmFaOi0ec z>JP2@yXX;&0eXLTK%&?vjTO74PO&jiFJ}ENGSDfwWloWCrC#J-nJ7djQIgb&DIHZ? z45YD+SdVqA-=d>hkFMaEIC`p9^i+Y4iZg+#%q;X!(cM*MG|)|nUJ5-*m7Vf&m0x!e zT~wBXuExPOR%N@>t9;{;DtpQ1DsS9c_%b%)%^NQ3l{i;njgoX~}NBI~Su!e6RM~q_y@s*>AubhHHl{|@$lo-mD zQ+dA(JI*0&mlJ?lLyTn?Vi_aEGNM=BQ-m$64!zz%-QCg3*^k+@`y%HHKtIm8m9qxj zJ^PUxElut`Fm_iEFFBJs4&wVaQ&Tos6L_A*H^wE#(!9NrxLS$T9E}~6b*lRYY+=lW z`%Zz^xWEQGv5&fs%-B5zzrjJ^2Y-SWd)=Y+AznqJoY%o zjJt<8f>ZG2-EsVmnNuR;Y+puS9i|Bjxh0 ze{g@p%I(naSdy}(mF+dkB{PL|bVwFq#=~l_r z=wO`7G0Xo?^Oe}-(ErhMZb=_Cf4xJ@xl{0lB|DKJ`UK-d=G?TtfgX20d&XM$=g_Xa zV~rZioST-%oIBJ$=Pm?u&i?Er&3`bMbM_+_buVQIV*s8ZcP6X#@Fc1HXDw9!Q`+7q z|JNnoFHgcZC;#sV-n%F9b=!(B0eWm>FY<+lT=713>1UKrJ8|0RKcn2G0AE2jX;O!s zLYd>Kv-Sz#o=~#7>bH0+=h;tY&Hb2rDwt<72Kz9_4j;y+`WkirthwqQcuWgpZUQmK zpOCUf9eJL(<7vSe$xG)zkI%Ssvm3F-HQYyeALq&L<6QqCK^*#%vx!CD#aW;?24{Kq zKu&z;7x;`$3C^2-*CkGUv~Fp$uoD}^sm~%#y%pQ?Wa89kG5?Pdr_NY5m_K{Jr>!>N zGjFq2g~t)2ega?2p(;+@JG7BFb;fy=xig_eTOI8}x}G@oF7SX7eRWENJD%#a)v3&Z z)U(hO{bJf#V$|cvBXfvR7yfZx;?#*zUxq9{o*4BL%roNYGWQdsUc~&mkr?&;?CG{^ z5}$5mRS?r&L|l3+bX}uj)IIimvL8yusB=C-O#Fbwrx-o5;;U`*?(f*(@TrO6Tk}}h z%I}9S&DH1<9P|yhp&PgxeZvFj24d(79uvI_I*J!{_xXrs{BksBQS?RT#INAj@Y`Rs zYS?&m&KO{P;#;ty2mGK9_x^Onb{xkBO+SaP!f(44{WRuOl|+s&@ii?^T@3BsyHJ6MoMP(u zo$(n(FCqWqMer;+o9!mUA9WM)U>V@G6ug##*YEH}f0eR-hhF(N+?V%bd=q}8dq2AZ zzY6O4Xd&lF?d3d^FF8kw?-~Z-W4_n$o(BI2abTN@@K28u!v!w9^W!a?x%eu)??v!h zoUDHqe31H^{=&J3Hxf$*PT66@zcvgGe>D7s)RFl|&a`U4@Aymnc>m7a=*#^tJab=* ze=TuI@mbga{z6>QjfTD8pU8WdvdPQf3=)GFCgXn2!MdKj(VU0#kzry(k!QJ!#rBC? ziBI9oC+e{uMkfPr=fBtp{W$SpK5<~##HU?L+?p|y`oXV>c3k_1;C}|`BJdF0BCP-5 z&xLBxk{B)H3~k{#gBY!3Ur3(#*?33(&N_QW(NbvYw=7K3gSxR(`W3_h*#Dqy;AZTD z#yn@A3C@inPx=N-X^vA(G*_+Vp8yMq|E*NMX*UCG4EA7#F%aG2z(j~WScpAXh&@=yy)vOA!$*>Pu+ywH z_;ttd|9C7*&cd+Db@1VbzkyZ4ub5vUzXE>wx`v;0NS*Qf6Y;gKs^-78yjq=?F~}%N z;NKg=p2@lSX z4!i-p0X#ZV9eRADyb$k0ybtkS^!{HfFBa`kUIpdjK&EUotbW&*SHQ>?wTQBk9RAstGc{O?9lm<@FMB%)p$(}V@51zFqXpaw2EC<@>FgJ3T8`;c_Z01I`F;LHD zZb+YWZr4Y2W~|2;>yK%Q_RNPQ{m!a3i9hq@u~Ypo&|Ss?{eF2o-3nZa8Lvr6w&zoD z(7=H>eCP7snL5#Zbk>r-MGp%Md2PNL?_1@ads$_%Uif14vP$~(wu-OrZ52Ab@tx?+ zSWsuyc=5Q<7(b`Bx~p#rd}R~a?Rix<3f<*D@7m_+XuiYWkAC>QjO#5Ife~LKe4w=S zU|wwbmKUa90=N!iZp$AyBggR4=si)RGs@K9#zA?i9_|?Z`ND&_BZR)-uh;pRq%k0ZPz|wJoZp{$sD>ox2k@} zn9TFiXp8b0>)6KX-zuN6ueR?E;NTZR!!}xIyXe>6^nGvozBl8qH{-7ti0Z3G7X1KedAYt7V?0&EJf=>go9CdQNS68IXiL;*j0*&wdSEpj>;#j#Fqae{Lp zbg`pk871)5l0=qUpkpj`vc+#&$(i_bE1zuqy}jk#l;5`aYepf#V z&e`Cc4bC~>oCD4|;EdggIII$_Pmcx23sXixo5V%W+_T zh8N~pWwAVXVV+geuM51ei`Cs8#+PurW`5Qb-foJ8>A6=8Y3Y{QpWLXS;@ECldA2Qz6=rYhf3>XbQ$bwfXf7F*IXQmOyI6zbJ zf#K16z4{wiTUl3uVO~)u?fHqoR{yh^w(F8tlcpW(BWpQjsQjvX!9@ob%6BC8SmJ|a zom6@fV{I$z6@lwB0Rn$xKbryt*j3 zya;bgXyR*Y){fpMIC)XZPl>kG|I1|DTnlS;l~ow4LN2JX^7}c+YNIUf_dr$~g{(FT z9yyBlqr94SzHLe@VT7`_DE>E7=-@?0?n>GwGB}xn+|nv3;DYCVM=$l{pZF=gpp_`J8L!o$Z1z66e2YP0%??OyZ6IU>%dP zdNE#9dB|2d$@O0=Ff?qFi`kTn2Gqft!5}{ixy!?lan4^cE~)m#+4pZ?PsOpTj7zae zF4g_Us3`n)<0yPXqoDs$(Eq5==p&<`|IxJTGU)%Z&VEnHz#lUIGeY?nv+v@H3qm8K z7lcOLz`oYoF9;2}FEcc>EK|kPcQZeG2{gyfYb9Tw13g{|gFrT5T2y_*JuD)fAS5?&2=jgjbTI_FxEQ(^92ylJ3|$O{E(SvvgLyxg_k%-2HV#JS zUSwPbuNYlGtPuXm5lQqDlmfAZhbOR)sbhFjkM#{`_gwzw-LfA?_IQSf{|}FO_!`Sh zoZ_3_;ezmemYH>Ji2VU!v%1nUTmJz3-r=UoW0qO`yAWp@gp(!zVVRZ0H1j{}<7s>k zUi?pd>v7907#SkYE?heBSA38D#sA76I%?us;PX7rzJjb5fY0|=471FpTY%61jAF|i z^EU7^!lkeL2sjPE&j?o@TEsU3KO=0u{iJ2iyA${s;npXs`6dVW8R2wfS(aA zc;%m#S-KGT8R0F+0kiaN;PXF&x{?EdpB^4_>?^dZ2KedW#QoP<=9cS#pB}D!;d^}Z z3*e`RD^AVl`Okr$9xlFmt!3tA0Y5#Qyn;DVHxu~jgb2PsyM6+E;7lXm;k+}zPYY+g zQ$t%`1%6t%VjFyE9x|5yrGE^7=NRCpg~wcijz4cT@cF)KIDPdD@YBM11IT@tVE+aG z=Z*R<_#6g4-&|D$%ss#lgy*G~()KaH4}`Ps1kcJ}0Y4C~+gV0mJr4Xpc+8I&i{jnD z4}@D^{U!B24E#X2v_JS)-U0kTxZ>M8Ez_(5ejr@@gIeJC2fjbt`Z)T1MH%q@VRKzQ zb&fb&_0^c7_Zth1vle3Qh^TLC`e+TgSKaqAN?*~5Lyl^FD z{{(zrIBOvDXUv~~?+aHRm_$Es2EH#`_tY(n%VyyF!t+MY=9>=S`@)Hp_tUP?!1skq zw=CqFvB2l~?j_(>27F)Gto<4F4gtOvHeY=dm>s~^!t<`*Ond(Vd@a1?)GPEka)tki z`xv9VmB2^lzKA`zhyB_|*q2?+KJEJkhK5`?AT(0PKKvLv@yI|UnJ500i{i;K@U*gv zj6(eUT;ny!rL2U?k14rI$y=)8uiP11(dTaF>cQPQfWml}E;q zPm_GP?2%(Vaa48cy9&*Y39Q>CmJ?VBRW3fBZ-zbAN6L8k)C(MVt>9F{d7PE#5oLV@ zC$Ai9GvMacZE`MJ4Yo$qva&kMm*8jZEMKVG|JXvE8!tRpzM@NZlZqTn9r53Q03hZq}*fuynaj= z-Reh2R(-GFsPe?dO8L$?5gJk5->Sm~tazT7tu3rsy+X|1t(<903_(F9_v^`x^&sa5 zd-rZKNE|^O=K!~&lT@L9Y>|1?+cqnS??k=HNcMM`hnF!NT9~j+;p4FW>Z}33<_79p zO6Ua(7l`(K&&1ELIOmS&*QCFK4&fhsHahTxV!Wt-R zD}Ck?fA9&owWV-hO8)8hIr}w@eTB!lG6xpp`^KkW46i0uuZ6g+2KqLi9OjH=^Iq1Y z86#_~%7@_AlyED6Bw}}mNSjTQT&RXz) zYu1Jvi3NLzdKV}>tbK!T>fRl<9bD&Y_Cs8E zH7Z!_fy3{zjs4m&#%7a>d2||F;1qee8VXvye!Xr1YXanR5S%B>0%r%D=X!h93Yr*4 z#=d0&u_~wFe@C)q-@aQrgZLfk>sjsg<|caL!18MxLKfj9k9%eqPMIB@h7 z-qcade72yyQu?T<4!oJqG1fDarQDZ-H}g4lZ;v}b%u*@+&2?O(F6)e}U9z@Q%ewm< z=J2!dg<9t8Z-L1=)~w^uU7Oe6<4@AxWhuN{bgO6`updyc?ZTO~S^9e^blxHT-PiSj zYb~_8;1t&d^tYPV#L2espZcIf=W*z&c_%Rk;O&f2c_ZvX=Jj6ic9_F6im0DCe2vMz z!(wpfx^o6}Si+BaUEV++Q}^RrRsIEM?{?snc=oxtTk9v2qX0^CT;Pg^?3u%LMV?KS;tm?3e>J>do zyp-T&70p!i*m-a7qVMOwT`y;G>EejGu!aV82JZTY_%oB@wLVIP51y^Ij z0(?_Pvg1R+d*=+FRkRk^%oC}r3-5R7@0*d|M~HLHp>OipTR#&{ec=RSWY7N?Ky-1t}O`?^=(?y1y&7wglUy(sl_?_L8v{^%BP=SsU&3~#)hD|C{Y z-x7-~^V@kGylDexGpG8y3g6ntDY|6;BDpc-+yyn31;wd(auQz2{2q3szujZF?oK$6 zn%@n~?^D3h)jY8iQb&k7n5)uHd-pNEc2_?+dt<=fuG%T@4R%Ckqd zAyX^CyOg@Or1(iCFpJN_+n9V(_Rgg6ZUOHKV9)y;-YvTO&S%WKH_;6)?5%kBN$6g9 zH+&YpeSwmRiLJ!8(BEt5?`D~!^tVHQ&pNL7ztcc}JM?$z-mQ(1AAx<1$GHk`5}v($ zE3zvI-ZRl1wyJ#&a;^ktTqqi~3zD8*Ibkeon@7mU!JH|~H=G9Mw=-YCmNAiY86>AZ zb77!;XD#|fy70{bc1;#}8ET-fY~2p*ma)4)_8YJ-gE}vvo@1%LI!MgRe}H?t8e^wn z4sq7c0^hrLYsp1+@)U8eTtyQzk4hpt;<* z&}Qu{!jL2^c6lv)D~~#w zR2|mTI{5h*6$>tSSyM}iLxdiQK~#9|etb8uQ^z$o93!o|(Im zXD%_8MGB7KL_a~BRru|XV`jMlPcb#6@zxiG7b>cg*H|5-<)F*hKWbK>&2JiUpqlQK95NjR% z9h;-%g`B%Vte$3!&R9ntl@WVONXj}D#&dtNwC;bo3#rvN0 zZ6D`*!_j3w6dh4w+&Ln2G_juV5o5Yu$1gL$`Q9kq`31c31L9wj#prj9;CNVfC#~Zg z?r(~`=6W?c;7MX;uLS4gT(8pHznmpbViK}5$^IG69t^I*7bCIxyH#w2F}ivHxMit( zVi}x49qhC3n~J|Z%(?Mb62r7X!EvVlMsw0Kv44(S=>GXE@i^E8>)~^^qFda32z>Wa z_9|7@p2Yp3UuxD$ANJl2z2#nFF|0!a`Rb#G5<)9kY~x_dv@N$Y_HUcoBr+JdgeJkNr!h;3EOJRih7 zFMY+ct%{k`gWyG}dpC}*ntXu0|G(!tk8zW|f6)v#0qtXFS;f$v1?@G_2Sp9Qg7#t$ z0&5=kvw#KdrS9EbHN<+;uCrWs?Sj|MgV$A}uePH1#o(EnQhJ|DJB#2$XJsD2|KSho z;SZ^M_mKyYdB_8$i&7tZ+Mzl2Aqx+x@^rdEO{z`St#!nG!pGkX;liRS{XZVT9v|ydwUXd;;i7rRd8BbODqz+wMRWN z3l^Wfn%n`^eVlsif|<(B?CY#vts5itzRnbKO*Xg5o~|rs4YWIywUa}PVN0!UjE-ho zgP>pXLpe7=`**J=CZNo6_78)P{Zqxn8pF!^TGNK<&PDHQPDVO$v0u@7mgRh(Z&ne@ z`>+q2@g;$q?fh*hd2WxAC+ZLI?bYxt^rzaT;Jku;3g4oi%E?vn4W4to>1)WGrChI) z_v~9-O!pU!hONT>2OKl&i|yJ>??iBz4F*-1<$v`&+l~{!6p}!gnib zuurqGyW5nl>`WQUclGq)2~Yo+f_}m|6XJUkd(`&B#{&D&S+D_w=9SL!TgG@AI#Q|( zH1Di>pbLiG^M~xAxd6GmF{e`pPuH_Cpk9|;`#sTuhD-_opg#OB?x4m?(K ze@ky4^1$a!AcjM@rwa~oM6BaO+v6)6hQ#b(&KBR2amPTw+j}N(x_bZ+yHmdNU&U<&)@05+| zp5VI6fe%6d!INKVqdKdgdBFj_OK9G~9__q$dwwa+r*PWl@u9vg@S)Af2>4Jx_yYZ6 z7gTT$AL<7mO5MA!l|Wl-=qIl9lRC4LxNG+jc!%f!(7b1V(od_re)9Mb{j|#KC%Jcf zjQuj2Pw(PGbt5Q$6j(1YRtFe6WRZ+j5}fv96R*Q2PTjlX8yLH_n*9J*8M{OUyofp; zo+7#QQnVcH@9Y;^UL$my?W|fw%!GcSH4Q(+d&4A_J4ea(A!YrYgXFB9^B=Nand7Wm z2Mt#bux>^NICd@cPwdCdBXsL2==tZ+^PS(p_o?St-^+vU|EXDKre=TebG|FfalX%Y z8{WabepSll%DvMEJ>cE{rtK5xza_do`53m-G-BzI`?bS$YuXsq2J7JEnmze4?yvN0 zs-=v9$b9y@Ne*8p6B?fejrW7bk6ofW)1dMG(DGrk%!96sdU!5cWjXY>=@h`Ep z;W?bm;@p@`xi;{ara9BbQV#m0oV)X@l-r6=t2*2M^H<5EzJXZimDp_ku(wZPk4$IJ z0I>TVWY2)${VqAs(Z~PiUG$MVh@X9lZwK=2nbf!F1byFDXV`h){+j*~SzR{3eT_1b zW94USn6GzY6FsMFB4_XK@LSxBoi&~Qn1bE)1bql!PTku*=Ro^Cu-`5o;O=BTeR4DX z!?^lx5!xreu@AUnuOTxwATtE#!^n(v$c#>$4&e9zU`+h+f3pJzP&ep%>9F_JkJvL-3<@=tZe}`;GqwpJw`r zEB&N$6be6jBuBSWwC~yG^wS2fpFDmU`FweQTI78XkM=!&WDSNNmHvkL zM!&(26b=PV%(q$0zil2)+}m%I;8SV=C$55%$+G};EU&@_s!>3zXWZ!76HCXigvJ0)Z;KTP!Mi;2gwfaAS%-07xH$SM(l6G!Jt`CHEMaR$6 z(cz)@+@s9rH0+kO0+VOZ``Y(3XOSNpY%MVLe$Ly-{(jg3bJi(c->uET=F8OGi6d#t zm73%C!_%Z)&^`W6>o9ab@hJCKEB~J8iNrT!JF_o1FWR3oQi*N6fU!arulo#qkLlLI zZ?f+OSv+SX-#}Y@qj<-`|ALlZ>?i--pC84Sn4(SD|1|v@;00|`Ugb*1muOA@wPyeE zD7wW&_S9U&o)h3>vpNTWzu|An2TA@qWwSa5koS|(Jyx`!KlI1$Jk6YIC!gcj=$E%V zTbG<*p8fkAc0+W4yE{lu%PgheD_P%E#e7A-UyH1#tS2Yd(T5KxSoR}7q|X@3l%3yA z#;4{A<%{#NyP1=vFH?8DX9v#iK{*q=zk4!<1 z-vu0GmukcB@mJk~-3>3P4Fcy$`1XI&Chj>a*C#mxKq8PNGJQ##Rq1LsC~ z!_lPdk;K_K8_s~yb=YxaNh0yCA2Rav=dO(ZtBmCay z>GjyB+{>Q7{sFGwbWRtlC0DI{le?T1t#mtM7*y{&%_YLOjw6Ww651=pQ@!zJ+!=cH` zv9m{Wy-IW6xD0!_RMD}^-bBu^5E(nbDjr0?Bfm?ZMV4O;Upu5^IXDh*R}Q8gf%m-T zUYCb_olbs+!Qcj8Z^Cw;{w>NLX0P5U_Dx_D6tvH={%bsViUtjF;6UrXPhXAkG z?|r*;sV;s5=kR9FpO9!^eI}Q0+Zi|f1&6QV+XL!bwU35&I)~voE7HLE!i(HDXm{pu z%Ea*TY@&~kvu6>Tb6t_=f5C@n?L!8wo2&dUa{fGP4*kWqXz#j3!_SC616nZdB7USS z%{DCh<~U)z}nX3zp}@{Q;yR{;Vt50QtKPgHTsBk0RKGeU+R2iS^rvhqk>~k zoDEKo0|&YnxIO2=PiBJ?I3AxNIFYAL`bkgqlL4$e%EMdWY1Y9y&3Y2OX3nLQV}2ei z)vYJDAP2mA`}G!RI8V1f<$CQL`1}Zdv#Dnvyaj&e!0%@60|(^wI{2O7ApW!NzPb2A z>Y2R@eNg%0Yz{L9wCAJgV1RGXPU1FXM7%TKK(763mGem3hD_=TWR>-!k{eVehjH|y5l zkhSaIM=oQN-~BxIBgoAREx-R9JZg<@kBehhzpmTkZ=nybhTjZVG%e$(^zca@9oyrv zcLKG{U5nfjgE-r6ye@kvtSMR0B64KbG3M?V-RWNk9gh^5FaZ0OIs_hT{rTjg`Zn{n z*B$KNMFy{emS??(oewRqI}EPN;a5@eZVUp4r96k8xw>ii%^C*LhO?dz?a8mA8!}1b9KvU=i5fc5_(>BfcbR?cJ^xE34KD(3Fvvqg%{c5XJLbv zdwyqG^PE{rUC@qGq{hHon|6T5Tm+uG{A!)}k^yRsx)ypq*$B)jtj!-2dM4Kn`b`iR z_4&YP2Hq~}LoSP6$^4S_I!o4KMXyZV+wgY#_)KVrD}BzHVc^=#xkV@G+aJQ$*(2D} z0+0BA@cDjU@f^?gW}K~`qAMV8e8u1)@&-Cy@EO+y@C9PziRtc=H&c)|tY_OT?_vXi zldNaYC{p;#dbVXDZ<}&H(FK=#(VdY8tN?O)wXUtrXD{w zyvbSqo&YHO6QUxQwd>r@NtPuH)v?KKQWs z5{(0zlehpr^HcD`&pi{JW9mdsAl86)KE9qXWd?)&dov~L^Zlz+sUMwvfTS6W=Re%6Dz-w!{?Df;gY z{22cM9USz0E1Xwkk8^nTtmb~#!MFP|ygt{XW5!YF*bzFWoLgS69rRD-- z$oi0yfiw4kJM*(s1}Zr*3;efv^OJjf+=nR{$W`WNIefhw_^k1vi!=6HJsDWEopCSm z_<_j4qSf@_d=JiI=vc|XxvVn@Oz7E@%K=X=i#*Nuc#G?W5LkNlim=9xVX9M6}_0Z#@t!ly>irlasokpc8u|ErkC z?C({)e>U@id6v4jUvGnku|H08y%zl>IGi7JW5T=lmC~Lqs&A}=mFTI(9vpDD4puN9 z=P5XHwvlSj>pMLef9>n|2126Wnr_@uGTJF(>_n%EJ>cn7{oyU(Aad85HVd2>yVSjX zEptnBsvmO&CxK-zk3k#wFGphU;v09YCzP)56g@=yHgI+k&z2L<{?@(7g-zPSEKX>`- zdT8{<{?_y?d|R#9xbIUoC70j7PTBSHjXilX&$npqwSlGvZY$Q*>MC|U1 z;F)}T)FS`IH}M($&GYk!F1{O{SM*=BYa#oObFigjtQ~KnpWBI>aOv|R;wI<|{07cc z2RQIp?(Opb5!-%%Ja=~&6BEQY#81eYEc9!7YqM?e@=JhsECuf%@Zeir@a6yyev`U) zCk8pMx}WaO4t2h%`S9hjvz-~u>m9te6zlX2nf)hMx;b3rr zU$PdCEH>pTz5o?Jwzk=Wb)X*n#-4+9U?w@v&<}v6;OrjGS~zX{gsb$s*#2oRqX#u1 z(`VsJ*p~81RDshJ&zGQl5^KO|f$}BD{&w+G*c0EtFA?Or8#wq9hF1Gkjym&YVgRt) zABV3fU%~~)I{boTuSS^PLO{s4Jhpv@=HL0MN)viPmbkh#z> z^ltsN(?-6V|3jgfccJGy(R;8)5D&RrYNBvNGNuSFoK!ze2C?iJov@KY?fe zY!kkw>H$vCAlARnvX%lby7g-8=0mEik%w)KFI?&*&%0MQ>$Kvxb_Shc&fUuQ-{AYV z)%SMVTKaM?-y-w5N}oD=E$}+-eS63TuYKxUmGeZtJ+w)E>mtjX;yIc#=vn-auK@SA zoMkhOHTA>v4{g779rfUI;oc7XS@n-Q37UBDAU67kJR_ELbeZ3l^WTZHaEe2~f~P20 z`+#M4gB1f7^`>CEe>uQeQ1ojDSL}Vs&oA+=-Z~z%JP2BDISWp}9bDqUscitK)xeqW z;k1&vc;-%m?jEccoXAgi7@VSAAiJ$!;u9G|PTcBgEV2mDafFIn6uj{##uPe0%fDc>zT24c14S;()cvL-eC*Z^eg>5fR55I8d&t7*bEJa!0&2wS;|g0$vyLQ1LK~$cWX=0&9SRGxZ-~m z7e>vkHiO^1Wv7rB|{cV zZVL1uDSsK|=@-S<57X!0g0~D#@%4M?^WVT*ynA=|D;|&P;JUk=eg?)$a9U0b40@_l zG7r2eQh4Ft&c(kia1WqgJ5Q;&oA_7sf!02JV(ai%H8KaMi*<^q0PCh7q`>bXIU@43VZxO%4XdJY+&5_jAp-9iya+jT>8Mvu#sjR zM~C|=IPFCryc@ZZOMSC=2F-Hy;tBg=tDR7BNmdbZdeDCLEjs!D_h-;4yxl6ozs1%5 z`9O549N;moz_Sj8k=69&hp&73Ke$_mwjoQ&y)NxoHj}b*h{bpo9gOdVX8WO|@x8pa zgl7BUpOO2(YpU(`B>4M-+)uidXEm}vf-|)1p*3LbyNuX{e|oSEG4AWoA39+jV%*nZ z&?p%VuhPV@Z=3n3$N$#Jd5B`&Q z2JTt&lxKF~F>;vwiEA_QX@8V>`V>wAD@6H5V7)^7;3NHPg_9TK0UznN$?G3tKJ34M z`-Ak$DX!q;#dsuH!>K1n)}6Es9}4wahki$1s+)oH7vdS1Cx@PZNB$T%+{^jLJhLZV zO8frEbu`av=_j4@As7pMDpo4S!=Ck_7vr%WJ|bn6Z=)1g@R8KLJ?S`blJH5clMX3Z zb}wiyqZyojK{0zB!P+B=D}XZ{n%Z3ppT zkYBnBC+uKn(1)tLbL%12{%HT*jLn1w_$2f)7(SA^cmD$aco1BKj|lG$HsI$0r_46m z8SQV?&j+v7DZK87C#_OzZX%DY>GPBw>}V$Q|Cp>v4Ulzdr{9K@Eu4>BZN_I4@aXrg zVbCe``~J6eN96A>@KOK$r@AA$b@o4ryVy?K#)9Vr=xl-R79JG86ny}kgIChl;htYB z$#vSdpzD0*?P_>y4!p0)vxUpID!-6ALoY28S^?ISE8XrYbh!gvx}38Yn{`ndb(Rogias+n2bj>N=r=b)n^uDdQ}mk~ zx1lRcWqt(E&EUt6V=pN^Xe==6&waNSy=>f6e2DiG-+WwmiH~9bfo}Jl#rn%V^!0C2 z>%gyaX54h|oETZVKD+_n*hAO{@2RzH`wiww2lIR~-(>z>Vt0Hh|7+%SWd3N%BClrL zgkO%iuHL zroGBIQ{S;mlznPVLuc&=PN{qQ^$qyCF9Y5>+62K|5+xTpvJczZ+BXzDfEk;E-(oMk z<*Vo59Gn4f`DHga;B;yzKF;OngmHfRG<%8g0{jr!o6#xwU-A-o-Gr|OpF|Q_Ua|_i z{C@W2c=v8$2m5ibiE7%Ye?Kvjx}3Sfe}NN1romI1XwP(bN?)5;!xQ5FVqF5B(ihz% zb?-h@g#TqPaU}RTPI2vu*{H(?szL7FP5I}MZ~KWqc?FzqJr}og(|T}v(2M;bj>jF( z*xkP#c<-T`ttGajT3yxL!dLFBYC^~L69ZL8UybqNTJRA$`%4+KEuQa%dv`oIov2`~ z<^<*2`7vk7EAN#2gmxiQn-6R8QPBa;VeVIPPg{_&{ha;yw~(>o|3NnATGNot;?rXM zoN36`{vV`hb`&}^dl49@FRj8c4f6yFu{uzah;y9{)fp1?-SrqA2ZDf;508cUzmdwsTh zE%E}|uGx(&h40o|tn(fxm+5Zw2OA&LK2=6yiOHV{&&XzcYxoX2T??J6@1Ro$Iu$!q zeYcGm<7{{@WgKX7j5M_>BAH}=pq5V*Ovlk3;4kc4^;xE z*n=ZF;-L!Q%=6%IZ?NChPW&35W|J46Us$BsZAs=s3HNoxY{-6sYVRHAG+6Z`*pJ6J zHP=uNW4h)l>OoH^tmmFFU4zXl_r$cQy>~Uo$$<@CHL};BtY7EeK#7CKzVDAdHqb5K zhhJjPz<7xN%W^~}_Y)eoGm#y=o{<vS*&^1k>}DR2Xm_y8r>x8&_j?X zL*m1tLySxGA;gvqHb#~Wj*pBEHZIi%$1klOWQ^iWq*2j9##i(~@vl^0#Qyz@W&gg) zF%c+ev;vpwR>IUA^njd3O(Q?X*>K`g@?I3QlBeNw?~Kn<@5t@*`FGkDO

{ output.add_byte_lookup_events(new_byte_lookup_events); - pad_rows(&mut rows, || { - let mut row = vec![F::zero(); num_fp_cols::

()]; - let cols: &mut FpOpCols = row.as_mut_slice().borrow_mut(); - let zero = BigUint::zero(); - cols.is_add = F::from_canonical_u8(1); - Self::populate_field_ops( - &mut vec![], - 0, - 0, - cols, - zero.clone(), - zero, - FieldOperation::Add, - ); - row - }); + pad_rows_fixed( + &mut rows, + || { + let mut row = vec![F::zero(); num_fp_cols::

()]; + let cols: &mut FpOpCols = row.as_mut_slice().borrow_mut(); + let zero = BigUint::zero(); + cols.is_add = F::from_canonical_u8(1); + Self::populate_field_ops( + &mut vec![], + 0, + 0, + cols, + zero.clone(), + zero, + FieldOperation::Add, + ); + row + }, + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs index 5024fad6c4..9f4e0ec919 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs @@ -27,7 +27,7 @@ use typenum::Unsigned; use crate::{ memory::{value_as_limbs, MemoryReadCols, MemoryWriteCols}, operations::field::field_op::FieldOpCols, - utils::{limbs_from_prev_access, pad_rows, words_to_bytes_le_vec}, + utils::{limbs_from_prev_access, pad_rows_fixed, words_to_bytes_le_vec}, }; pub const fn num_fp2_addsub_cols() -> usize { @@ -154,24 +154,28 @@ impl MachineAir for Fp2AddSubAssignChip

{ output.add_byte_lookup_events(new_byte_lookup_events); - pad_rows(&mut rows, || { - let mut row = vec![F::zero(); num_fp2_addsub_cols::

()]; - let cols: &mut Fp2AddSubAssignCols = row.as_mut_slice().borrow_mut(); - cols.is_add = F::one(); - let zero = BigUint::zero(); - Self::populate_field_ops( - &mut vec![], - 0, - 0, - cols, - zero.clone(), - zero.clone(), - zero.clone(), - zero, - FieldOperation::Add, - ); - row - }); + pad_rows_fixed( + &mut rows, + || { + let mut row = vec![F::zero(); num_fp2_addsub_cols::

()]; + let cols: &mut Fp2AddSubAssignCols = row.as_mut_slice().borrow_mut(); + cols.is_add = F::one(); + let zero = BigUint::zero(); + Self::populate_field_ops( + &mut vec![], + 0, + 0, + cols, + zero.clone(), + zero.clone(), + zero.clone(), + zero, + FieldOperation::Add, + ); + row + }, + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new( diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs index 7987986011..802ff0656c 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs @@ -27,7 +27,7 @@ use typenum::Unsigned; use crate::{ memory::{value_as_limbs, MemoryReadCols, MemoryWriteCols}, operations::field::field_op::FieldOpCols, - utils::{limbs_from_prev_access, pad_rows, words_to_bytes_le_vec}, + utils::{limbs_from_prev_access, pad_rows_fixed, words_to_bytes_le_vec}, }; pub const fn num_fp2_mul_cols() -> usize { @@ -206,22 +206,26 @@ impl MachineAir for Fp2MulAssignChip

{ output.add_byte_lookup_events(new_byte_lookup_events); - pad_rows(&mut rows, || { - let mut row = vec![F::zero(); num_fp2_mul_cols::

()]; - let cols: &mut Fp2MulAssignCols = row.as_mut_slice().borrow_mut(); - let zero = BigUint::zero(); - Self::populate_field_ops( - &mut vec![], - 0, - 0, - cols, - zero.clone(), - zero.clone(), - zero.clone(), - zero, - ); - row - }); + pad_rows_fixed( + &mut rows, + || { + let mut row = vec![F::zero(); num_fp2_mul_cols::

()]; + let cols: &mut Fp2MulAssignCols = row.as_mut_slice().borrow_mut(); + let zero = BigUint::zero(); + Self::populate_field_ops( + &mut vec![], + 0, + 0, + cols, + zero.clone(), + zero.clone(), + zero.clone(), + zero, + ); + row + }, + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new( diff --git a/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs b/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs index c8c0d910e1..8d327d9820 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs @@ -15,7 +15,7 @@ use super::{ columns::{ShaCompressCols, NUM_SHA_COMPRESS_COLS}, ShaCompressChip, SHA_COMPRESS_K, }; -use crate::utils::pad_rows; +use crate::utils::pad_rows_fixed; impl MachineAir for ShaCompressChip { type Record = ExecutionRecord; @@ -42,7 +42,11 @@ impl MachineAir for ShaCompressChip { let num_real_rows = rows.len(); - pad_rows(&mut rows, || [F::zero(); NUM_SHA_COMPRESS_COLS]); + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_SHA_COMPRESS_COLS], + input.fixed_log2_rows::(self), + ); // Set the octet_num and octect columns for the padded rows. let mut octet_num = 0; diff --git a/crates/core/machine/src/syscall/precompiles/uint256/air.rs b/crates/core/machine/src/syscall/precompiles/uint256/air.rs index b0e77a6e51..3cc4f803b1 100644 --- a/crates/core/machine/src/syscall/precompiles/uint256/air.rs +++ b/crates/core/machine/src/syscall/precompiles/uint256/air.rs @@ -7,7 +7,7 @@ use crate::{ air::MemoryAirBuilder, operations::{field::range::FieldLtCols, IsZeroOperation}, utils::{ - limbs_from_access, limbs_from_prev_access, pad_rows, words_to_bytes_le, + limbs_from_access, limbs_from_prev_access, pad_rows_fixed, words_to_bytes_le, words_to_bytes_le_vec, }, }; @@ -199,16 +199,20 @@ impl MachineAir for Uint256MulChip { output.append(&mut record); } - pad_rows(&mut rows, || { - let mut row: [F; NUM_COLS] = [F::zero(); NUM_COLS]; - let cols: &mut Uint256MulCols = row.as_mut_slice().borrow_mut(); + pad_rows_fixed( + &mut rows, + || { + let mut row: [F; NUM_COLS] = [F::zero(); NUM_COLS]; + let cols: &mut Uint256MulCols = row.as_mut_slice().borrow_mut(); - let x = BigUint::zero(); - let y = BigUint::zero(); - cols.output.populate(&mut vec![], 0, 0, &x, &y, FieldOperation::Mul); + let x = BigUint::zero(); + let y = BigUint::zero(); + cols.output.populate(&mut vec![], 0, 0, &x, &y, FieldOperation::Mul); - row - }); + row + }, + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs index 40d82b9adb..26a0f87f93 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs @@ -27,7 +27,7 @@ use typenum::Unsigned; use crate::{ memory::{MemoryCols, MemoryReadCols, MemoryWriteCols}, operations::field::field_op::FieldOpCols, - utils::{limbs_from_prev_access, pad_rows}, + utils::{limbs_from_prev_access, pad_rows_fixed}, }; pub const fn num_weierstrass_add_cols() -> usize { @@ -257,23 +257,27 @@ impl MachineAir } output.add_byte_lookup_events(new_byte_lookup_events); - pad_rows(&mut rows, || { - let mut row = vec![F::zero(); num_weierstrass_add_cols::()]; - let cols: &mut WeierstrassAddAssignCols = - row.as_mut_slice().borrow_mut(); - let zero = BigUint::zero(); - Self::populate_field_ops( - &mut vec![], - 0, - 0, - cols, - zero.clone(), - zero.clone(), - zero.clone(), - zero, - ); - row - }); + pad_rows_fixed( + &mut rows, + || { + let mut row = vec![F::zero(); num_weierstrass_add_cols::()]; + let cols: &mut WeierstrassAddAssignCols = + row.as_mut_slice().borrow_mut(); + let zero = BigUint::zero(); + Self::populate_field_ops( + &mut vec![], + 0, + 0, + cols, + zero.clone(), + zero.clone(), + zero.clone(), + zero, + ); + row + }, + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new( diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs index 01fed80a01..1ab3e1e97f 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs @@ -28,7 +28,7 @@ use typenum::Unsigned; use crate::{ memory::{MemoryReadCols, MemoryReadWriteCols}, operations::field::{field_op::FieldOpCols, field_sqrt::FieldSqrtCols, range::FieldLtCols}, - utils::{bytes_to_words_le_vec, limbs_from_access, limbs_from_prev_access, pad_rows}, + utils::{bytes_to_words_le_vec, limbs_from_access, limbs_from_prev_access, pad_rows_fixed}, }; pub const fn num_weierstrass_decompress_cols() -> usize { @@ -259,22 +259,26 @@ impl MachineAir } output.add_byte_lookup_events(new_byte_lookup_events); - pad_rows(&mut rows, || { - let mut row = vec![F::zero(); width]; - let cols: &mut WeierstrassDecompressCols = - row.as_mut_slice()[0..weierstrass_width].borrow_mut(); - - // take X of the generator as a dummy value to make sure Y^2 = X^3 + b holds - let dummy_value = E::generator().0; - let dummy_bytes = dummy_value.to_bytes_le(); - let words = bytes_to_words_le_vec(&dummy_bytes); - for i in 0..cols.x_access.len() { - cols.x_access[i].access.value = words[i].into(); - } + pad_rows_fixed( + &mut rows, + || { + let mut row = vec![F::zero(); width]; + let cols: &mut WeierstrassDecompressCols = + row.as_mut_slice()[0..weierstrass_width].borrow_mut(); + + // take X of the generator as a dummy value to make sure Y^2 = X^3 + b holds + let dummy_value = E::generator().0; + let dummy_bytes = dummy_value.to_bytes_le(); + let words = bytes_to_words_le_vec(&dummy_bytes); + for i in 0..cols.x_access.len() { + cols.x_access[i].access.value = words[i].into(); + } - Self::populate_field_ops(&mut vec![], 0, 0, cols, dummy_value); - row - }); + Self::populate_field_ops(&mut vec![], 0, 0, cols, dummy_value); + row + }, + input.fixed_log2_rows::(self), + ); let mut trace = RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), width); diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs index 16dfe59264..616adfe326 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -30,7 +30,7 @@ use sp1_stark::{ use crate::{ memory::{MemoryCols, MemoryWriteCols}, operations::field::field_op::FieldOpCols, - utils::{limbs_from_prev_access, pad_rows}, + utils::{limbs_from_prev_access, pad_rows_fixed}, }; pub const fn num_weierstrass_double_cols() -> usize { @@ -283,14 +283,18 @@ impl MachineAir output.append(&mut row_and_record.1); } - pad_rows(&mut rows, || { - let mut row = vec![F::zero(); num_weierstrass_double_cols::()]; - let cols: &mut WeierstrassDoubleAssignCols = - row.as_mut_slice().borrow_mut(); - let zero = BigUint::zero(); - Self::populate_field_ops(&mut vec![], 0, 0, cols, zero.clone(), zero.clone()); - row - }); + pad_rows_fixed( + &mut rows, + || { + let mut row = vec![F::zero(); num_weierstrass_double_cols::()]; + let cols: &mut WeierstrassDoubleAssignCols = + row.as_mut_slice().borrow_mut(); + let zero = BigUint::zero(); + Self::populate_field_ops(&mut vec![], 0, 0, cols, zero.clone(), zero.clone()); + row + }, + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new( diff --git a/crates/core/machine/src/utils/mod.rs b/crates/core/machine/src/utils/mod.rs index 38d6500528..ca6bcd7128 100644 --- a/crates/core/machine/src/utils/mod.rs +++ b/crates/core/machine/src/utils/mod.rs @@ -56,19 +56,12 @@ pub fn limbs_from_access>(cols: &[M]) Limbs(sized) } -pub fn pad_rows(rows: &mut Vec, row_fn: impl Fn() -> T) { - let nb_rows = rows.len(); - let mut padded_nb_rows = nb_rows.next_power_of_two(); - if padded_nb_rows < 16 { - padded_nb_rows = 16; - } - if padded_nb_rows == nb_rows { - return; - } - let dummy_row = row_fn(); - rows.resize(padded_nb_rows, dummy_row); -} - +/// Pad to a power of two, with an option to specify the power. +// +// The `rows` argument represents the rows of a matrix stored in row-major order. The function will +// pad the rows using `row_fn` to create the padded rows. The padding will be to the next power of +// of two of `size_log_2` is `None`, or to the specified `size_log_2` if it is not `None`. The +// function will panic of the number of rows is larger than the specified `size_log2` pub fn pad_rows_fixed( rows: &mut Vec, row_fn: impl Fn() -> R, From a69da1f52a2f0593c7d9c1e9a6562084860878e7 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 5 Sep 2024 15:01:43 -0700 Subject: [PATCH 165/268] avoid clone for gpu prover --- crates/prover/src/lib.rs | 2 +- crates/recursion/circuit-v2/src/utils.rs | 2 +- crates/stark/src/prover.rs | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 5444874b63..895d0e9a84 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -247,7 +247,7 @@ impl SP1Prover { >( &self.core_prover, &>>::DeviceProvingKey::from_host( - pk.pk.clone(), + &pk.pk, ), program, stdin, diff --git a/crates/recursion/circuit-v2/src/utils.rs b/crates/recursion/circuit-v2/src/utils.rs index ebe145c1d1..f41c6d9fe9 100644 --- a/crates/recursion/circuit-v2/src/utils.rs +++ b/crates/recursion/circuit-v2/src/utils.rs @@ -146,7 +146,7 @@ pub(crate) mod tests { let proof_wide_span = tracing::debug_span!("Run test with wide machine").entered(); let wide_machine = RecursionAir::<_, 3, 0>::compress_machine(SC::default()); let (pk, vk) = wide_machine.setup(&program); - let pk = P::DeviceProvingKey::from_host(pk); + let pk = P::DeviceProvingKey::from_host(&pk); let prover = P::new(wide_machine); let result = run_test_machine_with_prover::<_, _, P>(&prover, records.clone(), pk, vk); proof_wide_span.exit(); diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index 4a87112831..36ad306002 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -161,7 +161,7 @@ pub trait MachineProvingKey: Send + Sync { fn to_host(&self) -> StarkProvingKey; /// The proving key on the device. - fn from_host(host: StarkProvingKey) -> Self; + fn from_host(host: &StarkProvingKey) -> Self; /// Observe itself in the challenger. fn observe_into(&self, challenger: &mut Challenger); @@ -595,8 +595,8 @@ where self.clone() } - fn from_host(host: StarkProvingKey) -> Self { - host + fn from_host(host: &StarkProvingKey) -> Self { + host.clone() } fn observe_into(&self, challenger: &mut Challenger) { From 73600253ff9fd9499ed6c6f8195aa73954944fa8 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 5 Sep 2024 16:53:27 -0700 Subject: [PATCH 166/268] pub make_merkle_proofs --- crates/prover/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 895d0e9a84..bae5aff5c4 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1040,7 +1040,7 @@ impl SP1Prover { digest } - fn make_merkle_proofs( + pub fn make_merkle_proofs( &self, input: SP1CompressWitnessValues, ) -> SP1CompressWithVKeyWitnessValues From e2887c00598dff22ea608616baafe365300ea0d4 Mon Sep 17 00:00:00 2001 From: mattstam Date: Fri, 6 Sep 2024 13:47:13 -0700 Subject: [PATCH 167/268] chore: bump SP1_CIRCUIT_VERSION: &str = "v1.3.0-rc2" --- crates/core/machine/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/core/machine/src/lib.rs b/crates/core/machine/src/lib.rs index bf99370ec4..16292f63d2 100644 --- a/crates/core/machine/src/lib.rs +++ b/crates/core/machine/src/lib.rs @@ -30,4 +30,4 @@ pub mod utils; /// This string should be updated whenever any step in verifying an SP1 proof changes, including /// core, recursion, and plonk-bn254. This string is used to download SP1 artifacts and the gnark /// docker image. -pub const SP1_CIRCUIT_VERSION: &str = "v1.3.0-rc1"; +pub const SP1_CIRCUIT_VERSION: &str = "v1.3.0-rc2"; From ec57ab159db261a9eefcc5075fa93ab9ebbf16e7 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 6 Sep 2024 13:56:58 -0700 Subject: [PATCH 168/268] feat: better reduce api (#1486) --- crates/core/executor/src/io.rs | 8 +-- crates/core/executor/src/lib.rs | 2 + crates/core/executor/src/reduce.rs | 21 ++++++++ crates/core/executor/src/state.rs | 11 ++--- crates/core/executor/src/subproof.rs | 16 +++--- crates/core/executor/src/syscalls/verify.rs | 4 +- crates/core/machine/src/io.rs | 14 ++---- crates/core/machine/src/lib.rs | 8 +++ crates/core/machine/src/utils/prove.rs | 3 +- crates/cuda/src/lib.rs | 12 ++--- crates/prover/src/lib.rs | 38 ++++++-------- crates/prover/src/types.rs | 55 +++------------------ crates/prover/src/utils.rs | 25 +++++++++- crates/prover/src/verify.rs | 12 ++--- crates/sdk/src/proof.rs | 3 +- crates/sdk/src/provers/cpu.rs | 12 ++--- crates/sdk/src/provers/cuda.rs | 12 ++--- crates/sdk/src/provers/mock.rs | 4 +- examples/aggregation/script/src/main.rs | 2 +- 19 files changed, 124 insertions(+), 138 deletions(-) create mode 100644 crates/core/executor/src/reduce.rs diff --git a/crates/core/executor/src/io.rs b/crates/core/executor/src/io.rs index 8cd6ab49d3..767697c604 100644 --- a/crates/core/executor/src/io.rs +++ b/crates/core/executor/src/io.rs @@ -1,9 +1,10 @@ use std::io::Read; use serde::{de::DeserializeOwned, Serialize}; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, ShardProof, StarkVerifyingKey}; +use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkVerifyingKey}; use super::Executor; +use crate::SP1ReduceProof; impl<'a> Read for Executor<'a> { fn read(&mut self, buf: &mut [u8]) -> std::io::Result { @@ -35,11 +36,10 @@ impl<'a> Executor<'a> { /// Write a proof and verifying key to the proof stream. pub fn write_proof( &mut self, - reduce_vk: StarkVerifyingKey, - proof: ShardProof, + proof: SP1ReduceProof, vk: StarkVerifyingKey, ) { - self.state.proof_stream.push((reduce_vk, proof, vk)); + self.state.proof_stream.push((proof, vk)); } /// Read a serializable public values from the public values stream. diff --git a/crates/core/executor/src/lib.rs b/crates/core/executor/src/lib.rs index ba713d336c..a5c1941dbd 100644 --- a/crates/core/executor/src/lib.rs +++ b/crates/core/executor/src/lib.rs @@ -32,6 +32,7 @@ mod program; #[cfg(any(test, feature = "programs"))] pub mod programs; mod record; +mod reduce; mod register; mod report; mod shape; @@ -47,6 +48,7 @@ pub use instruction::*; pub use opcode::*; pub use program::*; pub use record::*; +pub use reduce::*; pub use register::*; pub use report::*; pub use shape::*; diff --git a/crates/core/executor/src/reduce.rs b/crates/core/executor/src/reduce.rs new file mode 100644 index 0000000000..27a1d2f76f --- /dev/null +++ b/crates/core/executor/src/reduce.rs @@ -0,0 +1,21 @@ +use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use sp1_stark::{Dom, ShardProof, StarkGenericConfig, StarkVerifyingKey}; +/// An intermediate proof which proves the execution. +#[derive(Serialize, Deserialize, Clone)] +#[serde(bound(serialize = "ShardProof: Serialize, Dom: Serialize"))] +#[serde(bound(deserialize = "ShardProof: Deserialize<'de>, Dom: DeserializeOwned"))] +pub struct SP1ReduceProof { + /// The compress verifying key associated with the proof. + pub vk: StarkVerifyingKey, + /// The shard proof representing the compressed proof. + pub proof: ShardProof, +} + +impl std::fmt::Debug for SP1ReduceProof { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut debug_struct = f.debug_struct("SP1ReduceProof"); + debug_struct.field("vk", &self.vk); + debug_struct.field("proof", &self.proof); + debug_struct.finish() + } +} diff --git a/crates/core/executor/src/state.rs b/crates/core/executor/src/state.rs index d0956fe3ce..614a6147d5 100644 --- a/crates/core/executor/src/state.rs +++ b/crates/core/executor/src/state.rs @@ -6,7 +6,7 @@ use std::{ use hashbrown::HashMap; use nohash_hasher::BuildNoHashHasher; use serde::{Deserialize, Serialize}; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, ShardProof, StarkVerifyingKey}; +use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkVerifyingKey}; use crate::{ events::MemoryRecord, @@ -14,7 +14,7 @@ use crate::{ record::{ExecutionRecord, MemoryAccessRecord}, syscalls::SyscallCode, utils::{deserialize_hashmap_as_vec, serialize_hashmap_as_vec}, - ExecutorMode, + ExecutorMode, SP1ReduceProof, }; /// Holds data describing the current state of a program's execution. @@ -56,11 +56,8 @@ pub struct ExecutionState { pub input_stream_ptr: usize, /// A stream of proofs (reduce vk, proof, verifying key) inputted to the program. - pub proof_stream: Vec<( - StarkVerifyingKey, - ShardProof, - StarkVerifyingKey, - )>, + pub proof_stream: + Vec<(SP1ReduceProof, StarkVerifyingKey)>, /// A ptr to the current position in the proof stream, incremented after verifying a proof. pub proof_stream_ptr: usize, diff --git a/crates/core/executor/src/subproof.rs b/crates/core/executor/src/subproof.rs index 6bd0f12852..e821fd9959 100644 --- a/crates/core/executor/src/subproof.rs +++ b/crates/core/executor/src/subproof.rs @@ -1,10 +1,11 @@ //! Types and methods for subproof verification inside the [`crate::Executor`]. -use std::sync::atomic::AtomicBool; - use sp1_stark::{ - baby_bear_poseidon2::BabyBearPoseidon2, MachineVerificationError, ShardProof, StarkVerifyingKey, + baby_bear_poseidon2::BabyBearPoseidon2, MachineVerificationError, StarkVerifyingKey, }; +use std::sync::atomic::AtomicBool; + +use crate::SP1ReduceProof; /// Verifier used in runtime when `sp1_zkvm::precompiles::verify::verify_sp1_proof` is called. This /// is then used to sanity check that the user passed in the correct proof; the actual constraints @@ -16,8 +17,7 @@ pub trait SubproofVerifier: Sync + Send { /// Verify a deferred proof. fn verify_deferred_proof( &self, - reduce_vk: &StarkVerifyingKey, - proof: &ShardProof, + proof: &SP1ReduceProof, vk: &StarkVerifyingKey, vk_hash: [u32; 8], committed_value_digest: [u32; 8], @@ -41,8 +41,7 @@ impl DefaultSubproofVerifier { impl SubproofVerifier for DefaultSubproofVerifier { fn verify_deferred_proof( &self, - _reduce_vk: &StarkVerifyingKey, - _proof: &ShardProof, + _proof: &SP1ReduceProof, _vk: &StarkVerifyingKey, _vk_hash: [u32; 8], _committed_value_digest: [u32; 8], @@ -61,8 +60,7 @@ pub struct NoOpSubproofVerifier; impl SubproofVerifier for NoOpSubproofVerifier { fn verify_deferred_proof( &self, - _reduce_vk: &StarkVerifyingKey, - _proof: &ShardProof, + _proof: &SP1ReduceProof, _vk: &StarkVerifyingKey, _vk_hash: [u32; 8], _committed_value_digest: [u32; 8], diff --git a/crates/core/executor/src/syscalls/verify.rs b/crates/core/executor/src/syscalls/verify.rs index ba55350dd8..cf314b1ad8 100644 --- a/crates/core/executor/src/syscalls/verify.rs +++ b/crates/core/executor/src/syscalls/verify.rs @@ -20,7 +20,7 @@ impl Syscall for VerifySyscall { if proof_index >= rt.state.proof_stream.len() { panic!("Not enough proofs were written to the runtime."); } - let (reduce_vk, proof, proof_vk) = &rt.state.proof_stream[proof_index].clone(); + let (proof, proof_vk) = &rt.state.proof_stream[proof_index].clone(); rt.state.proof_stream_ptr += 1; let vkey_bytes: [u32; 8] = vkey.try_into().unwrap(); @@ -28,7 +28,7 @@ impl Syscall for VerifySyscall { ctx.rt .subproof_verifier - .verify_deferred_proof(reduce_vk, proof, proof_vk, vkey_bytes, pv_digest_bytes) + .verify_deferred_proof(proof, proof_vk, vkey_bytes, pv_digest_bytes) .unwrap_or_else(|e| { panic!( "Failed to verify proof {proof_index} with digest {}: {}", diff --git a/crates/core/machine/src/io.rs b/crates/core/machine/src/io.rs index 92c9ae22fe..cf65d0b592 100644 --- a/crates/core/machine/src/io.rs +++ b/crates/core/machine/src/io.rs @@ -2,7 +2,8 @@ use crate::utils::Buffer; use k256::sha2::{Digest, Sha256}; use num_bigint::BigUint; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, ShardProof, StarkVerifyingKey}; +use sp1_core_executor::SP1ReduceProof; +use sp1_stark::{baby_bear_poseidon2::BabyBearPoseidon2, StarkVerifyingKey}; /// Standard input for the prover. #[derive(Debug, Clone, Serialize, Deserialize, Default)] @@ -11,11 +12,7 @@ pub struct SP1Stdin { /// a vec of bytes at a time. pub buffer: Vec>, pub ptr: usize, - pub proofs: Vec<( - StarkVerifyingKey, - ShardProof, - StarkVerifyingKey, - )>, + pub proofs: Vec<(SP1ReduceProof, StarkVerifyingKey)>, } /// Public values for the prover. @@ -67,11 +64,10 @@ impl SP1Stdin { pub fn write_proof( &mut self, - reduce_vk: StarkVerifyingKey, - proof: ShardProof, + proof: SP1ReduceProof, vk: StarkVerifyingKey, ) { - self.proofs.push((reduce_vk, proof, vk)); + self.proofs.push((proof, vk)); } } diff --git a/crates/core/machine/src/lib.rs b/crates/core/machine/src/lib.rs index 16292f63d2..5e72baff9a 100644 --- a/crates/core/machine/src/lib.rs +++ b/crates/core/machine/src/lib.rs @@ -31,3 +31,11 @@ pub mod utils; /// core, recursion, and plonk-bn254. This string is used to download SP1 artifacts and the gnark /// docker image. pub const SP1_CIRCUIT_VERSION: &str = "v1.3.0-rc2"; + +// Re-export the `SP1ReduceProof` struct from sp1_core_machine. +// +// This is done to avoid a circular dependency between sp1_core_machine and sp1_core_executor, and +// enable crates that depend on sp1_core_machine to import the `SP1ReduceProof` type directly. +pub mod reduce { + pub use sp1_core_executor::SP1ReduceProof; +} diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index a4f724b748..35bb7537ba 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -132,7 +132,8 @@ where let mut runtime = Executor::with_context(program.clone(), opts, context); runtime.write_vecs(&stdin.buffer); for proof in stdin.proofs.iter() { - runtime.write_proof(proof.0.clone(), proof.1.clone(), proof.2.clone()); + let (proof, vk) = proof.clone(); + runtime.write_proof(proof, vk); } #[cfg(feature = "debug")] diff --git a/crates/cuda/src/lib.rs b/crates/cuda/src/lib.rs index 30c060541f..bac2ab791f 100644 --- a/crates/cuda/src/lib.rs +++ b/crates/cuda/src/lib.rs @@ -18,10 +18,9 @@ use crate::proto::api::ProverServiceClient; use proto::api::ReadyRequest; use serde::{Deserialize, Serialize}; -use sp1_core_machine::{io::SP1Stdin, utils::SP1CoreProverError}; +use sp1_core_machine::{io::SP1Stdin, reduce::SP1ReduceProof, utils::SP1CoreProverError}; use sp1_prover::{ - types::SP1ProvingKey, InnerSC, OuterSC, SP1CoreProof, SP1RecursionProverError, SP1ReduceProof, - SP1VerifyingKey, + types::SP1ProvingKey, InnerSC, OuterSC, SP1CoreProof, SP1RecursionProverError, SP1VerifyingKey, }; use tokio::task::block_in_place; use twirp::{url::Url, Client}; @@ -297,10 +296,11 @@ pub fn block_on(fut: impl Future) -> T { #[cfg(feature = "protobuf")] #[cfg(test)] mod tests { - use sp1_core_machine::utils::{setup_logger, tests::FIBONACCI_ELF}; - use sp1_prover::{ - components::DefaultProverComponents, InnerSC, SP1CoreProof, SP1Prover, SP1ReduceProof, + use sp1_core_machine::{ + reduce::SP1ReduceProof, + utils::{setup_logger, tests::FIBONACCI_ELF}, }; + use sp1_prover::{components::DefaultProverComponents, InnerSC, SP1CoreProof, SP1Prover}; use twirp::{url::Url, Client}; use crate::{ diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index bae5aff5c4..2dcc58353d 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -42,6 +42,7 @@ use p3_matrix::dense::RowMajorMatrix; use sp1_core_executor::{ExecutionError, ExecutionReport, Executor, Program, SP1Context}; use sp1_core_machine::{ io::{SP1PublicValues, SP1Stdin}, + reduce::SP1ReduceProof, riscv::RiscvAir, utils::{concurrency::TurnBasedSync, SP1CoreProverError}, }; @@ -82,7 +83,7 @@ use sp1_recursion_circuit_v2::{ }; pub use types::*; -use utils::words_to_bytes; +use utils::{sp1_commited_values_digest_bn254, sp1_vkey_digest_bn254, words_to_bytes}; use components::{DefaultProverComponents, SP1ProverComponents}; @@ -222,8 +223,8 @@ impl SP1Prover { let opts = SP1CoreOpts::default(); let mut runtime = Executor::with_context(program, opts, context); runtime.write_vecs(&stdin.buffer); - for (reduce_vk, proof, vkey) in stdin.proofs.iter() { - runtime.write_proof(reduce_vk.clone(), proof.clone(), vkey.clone()); + for (proof, vkey) in stdin.proofs.iter() { + runtime.write_proof(proof.clone(), vkey.clone()); } runtime.run_fast()?; Ok((SP1PublicValues::from(&runtime.state.public_values_stream), runtime.report)) @@ -966,8 +967,8 @@ impl SP1Prover { vks_and_proofs: vec![(proof.vk.clone(), proof.proof.clone())], is_complete: true, }; - let vkey_hash = proof.sp1_vkey_digest_bn254(); - let committed_values_digest = proof.sp1_commited_values_digest_bn254(); + let vkey_hash = sp1_vkey_digest_bn254(&proof); + let committed_values_digest = sp1_commited_values_digest_bn254(&proof); let mut witness = Witness::default(); input.write(&mut witness); @@ -999,8 +1000,8 @@ impl SP1Prover { vks_and_proofs: vec![(proof.vk.clone(), proof.proof.clone())], is_complete: true, }; - let vkey_hash = proof.sp1_vkey_digest_bn254(); - let committed_values_digest = proof.sp1_commited_values_digest_bn254(); + let vkey_hash = sp1_vkey_digest_bn254(&proof); + let committed_values_digest = sp1_commited_values_digest_bn254(&proof); let mut witness = Witness::default(); input.write(&mut witness); @@ -1088,6 +1089,7 @@ pub mod tests { use serial_test::serial; #[cfg(test)] use sp1_core_machine::utils::setup_logger; + use utils::sp1_vkey_digest_babybear; #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Test { @@ -1167,11 +1169,11 @@ pub mod tests { } tracing::info!("checking vkey hash babybear"); - let vk_digest_babybear = wrapped_bn254_proof.sp1_vkey_digest_babybear(); + let vk_digest_babybear = sp1_vkey_digest_babybear(&wrapped_bn254_proof); assert_eq!(vk_digest_babybear, vk.hash_babybear()); tracing::info!("checking vkey hash bn254"); - let vk_digest_bn254 = wrapped_bn254_proof.sp1_vkey_digest_bn254(); + let vk_digest_bn254 = sp1_vkey_digest_bn254(&wrapped_bn254_proof); assert_eq!(vk_digest_bn254, vk.hash_bn254()); tracing::info!("generate plonk bn254 proof"); @@ -1253,21 +1255,9 @@ pub mod tests { .unwrap(); stdin.write(&vkey_digest); stdin.write(&vec![pv_1.clone(), pv_2.clone(), pv_2.clone()]); - stdin.write_proof( - deferred_reduce_1.vk.clone(), - deferred_reduce_1.proof.clone(), - keccak_vk.vk.clone(), - ); - stdin.write_proof( - deferred_reduce_2.vk.clone(), - deferred_reduce_2.proof.clone(), - keccak_vk.vk.clone(), - ); - stdin.write_proof( - deferred_reduce_2.vk.clone(), - deferred_reduce_2.proof.clone(), - keccak_vk.vk.clone(), - ); + stdin.write_proof(deferred_reduce_1.clone(), keccak_vk.vk.clone()); + stdin.write_proof(deferred_reduce_2.clone(), keccak_vk.vk.clone()); + stdin.write_proof(deferred_reduce_2.clone(), keccak_vk.vk.clone()); tracing::info!("proving verify program (core)"); let verify_proof = prover.prove_core(&verify_pk, &stdin, opts, Default::default())?; diff --git a/crates/prover/src/types.rs b/crates/prover/src/types.rs index 437cb725e6..29adc4ac33 100644 --- a/crates/prover/src/types.rs +++ b/crates/prover/src/types.rs @@ -1,4 +1,4 @@ -use std::{borrow::Borrow, fs::File, path::Path}; +use std::{fs::File, path::Path}; use anyhow::Result; use p3_baby_bear::BabyBear; @@ -6,25 +6,24 @@ use p3_bn254_fr::Bn254Fr; use p3_commit::{Pcs, TwoAdicMultiplicativeCoset}; use p3_field::{AbstractField, PrimeField, PrimeField32, TwoAdicField}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use sp1_core_machine::io::{SP1PublicValues, SP1Stdin}; +use sp1_core_machine::{ + io::{SP1PublicValues, SP1Stdin}, + reduce::SP1ReduceProof, +}; use sp1_primitives::poseidon2_hash; -use sp1_recursion_core_v2::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; - use sp1_recursion_circuit_v2::machine::{ SP1CompressWitnessValues, SP1DeferredWitnessValues, SP1RecursionWitnessValues, }; use sp1_recursion_gnark_ffi::proof::{Groth16Bn254Proof, PlonkBn254Proof}; -use sp1_stark::{ - Dom, ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, DIGEST_SIZE, -}; +use sp1_stark::{ShardProof, StarkGenericConfig, StarkProvingKey, StarkVerifyingKey, DIGEST_SIZE}; use thiserror::Error; use crate::{ - utils::{babybear_bytes_to_bn254, babybears_to_bn254, words_to_bytes_be}, - words_to_bytes, CoreSC, InnerSC, + utils::{babybears_to_bn254, words_to_bytes_be}, + CoreSC, InnerSC, }; /// The information necessary to generate a proof for a given RISC-V program. @@ -202,35 +201,6 @@ impl ProofSystem { } } -/// An intermediate proof which proves the execution over a range of shards. -#[derive(Serialize, Deserialize, Clone)] -#[serde(bound(serialize = "ShardProof: Serialize, Dom: Serialize"))] -#[serde(bound(deserialize = "ShardProof: Deserialize<'de>, Dom: DeserializeOwned"))] -pub struct SP1ReduceProof { - pub vk: StarkVerifyingKey, - pub proof: ShardProof, -} - -impl SP1ReduceProof { - pub fn sp1_vkey_digest_babybear(&self) -> [BabyBear; 8] { - let proof = &self.proof; - let pv: &RecursionPublicValues = proof.public_values.as_slice().borrow(); - pv.sp1_vk_digest - } - - pub fn sp1_vkey_digest_bn254(&self) -> Bn254Fr { - babybears_to_bn254(&self.sp1_vkey_digest_babybear()) - } - - pub fn sp1_commited_values_digest_bn254(&self) -> Bn254Fr { - let proof = &self.proof; - let pv: &RecursionPublicValues = proof.public_values.as_slice().borrow(); - let committed_values_digest_bytes: [BabyBear; 32] = - words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); - babybear_bytes_to_bn254(&committed_values_digest_bytes) - } -} - /// A proof that can be reduced along with other proofs into one proof. #[derive(Serialize, Deserialize, Clone)] pub enum SP1ReduceProofWrapper { @@ -250,12 +220,3 @@ pub enum SP1CircuitWitness { Deferred(SP1DeferredWitnessValues), Compress(SP1CompressWitnessValues), } - -impl std::fmt::Debug for SP1ReduceProof { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let mut debug_struct = f.debug_struct("SP1ReduceProof"); - debug_struct.field("vk", &self.vk); - debug_struct.field("proof", &self.proof); - debug_struct.finish() - } -} diff --git a/crates/prover/src/utils.rs b/crates/prover/src/utils.rs index 9bc0643efd..8bf82c3b3a 100644 --- a/crates/prover/src/utils.rs +++ b/crates/prover/src/utils.rs @@ -1,4 +1,5 @@ use std::{ + borrow::Borrow, fs::{self, File}, io::Read, }; @@ -7,11 +8,33 @@ use p3_baby_bear::BabyBear; use p3_bn254_fr::Bn254Fr; use p3_field::{AbstractField, PrimeField32}; use sp1_core_executor::{Executor, Program}; -use sp1_core_machine::io::SP1Stdin; +use sp1_core_machine::{io::SP1Stdin, reduce::SP1ReduceProof}; +use sp1_recursion_core_v2::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; use sp1_stark::{SP1CoreOpts, Word}; use crate::SP1CoreProofData; +/// Get the SP1 vkey BabyBear Poseidon2 digest this reduce proof is representing. +pub fn sp1_vkey_digest_babybear(proof: &SP1ReduceProof) -> [BabyBear; 8] { + let proof = &proof.proof; + let pv: &RecursionPublicValues = proof.public_values.as_slice().borrow(); + pv.sp1_vk_digest +} + +/// Get the SP1 vkey Bn Poseidon2 digest this reduce proof is representing. +pub fn sp1_vkey_digest_bn254(proof: &SP1ReduceProof) -> Bn254Fr { + babybears_to_bn254(&sp1_vkey_digest_babybear(proof)) +} + +/// Get the committed values Bn Poseidon2 digest this reduce proof is representing. +pub fn sp1_commited_values_digest_bn254(proof: &SP1ReduceProof) -> Bn254Fr { + let proof = &proof.proof; + let pv: &RecursionPublicValues = proof.public_values.as_slice().borrow(); + let committed_values_digest_bytes: [BabyBear; 32] = + words_to_bytes(&pv.committed_value_digest).try_into().unwrap(); + babybear_bytes_to_bn254(&committed_values_digest_bytes) +} + impl SP1CoreProofData { pub fn save(&self, path: &str) -> Result<(), std::io::Error> { let data = serde_json::to_string(self).unwrap(); diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index d095b90fb1..964d35514a 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -5,7 +5,7 @@ use num_bigint::BigUint; use p3_baby_bear::BabyBear; use p3_field::{AbstractField, PrimeField}; use sp1_core_executor::subproof::SubproofVerifier; -use sp1_core_machine::{cpu::MAX_CPU_LOG_DEGREE, io::SP1PublicValues}; +use sp1_core_machine::{cpu::MAX_CPU_LOG_DEGREE, io::SP1PublicValues, reduce::SP1ReduceProof}; use sp1_primitives::consts::WORD_SIZE; use sp1_recursion_core_v2::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; @@ -21,7 +21,7 @@ use thiserror::Error; use crate::{ components::SP1ProverComponents, CoreSC, HashableKey, OuterSC, SP1CoreProofData, SP1Prover, - SP1ReduceProof, SP1VerifyingKey, + SP1VerifyingKey, }; #[derive(Error, Debug)] @@ -472,8 +472,7 @@ pub fn verify_groth16_bn254_public_inputs( impl SubproofVerifier for &SP1Prover { fn verify_deferred_proof( &self, - reduce_vk: &sp1_stark::StarkVerifyingKey, - proof: &sp1_stark::ShardProof, + proof: &sp1_core_machine::reduce::SP1ReduceProof, vk: &sp1_stark::StarkVerifyingKey, vk_hash: [u32; 8], committed_value_digest: [u32; 8], @@ -486,11 +485,12 @@ impl SubproofVerifier for &SP1Prover { } // Check that proof is valid. self.verify_compressed( - &SP1ReduceProof { vk: reduce_vk.clone(), proof: proof.clone() }, + &SP1ReduceProof { vk: proof.vk.clone(), proof: proof.proof.clone() }, &SP1VerifyingKey { vk: vk.clone() }, )?; // Check that the committed value digest matches the one from syscall - let public_values: &RecursionPublicValues<_> = proof.public_values.as_slice().borrow(); + let public_values: &RecursionPublicValues<_> = + proof.proof.public_values.as_slice().borrow(); for (i, word) in public_values.committed_value_digest.iter().enumerate() { if *word != committed_value_digest[i].into() { return Err(MachineVerificationError::InvalidPublicValues( diff --git a/crates/sdk/src/proof.rs b/crates/sdk/src/proof.rs index 57a6732b4c..4ecae2e297 100644 --- a/crates/sdk/src/proof.rs +++ b/crates/sdk/src/proof.rs @@ -2,10 +2,11 @@ use std::{fmt::Debug, fs::File, path::Path}; use anyhow::Result; use serde::{Deserialize, Serialize}; +use sp1_core_executor::SP1ReduceProof; use sp1_core_machine::io::{SP1PublicValues, SP1Stdin}; use strum_macros::{EnumDiscriminants, EnumTryAs}; -use sp1_prover::{CoreSC, Groth16Bn254Proof, InnerSC, PlonkBn254Proof, SP1ReduceProof}; +use sp1_prover::{CoreSC, Groth16Bn254Proof, InnerSC, PlonkBn254Proof}; use sp1_stark::{MachineVerificationError, ShardProof}; /// A proof generated with SP1 of a particular proof mode. diff --git a/crates/sdk/src/provers/cpu.rs b/crates/sdk/src/provers/cpu.rs index a50fe74823..e1828716e4 100644 --- a/crates/sdk/src/provers/cpu.rs +++ b/crates/sdk/src/provers/cpu.rs @@ -1,7 +1,7 @@ use anyhow::Result; use sp1_core_executor::SP1Context; use sp1_core_machine::io::SP1Stdin; -use sp1_prover::{components::DefaultProverComponents, SP1Prover, SP1ReduceProof}; +use sp1_prover::{components::DefaultProverComponents, SP1Prover}; use crate::{ install::try_install_circuit_artifacts, provers::ProofOpts, Prover, SP1Proof, SP1ProofKind, @@ -60,14 +60,8 @@ impl Prover for CpuProver { }); } - let deferred_proofs = stdin - .proofs - .iter() - .map(|(reduce_vk, reduce_proof, _)| SP1ReduceProof { - vk: reduce_vk.clone(), - proof: reduce_proof.clone(), - }) - .collect(); + let deferred_proofs = + stdin.proofs.iter().map(|(reduce_proof, _)| reduce_proof.clone()).collect(); let public_values = proof.public_values.clone(); // Generate the compressed proof. diff --git a/crates/sdk/src/provers/cuda.rs b/crates/sdk/src/provers/cuda.rs index 944ef9d44d..78ec8c6fa6 100644 --- a/crates/sdk/src/provers/cuda.rs +++ b/crates/sdk/src/provers/cuda.rs @@ -1,7 +1,7 @@ use anyhow::Result; use sp1_core_machine::io::SP1Stdin; use sp1_cuda::SP1CudaProver; -use sp1_prover::{components::DefaultProverComponents, SP1Prover, SP1ReduceProof}; +use sp1_prover::{components::DefaultProverComponents, SP1Prover}; use super::ProverType; use crate::{ @@ -59,14 +59,8 @@ impl Prover for CudaProver { }); } - let deferred_proofs = stdin - .proofs - .iter() - .map(|(reduce_vk, reduce_proof, _)| SP1ReduceProof { - vk: reduce_vk.clone(), - proof: reduce_proof.clone(), - }) - .collect(); + let deferred_proofs = + stdin.proofs.iter().map(|(reduce_proof, _)| reduce_proof.clone()).collect(); let public_values = proof.public_values.clone(); // Generate the compressed proof. diff --git a/crates/sdk/src/provers/mock.rs b/crates/sdk/src/provers/mock.rs index 27edb37977..677f4d1502 100644 --- a/crates/sdk/src/provers/mock.rs +++ b/crates/sdk/src/provers/mock.rs @@ -1,6 +1,6 @@ #![allow(unused_variables)] use hashbrown::HashMap; -use sp1_core_executor::SP1Context; +use sp1_core_executor::{SP1Context, SP1ReduceProof}; use sp1_core_machine::io::SP1Stdin; use sp1_stark::{ShardCommitment, ShardOpenedValues, ShardProof, StarkVerifyingKey}; @@ -15,7 +15,7 @@ use p3_fri::{FriProof, TwoAdicFriPcsProof}; use sp1_prover::{ components::DefaultProverComponents, verify::{verify_groth16_bn254_public_inputs, verify_plonk_bn254_public_inputs}, - Groth16Bn254Proof, HashableKey, PlonkBn254Proof, SP1Prover, SP1ReduceProof, + Groth16Bn254Proof, HashableKey, PlonkBn254Proof, SP1Prover, }; use super::{ProofOpts, ProverType}; diff --git a/examples/aggregation/script/src/main.rs b/examples/aggregation/script/src/main.rs index 2a62d74d13..9ed9c8f246 100644 --- a/examples/aggregation/script/src/main.rs +++ b/examples/aggregation/script/src/main.rs @@ -72,7 +72,7 @@ fn main() { // witnessed by the prover during the recursive aggregation process inside SP1 itself. for input in inputs { let SP1Proof::Compressed(proof) = input.proof.proof else { panic!() }; - stdin.write_proof(proof.vk, proof.proof, input.vk.vk); + stdin.write_proof(proof, input.vk.vk); } // Generate the plonk bn254 proof. From f2f6b4333ada19b09820986230dc34e80738ee1a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 6 Sep 2024 14:12:38 -0700 Subject: [PATCH 169/268] fix build script --- crates/prover/src/build.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 78e509b297..6b0512dc04 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -86,11 +86,11 @@ pub fn build_groth16_bn254_artifacts( /// This may take a while as it needs to first generate a dummy proof and then it needs to compile /// the circuit. pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { - // let (wrap_vk, wrapped_proof) = dummy_proof(); - // let wrap_vk_bytes = bincode::serialize(&wrap_vk).unwrap(); - // let wrapped_proof_bytes = bincode::serialize(&wrapped_proof).unwrap(); - // std::fs::write("wrap_vk.bin", wrap_vk_bytes).unwrap(); - // std::fs::write("wraped_proof.bin", wrapped_proof_bytes).unwrap(); + let (wrap_vk, wrapped_proof) = dummy_proof(); + let wrap_vk_bytes = bincode::serialize(&wrap_vk).unwrap(); + let wrapped_proof_bytes = bincode::serialize(&wrapped_proof).unwrap(); + std::fs::write("wrap_vk.bin", wrap_vk_bytes).unwrap(); + std::fs::write("wraped_proof.bin", wrapped_proof_bytes).unwrap(); let wrap_vk_bytes = std::fs::read("wrap_vk.bin").unwrap(); let wrapped_proof_bytes = std::fs::read("wraped_proof.bin").unwrap(); let wrap_vk = bincode::deserialize(&wrap_vk_bytes).unwrap(); @@ -103,7 +103,11 @@ pub fn build_plonk_bn254_artifacts_with_dummy(build_dir: impl Into) { /// This may take a while as it needs to first generate a dummy proof and then it needs to compile /// the circuit. pub fn build_groth16_bn254_artifacts_with_dummy(build_dir: impl Into) { - // let (wrap_vk, wrapped_proof) = dummy_proof(); + let (wrap_vk, wrapped_proof) = dummy_proof(); + let wrap_vk_bytes = bincode::serialize(&wrap_vk).unwrap(); + let wrapped_proof_bytes = bincode::serialize(&wrapped_proof).unwrap(); + std::fs::write("wrap_vk.bin", wrap_vk_bytes).unwrap(); + std::fs::write("wraped_proof.bin", wrapped_proof_bytes).unwrap(); let wrap_vk_bytes = std::fs::read("wrap_vk.bin").unwrap(); let wrapped_proof_bytes = std::fs::read("wraped_proof.bin").unwrap(); let wrap_vk = bincode::deserialize(&wrap_vk_bytes).unwrap(); From 8cc206e5bf233459a5c7c64e2176a2eb796e80d4 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Sat, 7 Sep 2024 18:25:55 -0700 Subject: [PATCH 170/268] remove failing constraint, rc3 --- .../recursion/gnark-ffi/go/sp1/babybear/babybear.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go index 2308aa7e42..8f0da5b430 100644 --- a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go +++ b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go @@ -349,11 +349,12 @@ func (p *Chip) reduceWithMaxBits(x frontend.Variable, maxNbBits uint64) frontend quotient := result[0] remainder := result[1] - if os.Getenv("GROTH16") != "1" { - p.RangeChecker.Check(quotient, int(maxNbBits-30)) - } else { - p.api.ToBinary(quotient, int(maxNbBits-30)) - } + // TODO: Fix before 1.3.0. + // if os.Getenv("GROTH16") != "1" { + // p.RangeChecker.Check(quotient, int(maxNbBits-30)) + // } else { + // p.api.ToBinary(quotient, int(maxNbBits-30)) + // } // Check that the remainder has size less than the BabyBear modulus, by decomposing it into a 27 // bit limb and a 4 bit limb. new_result, new_err := p.api.Compiler().NewHint(SplitLimbsHint, 2, remainder) From 390cabe5b522f62aaa73920239f9ccb7b4e7cdea Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Sun, 8 Sep 2024 15:42:30 -0700 Subject: [PATCH 171/268] fix example --- examples/Cargo.lock | 33 +++++++++++++++++- examples/aggregation/program/Cargo.lock | 6 ++-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 141624 -> 141636 bytes examples/aggregation/script/src/main.rs | 2 +- examples/fibonacci/program/Cargo.lock | 4 +-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 119488 -> 119484 bytes 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/examples/Cargo.lock b/examples/Cargo.lock index 8895eef099..51c68a21fb 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -1472,6 +1472,27 @@ dependencies = [ "zeroize", ] +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.75", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -2812,6 +2833,15 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "lru" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +dependencies = [ + "hashbrown 0.14.5", +] + [[package]] name = "matchers" version = "0.1.0" @@ -4965,6 +4995,7 @@ dependencies = [ "bincode", "bytemuck", "elf", + "enum-map", "eyre", "generic-array 1.1.0", "hashbrown 0.14.5", @@ -5179,7 +5210,7 @@ dependencies = [ [[package]] name = "sp1-recursion-circuit-v2" -version = "1.2.0-rc1" +version = "1.2.0" dependencies = [ "bincode", "hashbrown 0.14.5", diff --git a/examples/aggregation/program/Cargo.lock b/examples/aggregation/program/Cargo.lock index c1253b0645..e144cde520 100644 --- a/examples/aggregation/program/Cargo.lock +++ b/examples/aggregation/program/Cargo.lock @@ -517,7 +517,7 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "1.2.0-rc1" +version = "1.2.0" dependencies = [ "anyhow", "bincode", @@ -529,7 +529,7 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "1.2.0-rc1" +version = "1.2.0" dependencies = [ "itertools 0.13.0", "lazy_static", @@ -541,7 +541,7 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "1.2.0-rc1" +version = "1.2.0" dependencies = [ "bincode", "cfg-if", diff --git a/examples/aggregation/program/elf/riscv32im-succinct-zkvm-elf b/examples/aggregation/program/elf/riscv32im-succinct-zkvm-elf index 8f27a00c98dd2f83461835dade9e771413e9503a..a19968e78337378f2c900a0423dcdd30781656c1 100755 GIT binary patch delta 10843 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 EADgYTivR!s diff --git a/examples/aggregation/script/src/main.rs b/examples/aggregation/script/src/main.rs index 9ed9c8f246..ef69bc120e 100644 --- a/examples/aggregation/script/src/main.rs +++ b/examples/aggregation/script/src/main.rs @@ -72,7 +72,7 @@ fn main() { // witnessed by the prover during the recursive aggregation process inside SP1 itself. for input in inputs { let SP1Proof::Compressed(proof) = input.proof.proof else { panic!() }; - stdin.write_proof(proof, input.vk.vk); + stdin.write_proof(*proof, input.vk.vk); } // Generate the plonk bn254 proof. diff --git a/examples/fibonacci/program/Cargo.lock b/examples/fibonacci/program/Cargo.lock index c3079154b8..bf06ad227b 100644 --- a/examples/fibonacci/program/Cargo.lock +++ b/examples/fibonacci/program/Cargo.lock @@ -335,7 +335,7 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "1.2.0-rc1" +version = "1.2.0" dependencies = [ "anyhow", "bincode", @@ -347,7 +347,7 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "1.2.0-rc1" +version = "1.2.0" dependencies = [ "bincode", "cfg-if", diff --git a/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf b/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf index 35bde9fb6d5b22632ad2e94367c7327d589d6014..9c76358a925f19ae427c0bd213687dfdf28144e7 100755 GIT binary patch delta 11011 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 Kkr$o@+V%grr=KYR delta 11007 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 BphExv From 4413e1281dfca3aa5dba14ffd64f8c263a270c65 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Tue, 10 Sep 2024 08:52:59 -0700 Subject: [PATCH 172/268] mapreduce and cache sizes --- crates/prover/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 2dcc58353d..2d54c17484 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -102,8 +102,8 @@ const COMPRESS_DEGREE: usize = 3; const SHRINK_DEGREE: usize = 3; const WRAP_DEGREE: usize = 17; -const CORE_CACHE_SIZE: usize = 100; -const COMPRESS_CACHE_SIZE: usize = 10; +const CORE_CACHE_SIZE: usize = 5; +const COMPRESS_CACHE_SIZE: usize = 3; pub type CompressAir = RecursionAir; pub type ShrinkAir = RecursionAir; @@ -521,7 +521,7 @@ impl SP1Prover { ) -> Result, SP1RecursionProverError> { // Set the batch size for the reduction tree. let batch_size = 2; - let first_layer_batch_size = 2; + let first_layer_batch_size = 1; let shard_proofs = &proof.proof.0; // Get the leaf challenger. From 85c78920017be6590ca99c054abd41871759999c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Wed, 11 Sep 2024 16:15:32 -0700 Subject: [PATCH 173/268] template for dummy fri --- crates/recursion/circuit-v2/src/fri.rs | 51 +++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 1343735cf2..f4407fe949 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -379,7 +379,9 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable mod tests { use super::*; use crate::{ - challenger::DuplexChallengerVariable, utils::tests::run_test_recursion, + challenger::DuplexChallengerVariable, + utils::tests::run_test_recursion, + witness::{WitnessBlock, Witnessable}, BatchOpeningVariable, FriCommitPhaseProofStepVariable, FriProofVariable, FriQueryProofVariable, TwoAdicPcsMatsVariable, TwoAdicPcsProofVariable, }; @@ -697,24 +699,61 @@ mod tests { .collect::>(); pcs.verify(vec![(commit, os.clone())], &proof, &mut challenger).unwrap(); + // TODO: make a `dummy_proof` function that returns dummy proof, commit, and openings. + let dummy_proof = proof.clone(); + let dummy_commit = commit; + let dummy_openings = os.clone(); + // Define circuit. let mut builder = Builder::::default(); let config = inner_fri_config(); - let proof = const_two_adic_pcs_proof(&mut builder, proof); - let (commit, rounds) = const_two_adic_pcs_rounds(&mut builder, commit.into(), os); + + let proof_variable = dummy_proof.read(&mut builder); + let commit_variable = dummy_commit.read(&mut builder); + + let domains_points_and_opens = dummy_openings + .iter() + .map(|(domain, points_and_opens)| { + let mut points = vec![]; + let mut opens = vec![]; + for (point, opening_for_point) in points_and_opens { + points.push(point.read(&mut builder)); + opens.push(opening_for_point.read(&mut builder)); + } + TwoAdicPcsMatsVariable { domain: *domain, points, values: opens } + }) + .collect::>(); + + let rounds = vec![TwoAdicPcsRoundVariable { + batch_commit: commit_variable, + domains_points_and_opens, + }]; + // let proof = const_two_adic_pcs_proof(&mut builder, proof); + // let (commit, rounds) = const_two_adic_pcs_rounds(&mut builder, commit.into(), os); let mut challenger = DuplexChallengerVariable::new(&mut builder); - challenger.observe_slice(&mut builder, commit); + challenger.observe_slice(&mut builder, commit_variable); let x2 = challenger.sample_ext(&mut builder); let x1: Ext<_, _> = builder.constant(x1); builder.assert_ext_eq(x1, x2); verify_two_adic_pcs::<_, BabyBearPoseidon2>( &mut builder, &config, - &proof, + &proof_variable, &mut challenger, rounds, ); - run_test_recursion(builder.into_operations(), std::iter::empty()); + let mut witness_stream = Vec::>::new(); + Witnessable::::write(&proof, &mut witness_stream); + Witnessable::::write(&commit, &mut witness_stream); + for dummy_opening in os { + let (_, points_and_opens) = dummy_opening; + for (point, opening_for_point) in points_and_opens { + Witnessable::::write(&point, &mut witness_stream); + Witnessable::::write(&opening_for_point, &mut witness_stream); + } + } + + run_test_recursion(builder.into_operations(), witness_stream); } } From 79f41176dba34603e9d84129c6fc305bc4a380db Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Wed, 11 Sep 2024 16:16:34 -0700 Subject: [PATCH 174/268] clippy --- crates/recursion/circuit-v2/src/fri.rs | 76 ++------------------------ 1 file changed, 6 insertions(+), 70 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index f4407fe949..46d268821e 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -382,13 +382,13 @@ mod tests { challenger::DuplexChallengerVariable, utils::tests::run_test_recursion, witness::{WitnessBlock, Witnessable}, - BatchOpeningVariable, FriCommitPhaseProofStepVariable, FriProofVariable, - FriQueryProofVariable, TwoAdicPcsMatsVariable, TwoAdicPcsProofVariable, + FriCommitPhaseProofStepVariable, FriProofVariable, FriQueryProofVariable, + TwoAdicPcsMatsVariable, }; use p3_challenger::{CanObserve, CanSample, FieldChallenger}; - use p3_commit::{Pcs, TwoAdicMultiplicativeCoset}; + use p3_commit::Pcs; use p3_field::AbstractField; - use p3_fri::{verifier, TwoAdicFriPcsProof}; + use p3_fri::verifier; use p3_matrix::dense::RowMajorMatrix; use rand::{ rngs::{OsRng, StdRng}, @@ -401,14 +401,12 @@ mod tests { }; use sp1_stark::{ baby_bear_poseidon2::BabyBearPoseidon2, inner_fri_config, inner_perm, InnerChallenge, - InnerChallengeMmcs, InnerChallenger, InnerCompress, InnerDft, InnerFriProof, InnerHash, - InnerPcs, InnerVal, InnerValMmcs, StarkGenericConfig, + InnerChallenger, InnerCompress, InnerDft, InnerFriProof, InnerHash, InnerPcs, InnerVal, + InnerValMmcs, StarkGenericConfig, }; use sp1_recursion_core_v2::DIGEST_SIZE; - use crate::Digest; - type C = InnerConfig; type SC = BabyBearPoseidon2; type F = ::Val; @@ -460,68 +458,6 @@ mod tests { } } - pub fn const_two_adic_pcs_proof( - builder: &mut Builder, - proof: TwoAdicFriPcsProof, - ) -> TwoAdicPcsProofVariable { - let fri_proof = const_fri_proof(builder, proof.fri_proof); - let query_openings = proof - .query_openings - .iter() - .map(|query_opening| { - query_opening - .iter() - .map(|opening| BatchOpeningVariable { - opened_values: opening - .opened_values - .iter() - .map(|opened_value| { - opened_value - .iter() - .map(|value| vec![builder.eval::, _>(*value)]) - .collect::>() - }) - .collect::>(), - opening_proof: opening - .opening_proof - .iter() - .map(|opening_proof| opening_proof.map(|x| builder.eval(x))) - .collect::>(), - }) - .collect::>() - }) - .collect::>(); - TwoAdicPcsProofVariable { fri_proof, query_openings } - } - - #[allow(clippy::type_complexity)] - pub fn const_two_adic_pcs_rounds( - builder: &mut Builder, - commit: [F; DIGEST_SIZE], - os: Vec<(TwoAdicMultiplicativeCoset, Vec<(InnerChallenge, Vec)>)>, - ) -> (Digest, Vec>) { - let commit: Digest = commit.map(|x| builder.eval(x)); - - let mut domains_points_and_opens = Vec::new(); - for (domain, poly) in os.into_iter() { - let points: Vec> = - poly.iter().map(|(p, _)| builder.eval(SymbolicExt::from_f(*p))).collect::>(); - let values: Vec>> = poly - .iter() - .map(|(_, v)| { - v.clone() - .iter() - .map(|t| builder.eval(SymbolicExt::from_f(*t))) - .collect::>() - }) - .collect::>(); - let domain_points_and_values = TwoAdicPcsMatsVariable { domain, points, values }; - domains_points_and_opens.push(domain_points_and_values); - } - - (commit, vec![TwoAdicPcsRoundVariable { batch_commit: commit, domains_points_and_opens }]) - } - /// Reference: https://github.com/Plonky3/Plonky3/blob/4809fa7bedd9ba8f6f5d3267b1592618e3776c57/merkle-tree/src/mmcs.rs#L421 #[test] fn size_gaps() { From 23cc3a4a5e0448283043544c666fafc6bbe9002f Mon Sep 17 00:00:00 2001 From: Eugene Rabinovich Date: Thu, 12 Sep 2024 08:08:47 -0700 Subject: [PATCH 175/268] feat: dummy fri proofs (#1497) --- crates/recursion/circuit-v2/src/fri.rs | 105 ++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 11 deletions(-) diff --git a/crates/recursion/circuit-v2/src/fri.rs b/crates/recursion/circuit-v2/src/fri.rs index 46d268821e..01890cb3f7 100644 --- a/crates/recursion/circuit-v2/src/fri.rs +++ b/crates/recursion/circuit-v2/src/fri.rs @@ -2,9 +2,14 @@ use itertools::{izip, Itertools}; use p3_baby_bear::BabyBear; use p3_commit::PolynomialSpace; use p3_field::{AbstractField, TwoAdicField}; -use p3_fri::FriConfig; +use p3_fri::{ + BatchOpening, CommitPhaseProofStep, FriConfig, FriProof, QueryProof, TwoAdicFriPcsProof, +}; +use p3_symmetric::Hash; use p3_util::log2_strict_usize; use sp1_recursion_compiler::ir::{Builder, DslIr, Felt, SymbolicExt}; +use sp1_recursion_core_v2::DIGEST_SIZE; +use sp1_stark::{InnerChallenge, InnerChallengeMmcs, InnerPcsProof, InnerVal}; use std::{ cmp::Reverse, iter::{once, repeat_with, zip}, @@ -375,6 +380,64 @@ pub fn verify_batch, SC: BabyBearFriConfigVariable SC::assert_digest_eq(builder, root, commit); } +pub fn dummy_hash() -> Hash { + [BabyBear::zero(); DIGEST_SIZE].into() +} + +pub fn dummy_query_proof(height: usize) -> QueryProof { + QueryProof { + commit_phase_openings: (0..height) + .map(|i| CommitPhaseProofStep { + sibling_value: InnerChallenge::zero(), + opening_proof: vec![dummy_hash().into(); height - i], + }) + .collect(), + } +} + +/// Make a dummy PCS proof for a given proof shape. Used to generate vkey information for fixed proof +/// shapes. +/// +/// The parameter `batch_shapes` contains (width, height) data for each matrix in each batch. +pub fn dummy_pcs_proof( + fri_queries: usize, + batch_shapes: Vec>, + log_blowup: usize, +) -> InnerPcsProof { + let &max_height = batch_shapes + .iter() + .map(|shapes| shapes.iter().map(|(_, x)| x).max().unwrap()) + .max() + .unwrap(); + let fri_proof = FriProof { + commit_phase_commits: vec![dummy_hash(); max_height], + query_proofs: vec![dummy_query_proof(max_height); fri_queries], + final_poly: InnerChallenge::zero(), + pow_witness: InnerVal::zero(), + }; + + // For each query, create a dummy batch opening for each matrix in the batch. `batch_shapes` + // determines the sizes of each dummy batch opening. + let query_openings = (0..fri_queries) + .map(|_| { + batch_shapes + .iter() + .map(|shapes| { + let batch_max_height = shapes.iter().map(|(_, x)| x).max().unwrap(); + BatchOpening { + opened_values: shapes + .iter() + .map(|(width, _)| vec![BabyBear::zero(); *width]) + .collect(), + opening_proof: vec![dummy_hash().into(); *batch_max_height + log_blowup], + } + }) + .collect::>() + }) + .collect::>(); + TwoAdicFriPcsProof { fri_proof, query_openings } +} + #[cfg(test)] mod tests { use super::*; @@ -635,10 +698,30 @@ mod tests { .collect::>(); pcs.verify(vec![(commit, os.clone())], &proof, &mut challenger).unwrap(); - // TODO: make a `dummy_proof` function that returns dummy proof, commit, and openings. - let dummy_proof = proof.clone(); - let dummy_commit = commit; - let dummy_openings = os.clone(); + let dummy_proof = dummy_pcs_proof( + inner_fri_config().num_queries, + vec![log_degrees.iter().copied().map(|d| (100, d)).collect()], + inner_fri_config().log_blowup, + ); + + let dummy_commit = dummy_hash(); + let dummy_openings = os + .iter() + .map(|(domain, points_and_openings)| { + ( + *domain, + points_and_openings + .iter() + .map(|(_, row)| { + ( + InnerChallenge::zero(), + row.iter().map(|_| InnerChallenge::zero()).collect_vec(), + ) + }) + .collect_vec(), + ) + }) + .collect::>(); // Define circuit. let mut builder = Builder::::default(); @@ -648,15 +731,15 @@ mod tests { let commit_variable = dummy_commit.read(&mut builder); let domains_points_and_opens = dummy_openings - .iter() + .into_iter() .map(|(domain, points_and_opens)| { let mut points = vec![]; let mut opens = vec![]; for (point, opening_for_point) in points_and_opens { - points.push(point.read(&mut builder)); - opens.push(opening_for_point.read(&mut builder)); + points.push(InnerChallenge::read(&point, &mut builder)); + opens.push(Vec::::read(&opening_for_point, &mut builder)); } - TwoAdicPcsMatsVariable { domain: *domain, points, values: opens } + TwoAdicPcsMatsVariable { domain, points, values: opens } }) .collect::>(); @@ -682,8 +765,8 @@ mod tests { let mut witness_stream = Vec::>::new(); Witnessable::::write(&proof, &mut witness_stream); Witnessable::::write(&commit, &mut witness_stream); - for dummy_opening in os { - let (_, points_and_opens) = dummy_opening; + for opening in os { + let (_, points_and_opens) = opening; for (point, opening_for_point) in points_and_opens { Witnessable::::write(&point, &mut witness_stream); Witnessable::::write(&opening_for_point, &mut witness_stream); From 39b612ce86fc878743a51d16f3100545973d0ac3 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 13 Sep 2024 09:19:47 -0700 Subject: [PATCH 176/268] optional verification --- crates/prover/src/lib.rs | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 2d54c17484..ff653bd040 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1106,6 +1106,7 @@ pub mod tests { stdin: SP1Stdin, opts: SP1ProverOpts, test_kind: Test, + verify: bool, ) -> Result<()> { tracing::info!("initializing prover"); let context = SP1Context::default(); @@ -1117,8 +1118,10 @@ pub mod tests { let core_proof = prover.prove_core(&pk, &stdin, opts, context)?; let public_values = core_proof.public_values.clone(); - tracing::info!("verify core"); - prover.verify(&core_proof.proof, &vk)?; + if verify { + tracing::info!("verify core"); + prover.verify(&core_proof.proof, &vk)?; + } if test_kind == Test::Core { return Ok(()); @@ -1129,8 +1132,10 @@ pub mod tests { let compressed_proof = prover.compress(&vk, core_proof, vec![], opts)?; compress_span.exit(); - tracing::info!("verify compressed"); - prover.verify_compressed(&compressed_proof, &vk)?; + if verify { + tracing::info!("verify compressed"); + prover.verify_compressed(&compressed_proof, &vk)?; + } if test_kind == Test::Compress { return Ok(()); @@ -1139,8 +1144,10 @@ pub mod tests { tracing::info!("shrink"); let shrink_proof = prover.shrink(compressed_proof, opts)?; - tracing::info!("verify shrink"); - prover.verify_shrink(&shrink_proof, &vk)?; + if verify { + tracing::info!("verify shrink"); + prover.verify_shrink(&shrink_proof, &vk)?; + } if test_kind == Test::Shrink { return Ok(()); @@ -1161,8 +1168,10 @@ pub mod tests { let wrapped_bn254_proof = bincode::deserialize(&bytes).unwrap(); - tracing::info!("verify wrap bn254"); - prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk).unwrap(); + if verify { + tracing::info!("verify wrap bn254"); + prover.verify_wrap_bn254(&wrapped_bn254_proof, &vk).unwrap(); + } if test_kind == Test::Wrap { return Ok(()); @@ -1195,7 +1204,14 @@ pub mod tests { let groth16_bn254_proof = prover.wrap_groth16_bn254(wrapped_bn254_proof, &artifacts_dir); println!("{:?}", groth16_bn254_proof); - prover.verify_groth16_bn254(&groth16_bn254_proof, &vk, &public_values, &artifacts_dir)?; + if verify { + prover.verify_groth16_bn254( + &groth16_bn254_proof, + &vk, + &public_values, + &artifacts_dir, + )?; + } Ok(()) } @@ -1339,6 +1355,7 @@ pub mod tests { SP1Stdin::default(), opts, Test::Plonk, + true, ) } From ec38acdcf90af66b4e709459e96bb59a6338f129 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 13 Sep 2024 09:52:17 -0700 Subject: [PATCH 177/268] nicer api --- crates/prover/src/lib.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index ff653bd040..4db331d3fb 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -1106,6 +1106,26 @@ pub mod tests { stdin: SP1Stdin, opts: SP1ProverOpts, test_kind: Test, + ) -> Result<()> { + run_e2e_prover_with_options(prover, elf, stdin, opts, test_kind, true) + } + + pub fn bench_e2e_prover( + prover: &SP1Prover, + elf: &[u8], + stdin: SP1Stdin, + opts: SP1ProverOpts, + test_kind: Test, + ) -> Result<()> { + run_e2e_prover_with_options(prover, elf, stdin, opts, test_kind, false) + } + + pub fn run_e2e_prover_with_options( + prover: &SP1Prover, + elf: &[u8], + stdin: SP1Stdin, + opts: SP1ProverOpts, + test_kind: Test, verify: bool, ) -> Result<()> { tracing::info!("initializing prover"); @@ -1355,7 +1375,6 @@ pub mod tests { SP1Stdin::default(), opts, Test::Plonk, - true, ) } From c34cf443b96c54205524ca98b02f90e00f849a3d Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 13 Sep 2024 17:06:21 -0700 Subject: [PATCH 178/268] feat: fixed proof shapes (#1478) --- Cargo.lock | 1 + crates/core/executor/src/program.rs | 2 +- crates/core/executor/src/record.rs | 22 +- crates/core/executor/src/shape.rs | 32 +- crates/core/machine/src/cpu/trace.rs | 4 +- crates/core/machine/src/memory/program.rs | 12 +- crates/core/machine/src/program/mod.rs | 5 +- crates/core/machine/src/riscv/mod.rs | 83 +++- crates/core/machine/src/riscv/shape.rs | 418 ++++++++++++++++++ crates/core/machine/src/utils/prove.rs | 20 +- crates/prover/Cargo.toml | 1 + crates/prover/src/lib.rs | 115 +++-- crates/prover/src/utils.rs | 50 ++- crates/recursion/circuit-v2/src/challenger.rs | 2 +- crates/recursion/circuit-v2/src/hash.rs | 2 +- .../recursion/circuit-v2/src/machine/core.rs | 12 +- .../circuit-v2/src/machine/vkey_proof.rs | 25 +- .../circuit-v2/src/machine/witness.rs | 2 + .../core-v2/src/chips/mem/constant.rs | 8 +- .../core-v2/src/chips/mem/variable.rs | 10 +- crates/recursion/core-v2/src/machine.rs | 99 ++++- .../recursion/core-v2/src/runtime/program.rs | 2 +- crates/recursion/core-v2/src/shape.rs | 231 +++++++++- crates/stark/src/chip.rs | 6 + crates/stark/src/prover.rs | 2 +- crates/stark/src/types.rs | 33 +- 26 files changed, 1072 insertions(+), 127 deletions(-) create mode 100644 crates/core/machine/src/riscv/shape.rs diff --git a/Cargo.lock b/Cargo.lock index e655c1a1e6..8429544aff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6200,6 +6200,7 @@ dependencies = [ "bincode", "clap", "dirs", + "eyre", "hex", "itertools 0.13.0", "lru", diff --git a/crates/core/executor/src/program.rs b/crates/core/executor/src/program.rs index 85ef17177b..497dc6a0d1 100644 --- a/crates/core/executor/src/program.rs +++ b/crates/core/executor/src/program.rs @@ -82,7 +82,7 @@ impl Program { .as_ref() .map(|shape| { shape - .shape + .inner .get(&air.name()) .unwrap_or_else(|| panic!("Chip {} not found in specified shape", air.name())) }) diff --git a/crates/core/executor/src/record.rs b/crates/core/executor/src/record.rs index 46ba4c2532..4241e3074a 100644 --- a/crates/core/executor/src/record.rs +++ b/crates/core/executor/src/record.rs @@ -285,15 +285,19 @@ impl ExecutionRecord { /// Return the number of rows needed for a chip, according to the proof shape specified in the /// struct. pub fn fixed_log2_rows>(&self, air: &A) -> Option { - self.shape - .as_ref() - .map(|shape| { - shape - .shape - .get(&air.name()) - .unwrap_or_else(|| panic!("Chip {} not found in specified shape", air.name())) - }) - .copied() + self.shape.as_ref().and_then(|shape| { + let log2_rows = shape.inner.get(&air.name()).copied(); + if log2_rows.is_none() { + tracing::warn!("Chip {} not found in specified shape", air.name()); + } + log2_rows + }) + } + + /// Determines whether the execution record contains CPU events. + #[must_use] + pub fn contains_cpu(&self) -> bool { + !self.cpu_events.is_empty() } } diff --git a/crates/core/executor/src/shape.rs b/crates/core/executor/src/shape.rs index 19e258d040..cbf517c232 100644 --- a/crates/core/executor/src/shape.rs +++ b/crates/core/executor/src/shape.rs @@ -4,8 +4,32 @@ use serde::{Deserialize, Serialize}; /// The shape of a core proof. #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct CoreShape { - /// The id of the shape. Used for enumeration of the possible proof shapes. - pub id: usize, - /// The shape of the proof. Keys are the chip names and values are the log-heights of the chips. - pub shape: HashMap, + /// The shape of the proof. + /// + /// Keys are the chip names and values are the log-heights of the chips. + pub inner: HashMap, +} + +impl Extend for CoreShape { + fn extend>(&mut self, iter: T) { + for shape in iter { + self.inner.extend(shape.inner); + } + } +} + +impl Extend<(String, usize)> for CoreShape { + fn extend>(&mut self, iter: T) { + self.inner.extend(iter); + } +} + +impl IntoIterator for CoreShape { + type Item = (String, usize); + + type IntoIter = hashbrown::hash_map::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.inner.into_iter() + } } diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index 534aa417d5..790c8368b2 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -101,7 +101,7 @@ impl MachineAir for CpuChip { } fn included(&self, input: &Self::Record) -> bool { - !input.cpu_events.is_empty() + input.contains_cpu() } } @@ -709,7 +709,7 @@ impl CpuChip { fn pad_to_power_of_two(&self, shape: &Option, values: &mut Vec) { let n_real_rows = values.len() / NUM_CPU_COLS; let padded_nb_rows = if let Some(shape) = shape { - shape.shape[&MachineAir::::name(self)] + 1 << shape.inner[&MachineAir::::name(self)] } else if n_real_rows < 16 { 16 } else { diff --git a/crates/core/machine/src/memory/program.rs b/crates/core/machine/src/memory/program.rs index 2bbca1e8bf..c69e7e575b 100644 --- a/crates/core/machine/src/memory/program.rs +++ b/crates/core/machine/src/memory/program.rs @@ -6,7 +6,7 @@ use p3_air::{Air, AirBuilder, AirBuilderWithPublicValues, BaseAir, PairBuilder}; use p3_field::{AbstractField, PrimeField}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; -use sp1_core_executor::{CoreShape, ExecutionRecord, Program}; +use sp1_core_executor::{ExecutionRecord, Program}; use sp1_derive::AlignedBorrow; use sp1_stark::{ air::{AirInteraction, MachineAir, PublicValues, SP1AirBuilder, SP1_PROOF_NUM_PV_ELTS}, @@ -67,12 +67,12 @@ impl MachineAir for MemoryProgramChip { } fn generate_preprocessed_trace(&self, program: &Self::Program) -> Option> { - let program_memory = program.memory_image.clone(); + let program_memory = &program.memory_image; // Note that BTreeMap is guaranteed to be sorted by key. This makes the row order // deterministic. let mut rows = program_memory - .into_iter() - .map(|(addr, word)| { + .iter() + .map(|(&addr, &word)| { let mut row = [F::zero(); NUM_MEMORY_PROGRAM_PREPROCESSED_COLS]; let cols: &mut MemoryProgramPreprocessedCols = row.as_mut_slice().borrow_mut(); cols.addr = F::from_canonical_u32(addr); @@ -106,7 +106,7 @@ impl MachineAir for MemoryProgramChip { input: &ExecutionRecord, _output: &mut ExecutionRecord, ) -> RowMajorMatrix { - let program_memory_addrs = input.program.memory_image.keys().copied().collect::>(); + let program_memory_addrs = input.program.memory_image.keys().copied(); let mult = if input.public_values.shard == 1 { F::one() } else { F::zero() }; @@ -126,7 +126,7 @@ impl MachineAir for MemoryProgramChip { pad_rows_fixed( &mut rows, || [F::zero(); NUM_MEMORY_PROGRAM_MULT_COLS], - input.shape.as_ref().map(|s: &CoreShape| s.shape[&MachineAir::::name(self)]), + input.fixed_log2_rows::(self), ); // Convert the trace to a row major matrix. diff --git a/crates/core/machine/src/program/mod.rs b/crates/core/machine/src/program/mod.rs index 4b4903d7fe..cee9179a4f 100644 --- a/crates/core/machine/src/program/mod.rs +++ b/crates/core/machine/src/program/mod.rs @@ -64,10 +64,9 @@ impl MachineAir for ProgramChip { debug_assert!(!program.instructions.is_empty(), "empty program"); let mut rows = program .instructions - .clone() - .into_iter() + .iter() .enumerate() - .map(|(i, instruction)| { + .map(|(i, &instruction)| { let pc = program.pc_base + (i as u32 * 4); let mut row = [F::zero(); NUM_PROGRAM_PREPROCESSED_COLS]; let cols: &mut ProgramPreprocessedCols = row.as_mut_slice().borrow_mut(); diff --git a/crates/core/machine/src/riscv/mod.rs b/crates/core/machine/src/riscv/mod.rs index ee83966bec..25b3258388 100644 --- a/crates/core/machine/src/riscv/mod.rs +++ b/crates/core/machine/src/riscv/mod.rs @@ -1,10 +1,15 @@ pub mod cost; +mod shape; + +pub use shape::*; +use sp1_core_executor::{ExecutionRecord, Program}; + use crate::{ memory::{MemoryChipType, MemoryProgramChip}, syscall::precompiles::fptower::{Fp2AddSubAssignChip, Fp2MulAssignChip, FpOpChip}, }; -use hashbrown::HashMap; +use hashbrown::{HashMap, HashSet}; use p3_field::PrimeField32; pub use riscv_chips::*; use sp1_curves::weierstrass::{bls12_381::Bls12381BaseField, bn254::Bn254BaseField}; @@ -140,6 +145,11 @@ impl RiscvAir { costs } + pub fn get_airs_and_costs() -> (Vec, HashMap) { + let (chips, costs) = Self::get_chips_and_costs(); + (chips.into_iter().map(|chip| chip.into_inner()).collect(), costs) + } + /// Get all the different RISC-V AIRs. pub fn get_chips_and_costs() -> (Vec>, HashMap) { let mut costs: HashMap = HashMap::new(); @@ -307,6 +317,77 @@ impl RiscvAir { (chips, costs) } + + /// Get the heights of the preprocessed chips for a given program. + pub(crate) fn preprocessed_heights(program: &Program) -> Vec<(Self, usize)> { + println!("Program instructions: {}", program.instructions.len()); + println!("Program memory: {}", program.memory_image.len()); + vec![ + (RiscvAir::Program(ProgramChip::default()), program.instructions.len()), + (RiscvAir::ProgramMemory(MemoryProgramChip::default()), program.memory_image.len()), + ] + } + + /// Get the heights of the chips for a given execution record. + pub(crate) fn core_heights(record: &ExecutionRecord) -> Vec<(Self, usize)> { + vec![ + (RiscvAir::Cpu(CpuChip::default()), record.cpu_events.len()), + (RiscvAir::DivRem(DivRemChip::default()), record.divrem_events.len()), + ( + RiscvAir::Add(AddSubChip::default()), + record.add_events.len() + record.sub_events.len(), + ), + (RiscvAir::Bitwise(BitwiseChip::default()), record.bitwise_events.len()), + (RiscvAir::Mul(MulChip::default()), record.mul_events.len()), + (RiscvAir::ShiftRight(ShiftRightChip::default()), record.shift_right_events.len()), + (RiscvAir::ShiftLeft(ShiftLeft::default()), record.shift_left_events.len()), + (RiscvAir::Lt(LtChip::default()), record.lt_events.len()), + ] + } + + pub(crate) fn get_all_core_airs() -> Vec { + vec![ + RiscvAir::Cpu(CpuChip::default()), + RiscvAir::Add(AddSubChip::default()), + RiscvAir::Bitwise(BitwiseChip::default()), + RiscvAir::Mul(MulChip::default()), + RiscvAir::DivRem(DivRemChip::default()), + RiscvAir::Lt(LtChip::default()), + RiscvAir::ShiftLeft(ShiftLeft::default()), + RiscvAir::ShiftRight(ShiftRightChip::default()), + ] + } + + pub(crate) fn memory_init_final_airs() -> Vec { + vec![ + RiscvAir::MemoryInit(MemoryChip::new(MemoryChipType::Initialize)), + RiscvAir::MemoryFinal(MemoryChip::new(MemoryChipType::Finalize)), + ] + } + + pub(crate) fn get_memory_init_final_heights(record: &ExecutionRecord) -> Vec<(Self, usize)> { + vec![ + ( + RiscvAir::MemoryInit(MemoryChip::new(MemoryChipType::Initialize)), + record.memory_initialize_events.len(), + ), + ( + RiscvAir::MemoryFinal(MemoryChip::new(MemoryChipType::Finalize)), + record.memory_finalize_events.len(), + ), + ] + } + + pub(crate) fn get_all_precompile_airs() -> Vec { + let mut airs: HashSet<_> = Self::get_airs_and_costs().0.into_iter().collect(); + for core_air in Self::get_all_core_airs() { + airs.remove(&core_air); + } + for memory_air in Self::memory_init_final_airs() { + airs.remove(&memory_air); + } + airs.into_iter().collect() + } } impl PartialEq for RiscvAir { diff --git a/crates/core/machine/src/riscv/shape.rs b/crates/core/machine/src/riscv/shape.rs new file mode 100644 index 0000000000..5ccbb8af2a --- /dev/null +++ b/crates/core/machine/src/riscv/shape.rs @@ -0,0 +1,418 @@ +use itertools::Itertools; + +use hashbrown::{HashMap, HashSet}; +use p3_field::PrimeField32; +use sp1_core_executor::{CoreShape, ExecutionRecord, Program}; +use sp1_stark::{air::MachineAir, ProofShape}; +use thiserror::Error; + +use crate::memory::{MemoryChipType, MemoryProgramChip}; + +use super::{ + AddSubChip, BitwiseChip, CpuChip, DivRemChip, LtChip, MemoryChip, MulChip, ProgramChip, + RiscvAir, ShiftLeft, ShiftRightChip, +}; + +#[derive(Debug, Error)] +pub enum CoreShapeError { + #[error("no preprocessed shape found")] + PreprocessedShapeError, + #[error("Preprocessed shape already fixed")] + PreprocessedShapeAlreadyFixed, + #[error("no shape found")] + ShapeError, + #[error("Preprocessed shape missing")] + PrepcocessedShapeMissing, + #[error("Shape already fixed")] + ShapeAlreadyFixed, + #[error("Precompile not included in allowed shapes")] + PrecompileNotIncluded, +} + +/// A structure that enables fixing the shape of an executionrecord. +pub struct CoreShapeConfig { + included_shapes: Vec>, + allowed_preprocessed_log_heights: HashMap, Vec>>, + short_core_allowed_log_heights: HashMap, Vec>>, + medium_core_allowed_log_heights: HashMap, Vec>>, + long_core_allowed_log_heights: HashMap, Vec>>, + memory_allowed_log_heights: HashMap, Vec>>, + precompile_allowed_log_heights: Vec, Vec>>>, +} + +impl CoreShapeConfig { + /// Fix the preprocessed shape of the proof. + pub fn fix_preprocessed_shape(&self, program: &mut Program) -> Result<(), CoreShapeError> { + if program.preprocessed_shape.is_some() { + return Err(CoreShapeError::PreprocessedShapeAlreadyFixed); + } + + let heights = RiscvAir::::preprocessed_heights(program); + let prep_shape = + Self::find_shape_from_allowed_heights(&heights, &self.allowed_preprocessed_log_heights) + .ok_or(CoreShapeError::PreprocessedShapeError)?; + + program.preprocessed_shape = Some(prep_shape); + Ok(()) + } + + #[inline] + fn find_shape_from_allowed_heights( + heights: &[(RiscvAir, usize)], + allowed_log_heights: &HashMap, Vec>>, + ) -> Option { + let shape: Option> = heights + .iter() + .map(|(air, height)| { + for allowed_log_height in + allowed_log_heights.get(air).into_iter().flatten().flatten() + { + let allowed_height = 1 << allowed_log_height; + if *height <= allowed_height { + return Some((air.name(), *allowed_log_height)); + } + } + None + }) + .collect(); + + let shape = CoreShape { inner: shape? }; + Some(shape) + } + + /// Fix the shape of the proof. + pub fn fix_shape(&self, record: &mut ExecutionRecord) -> Result<(), CoreShapeError> { + if record.program.preprocessed_shape.is_none() { + return Err(CoreShapeError::PrepcocessedShapeMissing); + } + if record.shape.is_some() { + return Err(CoreShapeError::ShapeAlreadyFixed); + } + + // Set the shape of the chips with prepcoded shapes to match the preprocessed shape from the + // program. + record.shape.clone_from(&record.program.preprocessed_shape); + + // If cpu is included, try to fix the shape as a core. + if record.contains_cpu() { + // If cpu is included, try to fix the shape as a core. + + // Get the heights of the core airs in the record. + let heights = RiscvAir::::core_heights(record); + + // Try to find a shape within the included shapes. + + // Try to find a shape within the short shape cluster. + if let Some(shape) = Self::find_shape_from_allowed_heights( + &heights, + &self.short_core_allowed_log_heights, + ) { + record.shape.as_mut().unwrap().extend(shape); + return Ok(()); + } + + // Try to find a shape within the medium shape cluster. + if let Some(shape) = Self::find_shape_from_allowed_heights( + &heights, + &self.medium_core_allowed_log_heights, + ) { + record.shape.as_mut().unwrap().extend(shape); + return Ok(()); + } + + // Try to find a shape within the long shape cluster. + if let Some(shape) = + Self::find_shape_from_allowed_heights(&heights, &self.long_core_allowed_log_heights) + { + record.shape.as_mut().unwrap().extend(shape); + return Ok(()); + } + // No shape found, so return an error. + return Err(CoreShapeError::ShapeError); + } + + // If the record is a global memory init/finalize record, try to fix the shape as such. + if !record.memory_initialize_events.is_empty() || !record.memory_finalize_events.is_empty() + { + let heights = RiscvAir::::get_memory_init_final_heights(record); + let shape = + Self::find_shape_from_allowed_heights(&heights, &self.memory_allowed_log_heights) + .ok_or(CoreShapeError::ShapeError)?; + record.shape.as_mut().unwrap().extend(shape); + return Ok(()); + } + + // Otherwise, try to fix the shape as a precompile record. Since we allow all possible + // heights up to 1 << 22, we currently just don't fix the shape, but making sure the shape + // is included + self.precompile_allowed_log_heights + .iter() + .find_map(|allowed_log_heights| { + // Check if the precompile is included in the shapes. + for (air, _) in allowed_log_heights { + if !air.included(record) { + return None; + } + } + Some(()) + }) + .ok_or(CoreShapeError::PrecompileNotIncluded)?; + Ok(()) + } + + fn generate_all_shapes_from_allowed_log_heights( + allowed_log_heights: impl IntoIterator>)>, + ) -> impl Iterator { + // for chip in allowed_heights. + allowed_log_heights + .into_iter() + .map(|(name, heights)| heights.into_iter().map(move |height| (name.clone(), height))) + .multi_cartesian_product() + .map(|iter| { + iter.into_iter() + .filter_map(|(name, maybe_height)| { + maybe_height.map(|log_height| (name, log_height)) + }) + .collect::() + }) + } + + pub fn generate_all_allowed_shapes(&self) -> impl Iterator + '_ { + let preprocessed_heights = self + .allowed_preprocessed_log_heights + .iter() + .map(|(air, heights)| (air.name(), heights.clone())); + + let mut short_heights = self + .short_core_allowed_log_heights + .iter() + .map(|(air, heights)| (air.name(), heights.clone())) + .collect::>(); + short_heights.extend(preprocessed_heights.clone()); + + let mut medium_heights = self + .medium_core_allowed_log_heights + .iter() + .map(|(air, heights)| (air.name(), heights.clone())) + .collect::>(); + medium_heights.extend(preprocessed_heights.clone()); + + let mut long_heights = self + .long_core_allowed_log_heights + .iter() + .map(|(air, heights)| (air.name(), heights.clone())) + .collect::>(); + long_heights.extend(preprocessed_heights.clone()); + + let mut memory_heights = self + .memory_allowed_log_heights + .iter() + .map(|(air, heights)| (air.name(), heights.clone())) + .collect::>(); + memory_heights.extend(preprocessed_heights.clone()); + + let precompile_heights = self + .precompile_allowed_log_heights + .iter() + .map(|allowed_log_heights| { + let mut heights = allowed_log_heights + .iter() + .map(|(air, heights)| (air.name(), heights.clone())) + .collect::>(); + heights.extend(preprocessed_heights.clone()); + heights + }) + .collect::>(); + + let included_shapes = + self.included_shapes.iter().map(ProofShape::from_map).collect::>(); + + let cpu_name = || RiscvAir::::Cpu(CpuChip::default()).name(); + let core_filter = move |shape: &ProofShape| { + let core_airs = RiscvAir::::get_all_core_airs() + .into_iter() + .map(|air| air.name()) + .collect::>(); + let core_chips_and_heights = shape + .chip_information + .iter() + .filter(|(name, _)| core_airs.contains(name)) + .cloned() + .collect::>(); + + let cpu_name = cpu_name(); + + if core_chips_and_heights.first().unwrap().0 != cpu_name { + return false; + } + + let cpu_height = core_chips_and_heights.first().unwrap().1; + let num_core_chips_at_cpu_height = + core_chips_and_heights.iter().filter(|(_, height)| *height == cpu_height).count(); + + if num_core_chips_at_cpu_height > 2 { + return false; + } + + let sum_of_heights = + core_chips_and_heights.iter().map(|(_, height)| *height).sum::(); + + let mut max_possible_sum_of_heights = cpu_height; + + let num_core_chips = core_chips_and_heights.len(); + + if num_core_chips > 1 { + max_possible_sum_of_heights = + 2 * cpu_height + (cpu_height >> 1) * (num_core_chips - 2); + } + + sum_of_heights <= max_possible_sum_of_heights + }; + + included_shapes + .into_iter() + .chain( + Self::generate_all_shapes_from_allowed_log_heights(short_heights) + .filter(core_filter), + ) + .chain( + Self::generate_all_shapes_from_allowed_log_heights(medium_heights) + .filter(core_filter), + ) + .chain( + Self::generate_all_shapes_from_allowed_log_heights(long_heights) + .filter(core_filter), + ) + .chain(Self::generate_all_shapes_from_allowed_log_heights(memory_heights)) + .chain(precompile_heights.into_iter().flat_map(|allowed_log_heights| { + Self::generate_all_shapes_from_allowed_log_heights(allowed_log_heights) + })) + } +} + +impl Default for CoreShapeConfig { + fn default() -> Self { + let included_shapes = vec![]; + + // Preprocessed chip heights. + let program_heights = vec![Some(16), Some(20), Some(21), Some(22)]; + let program_memory_heights = vec![Some(16), Some(20), Some(21), Some(22)]; + + let allowed_preprocessed_log_heights = HashMap::from([ + (RiscvAir::Program(ProgramChip::default()), program_heights), + (RiscvAir::ProgramMemory(MemoryProgramChip::default()), program_memory_heights), + ]); + + // Get the heights for the short shape cluster (for small shards). + let cpu_heights = vec![Some(10), Some(16)]; + let divrem_heights = vec![None, Some(10), Some(16)]; + let add_sub_heights = vec![None, Some(10), Some(16)]; + let bitwise_heights = vec![None, Some(10), Some(16)]; + let mul_heights = vec![None, Some(10), Some(16)]; + let shift_right_heights = vec![None, Some(10), Some(16)]; + let shift_left_heights = vec![None, Some(10), Some(16)]; + let lt_heights = vec![None, Some(10), Some(16)]; + + let short_allowed_log_heights = HashMap::from([ + (RiscvAir::Cpu(CpuChip::default()), cpu_heights), + (RiscvAir::DivRem(DivRemChip::default()), divrem_heights), + (RiscvAir::Add(AddSubChip::default()), add_sub_heights), + (RiscvAir::Bitwise(BitwiseChip::default()), bitwise_heights), + (RiscvAir::Mul(MulChip::default()), mul_heights), + (RiscvAir::ShiftRight(ShiftRightChip::default()), shift_right_heights), + (RiscvAir::ShiftLeft(ShiftLeft::default()), shift_left_heights), + (RiscvAir::Lt(LtChip::default()), lt_heights), + ]); + + // Get the heights for the medium shape cluster. + let cpu_heights = vec![Some(20), Some(21)]; + let divrem_heights = vec![None, Some(19), Some(20), Some(21)]; + let add_sub_heights = vec![None, Some(19), Some(20), Some(21)]; + let bitwise_heights = vec![None, Some(19), Some(20), Some(21)]; + let mul_heights = vec![None, Some(19), Some(20), Some(21)]; + let shift_right_heights = vec![None, Some(19), Some(20), Some(21)]; + let shift_left_heights = vec![None, Some(19), Some(20), Some(21)]; + let lt_heights = vec![None, Some(19), Some(20), Some(21)]; + + let medium_allowed_log_heights = HashMap::from([ + (RiscvAir::Cpu(CpuChip::default()), cpu_heights), + (RiscvAir::DivRem(DivRemChip::default()), divrem_heights), + (RiscvAir::Add(AddSubChip::default()), add_sub_heights), + (RiscvAir::Bitwise(BitwiseChip::default()), bitwise_heights), + (RiscvAir::Mul(MulChip::default()), mul_heights), + (RiscvAir::ShiftRight(ShiftRightChip::default()), shift_right_heights), + (RiscvAir::ShiftLeft(ShiftLeft::default()), shift_left_heights), + (RiscvAir::Lt(LtChip::default()), lt_heights), + ]); + + // Core chip heights for the long shape cluster. + let cpu_heights = vec![Some(21), Some(22)]; + let divrem_heights = vec![None, Some(20), Some(21), Some(22)]; + let add_sub_heights = vec![None, Some(20), Some(21), Some(22)]; + let bitwise_heights = vec![None, Some(20), Some(21), Some(22)]; + let mul_heights = vec![None, Some(20), Some(21), Some(22)]; + let shift_right_heights = vec![None, Some(20), Some(21), Some(22)]; + let shift_left_heights = vec![None, Some(20), Some(21), Some(22)]; + let lt_heights = vec![None, Some(20), Some(21), Some(22)]; + + let long_allowed_log_heights = HashMap::from([ + (RiscvAir::Cpu(CpuChip::default()), cpu_heights), + (RiscvAir::DivRem(DivRemChip::default()), divrem_heights), + (RiscvAir::Add(AddSubChip::default()), add_sub_heights), + (RiscvAir::Bitwise(BitwiseChip::default()), bitwise_heights), + (RiscvAir::Mul(MulChip::default()), mul_heights), + (RiscvAir::ShiftRight(ShiftRightChip::default()), shift_right_heights), + (RiscvAir::ShiftLeft(ShiftLeft::default()), shift_left_heights), + (RiscvAir::Lt(LtChip::default()), lt_heights), + ]); + + // Set the memory init and finalize heights. + let memory_init_heights = + vec![Some(10), Some(16), Some(18), Some(19), Some(20), Some(21), Some(22)]; + let memory_finalize_heights = + vec![Some(10), Some(16), Some(18), Some(19), Some(20), Some(21), Some(22)]; + let memory_allowed_log_heights = HashMap::from([ + ( + RiscvAir::MemoryInit(MemoryChip::new(MemoryChipType::Initialize)), + memory_init_heights, + ), + ( + RiscvAir::MemoryFinal(MemoryChip::new(MemoryChipType::Finalize)), + memory_finalize_heights, + ), + ]); + + let mut precompile_allowed_log_heights: Vec> = vec![]; + let precompile_heights = (1..22).map(Some).collect::>(); + for air in RiscvAir::::get_all_precompile_airs() { + let allowed_log_heights = HashMap::from([(air, precompile_heights.clone())]); + precompile_allowed_log_heights.push(allowed_log_heights); + } + + Self { + included_shapes, + allowed_preprocessed_log_heights, + short_core_allowed_log_heights: short_allowed_log_heights, + medium_core_allowed_log_heights: medium_allowed_log_heights, + long_core_allowed_log_heights: long_allowed_log_heights, + memory_allowed_log_heights, + precompile_allowed_log_heights, + } + } +} + +#[cfg(test)] +mod tests { + use p3_baby_bear::BabyBear; + + use super::*; + + #[test] + #[ignore] + fn test_making_shapes() { + let shape_config = CoreShapeConfig::::default(); + let num_shapes = shape_config.generate_all_allowed_shapes().count(); + println!("There are {} core shapes", num_shapes); + assert!(num_shapes < 1 << 24); + } +} diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 35bb7537ba..55452e5675 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -8,7 +8,7 @@ use std::{ }; use web_time::Instant; -use crate::riscv::RiscvAir; +use crate::riscv::{CoreShapeConfig, RiscvAir}; use p3_challenger::CanObserve; use p3_field::AbstractField; use p3_maybe_rayon::prelude::*; @@ -110,7 +110,7 @@ where let machine = RiscvAir::machine(config); let prover = P::new(machine); let (pk, _) = prover.setup(&program); - prove_with_context::(&prover, &pk, program, stdin, opts, Default::default()) + prove_with_context::(&prover, &pk, program, stdin, opts, Default::default(), None) } pub fn prove_with_context>>( @@ -120,6 +120,7 @@ pub fn prove_with_context>, ) -> Result<(MachineProof, Vec, u64), SP1CoreProverError> where SC::Val: PrimeField32, @@ -289,6 +290,13 @@ where #[cfg(feature = "debug")] all_records_tx.send(records.clone()).unwrap(); + // Fix the shape of the records. + if let Some(shape_config) = shape_config { + for record in records.iter_mut() { + shape_config.fix_shape(record).unwrap(); + } + } + // Generate the traces. let traces = records .par_iter() @@ -478,6 +486,13 @@ where // Let another worker update the state. record_gen_sync.advance_turn(); + // Fix the shape of the records. + if let Some(shape_config) = shape_config { + for record in records.iter_mut() { + shape_config.fix_shape(record).unwrap(); + } + } + // Generate the traces. let traces = records .par_iter() @@ -628,6 +643,7 @@ pub fn run_test_core>>( &inputs, SP1CoreOpts::default(), SP1Context::default(), + None, ) .unwrap(); diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index 0979033186..cacfbb172c 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -45,6 +45,7 @@ num-bigint = "0.4.6" thiserror = "1.0.63" oneshot = "0.1.8" lru = "0.12.4" +eyre = "0.6.12" [[bin]] name = "build_plonk_bn254" diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 4db331d3fb..0a459eed68 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -19,6 +19,7 @@ pub mod verify; use std::{ borrow::Borrow, + collections::BTreeMap, env, num::NonZeroUsize, path::Path, @@ -30,20 +31,19 @@ use std::{ thread, }; -use itertools::Itertools; use lru::LruCache; use tracing::instrument; use p3_baby_bear::BabyBear; use p3_challenger::CanObserve; -use p3_field::{AbstractField, PrimeField}; +use p3_field::{AbstractField, PrimeField, PrimeField32}; use p3_matrix::dense::RowMajorMatrix; use sp1_core_executor::{ExecutionError, ExecutionReport, Executor, Program, SP1Context}; use sp1_core_machine::{ io::{SP1PublicValues, SP1Stdin}, reduce::SP1ReduceProof, - riscv::RiscvAir, + riscv::{CoreShapeConfig, RiscvAir}, utils::{concurrency::TurnBasedSync, SP1CoreProverError}, }; use sp1_stark::MachineProvingKey; @@ -61,13 +61,14 @@ use sp1_recursion_gnark_ffi::{groth16_bn254::Groth16Bn254Prover, plonk_bn254::Pl use sp1_stark::{ air::PublicValues, baby_bear_poseidon2::BabyBearPoseidon2, Challenge, Challenger, - MachineProver, MachineVerificationError, SP1CoreOpts, SP1ProverOpts, ShardProof, - StarkGenericConfig, StarkVerifyingKey, Val, Word, DIGEST_SIZE, + MachineProver, SP1CoreOpts, SP1ProverOpts, ShardProof, StarkGenericConfig, StarkVerifyingKey, + Val, Word, DIGEST_SIZE, }; use sp1_recursion_core_v2::{ air::RecursionPublicValues, machine::RecursionAir, runtime::ExecutionRecord, - stark::config::BabyBearPoseidon2Outer, RecursionProgram, Runtime as RecursionRuntime, + shape::RecursionShapeConfig, stark::config::BabyBearPoseidon2Outer, RecursionProgram, + Runtime as RecursionRuntime, }; use sp1_recursion_circuit_v2::{ @@ -83,7 +84,9 @@ use sp1_recursion_circuit_v2::{ }; pub use types::*; -use utils::{sp1_commited_values_digest_bn254, sp1_vkey_digest_bn254, words_to_bytes}; +use utils::{ + get_all_vk_digests, sp1_commited_values_digest_bn254, sp1_vkey_digest_bn254, words_to_bytes, +}; use components::{DefaultProverComponents, SP1ProverComponents}; @@ -105,6 +108,8 @@ const WRAP_DEGREE: usize = 17; const CORE_CACHE_SIZE: usize = 5; const COMPRESS_CACHE_SIZE: usize = 3; +const REDUCE_BATCH_SIZE: usize = 2; + pub type CompressAir = RecursionAir; pub type ShrinkAir = RecursionAir; pub type WrapAir = RecursionAir; @@ -133,9 +138,13 @@ pub struct SP1Prover { pub root: >::Digest, - pub allowed_vkeys: Vec<>::Digest>, + pub allowed_vk_map: BTreeMap<>::Digest, usize>, pub merkle_tree: MerkleTree, + + pub core_shape_config: Option>, + + pub recursion_shape_config: Option>>, } impl SP1Prover { @@ -177,9 +186,23 @@ impl SP1Prover { ) .expect("PROVER_COMPRESS_CACHE_SIZE must be a non-zero usize"); - let allowed_vkeys = vec![>::Digest::default(); 1 << 16]; + let core_shape_config = CoreShapeConfig::default(); + let recursion_shape_config = RecursionShapeConfig::default(); + + let allowed_vk_map = + get_all_vk_digests(&core_shape_config, &recursion_shape_config, REDUCE_BATCH_SIZE); - let (root, merkle_tree) = MerkleTree::commit(allowed_vkeys.clone()); + let (root, merkle_tree) = MerkleTree::commit(allowed_vk_map.keys().cloned().collect()); + + let core_shape_config = env::var("FIX_CORE_SHAPES") + .map(|v| v.eq_ignore_ascii_case("true")) + .unwrap_or(true) + .then_some(core_shape_config); + + let recursion_shape_config = env::var("FIX_RECURSION_SHAPES") + .map(|v| v.eq_ignore_ascii_case("true")) + .unwrap_or(true) + .then_some(recursion_shape_config); Self { core_prover, @@ -192,7 +215,9 @@ impl SP1Prover { compress_cache_misses: AtomicUsize::new(0), root, merkle_tree, - allowed_vkeys, + allowed_vk_map, + core_shape_config, + recursion_shape_config, } } @@ -203,13 +228,22 @@ impl SP1Prover { /// Creates a proving key and a verifying key for a given RISC-V ELF. #[instrument(name = "setup", level = "debug", skip_all)] pub fn setup(&self, elf: &[u8]) -> (SP1ProvingKey, SP1VerifyingKey) { - let program = Program::from(elf).unwrap(); + let program = self.get_program(elf).unwrap(); let (pk, vk) = self.core_prover.setup(&program); let vk = SP1VerifyingKey { vk }; let pk = SP1ProvingKey { pk: pk.to_host(), elf: elf.to_vec(), vk: vk.clone() }; (pk, vk) } + /// Get a program with an allowed preprocessed shape. + pub fn get_program(&self, elf: &[u8]) -> eyre::Result { + let mut program = Program::from(elf)?; + if let Some(core_shape_config) = &self.core_shape_config { + core_shape_config.fix_preprocessed_shape(&mut program)?; + } + Ok(program) + } + /// Generate a proof of an SP1 program with the specified inputs. #[instrument(name = "execute", level = "info", skip_all)] pub fn execute<'a>( @@ -219,7 +253,7 @@ impl SP1Prover { mut context: SP1Context<'a>, ) -> Result<(SP1PublicValues, ExecutionReport), ExecutionError> { context.subproof_verifier.replace(Arc::new(self)); - let program = Program::from(elf).unwrap(); + let program = self.get_program(elf).unwrap(); let opts = SP1CoreOpts::default(); let mut runtime = Executor::with_context(program, opts, context); runtime.write_vecs(&stdin.buffer); @@ -241,7 +275,7 @@ impl SP1Prover { mut context: SP1Context<'a>, ) -> Result { context.subproof_verifier.replace(Arc::new(self)); - let program = Program::from(&pk.elf).unwrap(); + let program = self.get_program(&pk.elf).unwrap(); let (proof, public_values_stream, cycles) = sp1_core_machine::utils::prove_with_context::< _, C::CoreProver, @@ -254,6 +288,7 @@ impl SP1Prover { stdin, opts.core_opts, context, + self.core_shape_config.as_ref(), )?; Self::check_for_high_cycles(cycles); let public_values = SP1PublicValues::from(&public_values_stream); @@ -272,6 +307,7 @@ impl SP1Prover { let mut cache = self.recursion_programs.lock().unwrap(); cache .get_or_insert(input.shape(), || { + tracing::info!("Proof shape: {:?}", input.shape()); let misses = self.recursion_cache_misses.fetch_add(1, Ordering::Relaxed); tracing::debug!("Core cache miss, misses: {}", misses); // Get the operations. @@ -285,7 +321,11 @@ impl SP1Prover { // Compile the program. let compiler_span = tracing::debug_span!("compile recursion program").entered(); let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); + let mut program = compiler.compile(operations); + if let Some(recursion_shape_config) = &self.recursion_shape_config { + recursion_shape_config.fix_shape(&mut program); + } + let program = Arc::new(program); compiler_span.exit(); program }) @@ -316,7 +356,11 @@ impl SP1Prover { // Compile the program. let compiler_span = tracing::debug_span!("compile compress program").entered(); let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); + let mut program = compiler.compile(operations); + if let Some(recursion_shape_config) = &self.recursion_shape_config { + recursion_shape_config.fix_shape(&mut program); + } + let program = Arc::new(program); compiler_span.exit(); program }) @@ -519,9 +563,11 @@ impl SP1Prover { deferred_proofs: Vec>, opts: SP1ProverOpts, ) -> Result, SP1RecursionProverError> { - // Set the batch size for the reduction tree. - let batch_size = 2; + // The batch size for reducing two layers of recursion. + let batch_size = REDUCE_BATCH_SIZE; + // The batch size for reducing the first layer of recursion. let first_layer_batch_size = 1; + let shard_proofs = &proof.proof.0; // Get the leaf challenger. @@ -943,14 +989,7 @@ impl SP1Prover { let elapsed = time.elapsed(); tracing::debug!("Wrap proving time: {:?}", elapsed); let mut wrap_challenger = self.wrap_prover.config().challenger(); - let result = self.wrap_prover.machine().verify(&wrap_vk, &wrap_proof, &mut wrap_challenger); - match result { - Ok(_) => tracing::info!("Proof verified successfully"), - Err(MachineVerificationError::NonZeroCumulativeSum) => { - tracing::info!("Proof verification failed: NonZeroCumulativeSum") - } - e => panic!("Proof verification failed: {:?}", e), - } + self.wrap_prover.machine().verify(&wrap_vk, &wrap_proof, &mut wrap_challenger).unwrap(); tracing::info!("Wrapping successful"); Ok(SP1ReduceProof { vk: wrap_vk, proof: wrap_proof.shard_proofs.pop().unwrap() }) @@ -1044,10 +1083,20 @@ impl SP1Prover { pub fn make_merkle_proofs( &self, input: SP1CompressWitnessValues, - ) -> SP1CompressWithVKeyWitnessValues -where { - // TODO: make an index based on the key itself. - let vk_indices = input.vks_and_proofs.iter().map(|(_, _)| 0).collect_vec(); + ) -> SP1CompressWithVKeyWitnessValues { + // let (vk_indices, vk_digest_values) = + // input.vks_and_proofs.iter().map(|(vk, _)| (0, vk.hash_babybear())).collect::>(); + + let num_vks = self.allowed_vk_map.len(); + let (vk_indices, vk_digest_values): (Vec<_>, Vec<_>) = input + .vks_and_proofs + .iter() + .map(|(vk, _)| { + let vk_digest = vk.hash_babybear(); + let index = (vk_digest[0].as_canonical_u32() as usize) % num_vks; + (index, [BabyBear::from_canonical_usize(index); 8]) + }) + .unzip(); let proofs = vk_indices .iter() @@ -1057,7 +1106,11 @@ where { }) .collect(); - let merkle_val = SP1MerkleProofWitnessValues { root: self.root, vk_merkle_proofs: proofs }; + let merkle_val = SP1MerkleProofWitnessValues { + root: self.root, + values: vk_digest_values, + vk_merkle_proofs: proofs, + }; SP1CompressWithVKeyWitnessValues { compress_val: input, merkle_val } } diff --git a/crates/prover/src/utils.rs b/crates/prover/src/utils.rs index 8bf82c3b3a..4ac85e0428 100644 --- a/crates/prover/src/utils.rs +++ b/crates/prover/src/utils.rs @@ -1,5 +1,6 @@ use std::{ borrow::Borrow, + collections::BTreeMap, fs::{self, File}, io::Read, }; @@ -8,11 +9,13 @@ use p3_baby_bear::BabyBear; use p3_bn254_fr::Bn254Fr; use p3_field::{AbstractField, PrimeField32}; use sp1_core_executor::{Executor, Program}; -use sp1_core_machine::{io::SP1Stdin, reduce::SP1ReduceProof}; -use sp1_recursion_core_v2::{air::RecursionPublicValues, stark::config::BabyBearPoseidon2Outer}; +use sp1_core_machine::{io::SP1Stdin, reduce::SP1ReduceProof, riscv::CoreShapeConfig}; +use sp1_recursion_core_v2::{ + air::RecursionPublicValues, shape::RecursionShapeConfig, stark::config::BabyBearPoseidon2Outer, +}; use sp1_stark::{SP1CoreOpts, Word}; -use crate::SP1CoreProofData; +use crate::{CompressAir, SP1CoreProofData}; /// Get the SP1 vkey BabyBear Poseidon2 digest this reduce proof is representing. pub fn sp1_vkey_digest_babybear(proof: &SP1ReduceProof) -> [BabyBear; 8] { @@ -35,6 +38,31 @@ pub fn sp1_commited_values_digest_bn254(proof: &SP1ReduceProof, + recursion_shape_config: &RecursionShapeConfig>, + reduce_batch_size: usize, +) -> BTreeMap<[BabyBear; 8], usize> { + let mut vk_map = core_shape_config + .generate_all_allowed_shapes() + .enumerate() + .map(|(i, _)| ([BabyBear::from_canonical_usize(i); 8], i)) + .collect::>(); + + let num_first_layer_vks = vk_map.len(); + + vk_map.extend( + recursion_shape_config.get_all_shape_combinations(reduce_batch_size).enumerate().map( + |(i, _)| { + let index = num_first_layer_vks + i; + ([BabyBear::from_canonical_usize(index); 8], index) + }, + ), + ); + + vk_map +} + impl SP1CoreProofData { pub fn save(&self, path: &str) -> Result<(), std::io::Error> { let data = serde_json::to_string(self).unwrap(); @@ -102,3 +130,19 @@ pub fn words_to_bytes_be(words: &[u32; 8]) -> [u8; 32] { } bytes } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_get_all_vk_digests() { + let core_shape_config = CoreShapeConfig::default(); + let recursion_shape_config = RecursionShapeConfig::default(); + let reduce_batch_size = 2; + let vk_digests = + get_all_vk_digests(&core_shape_config, &recursion_shape_config, reduce_batch_size); + println!("Number of vk digests: {}", vk_digests.len()); + assert!(vk_digests.len() < 1 << 24); + } +} diff --git a/crates/recursion/circuit-v2/src/challenger.rs b/crates/recursion/circuit-v2/src/challenger.rs index fac1cb1888..7bf491fcd2 100644 --- a/crates/recursion/circuit-v2/src/challenger.rs +++ b/crates/recursion/circuit-v2/src/challenger.rs @@ -21,7 +21,7 @@ pub trait CanCopyChallenger { fn copy(&self, builder: &mut Builder) -> Self; } -#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SpongeChallengerShape { pub input_buffer_len: usize, pub output_buffer_len: usize, diff --git a/crates/recursion/circuit-v2/src/hash.rs b/crates/recursion/circuit-v2/src/hash.rs index 9582096f81..4fde11b78f 100644 --- a/crates/recursion/circuit-v2/src/hash.rs +++ b/crates/recursion/circuit-v2/src/hash.rs @@ -22,7 +22,7 @@ use crate::{ }; pub trait FieldHasher { - type Digest: Clone + Copy + Default + PartialEq + Eq + Copy + Debug; + type Digest: Copy + Default + Eq + Ord + Copy + Debug; fn constant_compress(input: [Self::Digest; 2]) -> Self::Digest; } diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 34a30d4cdd..7cab9b4883 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -35,7 +35,7 @@ use sp1_recursion_core_v2::{ }; use crate::{ - challenger::{CanObserveVariable, DuplexChallengerVariable, SpongeChallengerShape}, + challenger::{CanObserveVariable, DuplexChallengerVariable}, stark::{ShardProofVariable, StarkVerifier}, BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, }; @@ -61,10 +61,9 @@ pub struct SP1RecursionWitnessValues { pub is_first_shard: bool, } -#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SP1RecursionShape { pub proof_shapes: Vec, - pub challenger_shapes: Vec, pub is_complete: bool, } @@ -566,10 +565,7 @@ where impl SP1RecursionWitnessValues { pub fn shape(&self) -> SP1RecursionShape { let proof_shapes = self.shard_proofs.iter().map(|proof| proof.shape()).collect(); - let challenger_shapes = vec![ - SC::challenger_shape(&self.leaf_challenger), - SC::challenger_shape(&self.initial_reconstruct_challenger), - ]; - SP1RecursionShape { proof_shapes, challenger_shapes, is_complete: self.is_complete } + + SP1RecursionShape { proof_shapes, is_complete: self.is_complete } } } diff --git a/crates/recursion/circuit-v2/src/machine/vkey_proof.rs b/crates/recursion/circuit-v2/src/machine/vkey_proof.rs index 6b99e54833..489a26351c 100644 --- a/crates/recursion/circuit-v2/src/machine/vkey_proof.rs +++ b/crates/recursion/circuit-v2/src/machine/vkey_proof.rs @@ -4,7 +4,6 @@ use itertools::Itertools; use p3_air::Air; use p3_baby_bear::BabyBear; use p3_commit::Mmcs; -use p3_field::AbstractField; use p3_matrix::dense::RowMajorMatrix; use sp1_recursion_compiler::ir::{Builder, Felt}; use sp1_recursion_core_v2::DIGEST_SIZE; @@ -39,12 +38,16 @@ pub struct SP1MerkleProofWitnessVariable< > { /// The shard proofs to verify. pub vk_merkle_proofs: Vec>, + /// Hinted values to enable dummy digests. + pub values: Vec, + /// The root of the merkle tree. pub root: SC::DigestVariable, } /// An input layout for the reduce verifier. pub struct SP1MerkleProofWitnessValues> { pub vk_merkle_proofs: Vec>, + pub values: Vec, pub root: SC::Digest, } @@ -60,8 +63,13 @@ where digests: Vec, input: SP1MerkleProofWitnessVariable, ) { - for (proof, value) in input.vk_merkle_proofs.into_iter().zip(digests) { - verify(builder, proof, value, input.root); + let SP1MerkleProofWitnessVariable { vk_merkle_proofs, values, root } = input; + for ((proof, value), _expected_value) in + vk_merkle_proofs.into_iter().zip(values).zip(digests) + { + verify(builder, proof, value, root); + // TODO: comment back in. + // SC::assert_digest_eq(builder, expected_value, value); } } } @@ -103,15 +111,8 @@ where machine: &StarkMachine, input: SP1CompressWithVKeyWitnessVariable, ) { - // These are dummy values. - let values = input - .compress_var - .vks_and_proofs - .iter() - .map(|(_, _)| [builder.constant(BabyBear::zero()); DIGEST_SIZE]) - .collect_vec(); - // TODO: comment back in. - // input.compress_var.vks_and_proofs.iter().map(|(vk, _)| vk.hash(builder)).collect_vec(); + let values = + input.compress_var.vks_and_proofs.iter().map(|(vk, _)| vk.hash(builder)).collect_vec(); SP1MerkleProofVerifier::verify(builder, values, input.merkle_var); SP1CompressVerifier::verify(builder, machine, input.compress_var); } diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index 1e5b0773db..ebf7e613d3 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -248,12 +248,14 @@ where fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { SP1MerkleProofWitnessVariable { vk_merkle_proofs: self.vk_merkle_proofs.read(builder), + values: self.values.read(builder), root: self.root.read(builder), } } fn write(&self, witness: &mut impl WitnessWriter) { self.vk_merkle_proofs.write(witness); + self.values.write(witness); self.root.write(witness); } } diff --git a/crates/recursion/core-v2/src/chips/mem/constant.rs b/crates/recursion/core-v2/src/chips/mem/constant.rs index 4cb72618b8..b234a5f9e0 100644 --- a/crates/recursion/core-v2/src/chips/mem/constant.rs +++ b/crates/recursion/core-v2/src/chips/mem/constant.rs @@ -12,7 +12,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; use super::MemoryAccessCols; -pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; +pub const NUM_CONST_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { @@ -34,7 +34,7 @@ pub const NUM_MEM_PREPROCESSED_INIT_COLS: usize = #[derive(AlignedBorrow, Debug, Clone, Copy)] #[repr(C)] pub struct MemoryPreprocessedCols { - values_and_accesses: [(Block, MemoryAccessCols); NUM_MEM_ENTRIES_PER_ROW], + values_and_accesses: [(Block, MemoryAccessCols); NUM_CONST_MEM_ENTRIES_PER_ROW], } impl BaseAir for MemoryChip { fn width(&self) -> usize { @@ -70,7 +70,7 @@ impl MachineAir for MemoryChip { } _ => None, }) - .chunks(NUM_MEM_ENTRIES_PER_ROW) + .chunks(NUM_CONST_MEM_ENTRIES_PER_ROW) .into_iter() .map(|row_vs_as| { let mut row = [F::zero(); NUM_MEM_PREPROCESSED_INIT_COLS]; @@ -107,7 +107,7 @@ impl MachineAir for MemoryChip { let num_rows = input .mem_const_count .checked_sub(1) - .map(|x| x / NUM_MEM_ENTRIES_PER_ROW + 1) + .map(|x| x / NUM_CONST_MEM_ENTRIES_PER_ROW + 1) .unwrap_or_default(); let mut rows = std::iter::repeat([F::zero(); NUM_MEM_INIT_COLS]).take(num_rows).collect::>(); diff --git a/crates/recursion/core-v2/src/chips/mem/variable.rs b/crates/recursion/core-v2/src/chips/mem/variable.rs index 6f62f0d38e..a5b1fb3156 100644 --- a/crates/recursion/core-v2/src/chips/mem/variable.rs +++ b/crates/recursion/core-v2/src/chips/mem/variable.rs @@ -13,7 +13,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; use super::{MemoryAccessCols, NUM_MEM_ACCESS_COLS}; -pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; +pub const NUM_VAR_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { @@ -25,7 +25,7 @@ pub const NUM_MEM_INIT_COLS: usize = core::mem::size_of::>(); #[derive(AlignedBorrow, Debug, Clone, Copy)] #[repr(C)] pub struct MemoryCols { - values: [Block; NUM_MEM_ENTRIES_PER_ROW], + values: [Block; NUM_VAR_MEM_ENTRIES_PER_ROW], } pub const NUM_MEM_PREPROCESSED_INIT_COLS: usize = @@ -34,7 +34,7 @@ pub const NUM_MEM_PREPROCESSED_INIT_COLS: usize = #[derive(AlignedBorrow, Debug, Clone, Copy)] #[repr(C)] pub struct MemoryPreprocessedCols { - accesses: [MemoryAccessCols; NUM_MEM_ENTRIES_PER_ROW], + accesses: [MemoryAccessCols; NUM_VAR_MEM_ENTRIES_PER_ROW], } impl BaseAir for MemoryChip { @@ -74,7 +74,7 @@ impl MachineAir for MemoryChip { }) .collect::>(); - let nb_rows = accesses.len().div_ceil(NUM_MEM_ENTRIES_PER_ROW); + let nb_rows = accesses.len().div_ceil(NUM_VAR_MEM_ENTRIES_PER_ROW); let padded_nb_rows = match program.fixed_log2_rows(self) { Some(log2_rows) => 1 << log2_rows, None => next_power_of_two(nb_rows, None), @@ -99,7 +99,7 @@ impl MachineAir for MemoryChip { // Generate the trace rows & corresponding records for each chunk of events in parallel. let mut rows = input .mem_var_events - .chunks(NUM_MEM_ENTRIES_PER_ROW) + .chunks(NUM_VAR_MEM_ENTRIES_PER_ROW) .map(|row_events| { let mut row = [F::zero(); NUM_MEM_INIT_COLS]; let cols: &mut MemoryCols<_> = row.as_mut_slice().borrow_mut(); diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index 450d648c54..31784ebcee 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -1,3 +1,5 @@ +use std::ops::{Add, AddAssign}; + use hashbrown::HashMap; use p3_field::{extension::BinomiallyExtendable, PrimeField32}; use sp1_recursion_core::runtime::D; @@ -5,21 +7,24 @@ use sp1_stark::{air::MachineAir, Chip, StarkGenericConfig, StarkMachine, PROOF_M use crate::{ chips::{ - alu_base::BaseAluChip, - alu_ext::ExtAluChip, + alu_base::{BaseAluChip, NUM_BASE_ALU_ENTRIES_PER_ROW}, + alu_ext::{ExtAluChip, NUM_EXT_ALU_ENTRIES_PER_ROW}, dummy::DummyChip, exp_reverse_bits::ExpReverseBitsLenChip, fri_fold::FriFoldChip, - mem::{MemoryConstChip, MemoryVarChip}, + mem::{ + constant::NUM_CONST_MEM_ENTRIES_PER_ROW, variable::NUM_VAR_MEM_ENTRIES_PER_ROW, + MemoryConstChip, MemoryVarChip, + }, poseidon2_skinny::Poseidon2SkinnyChip, poseidon2_wide::Poseidon2WideChip, public_values::{PublicValuesChip, PUB_VALUES_LOG_HEIGHT}, }, + instruction::{HintBitsInstr, HintExt2FeltsInstr, HintInstr}, shape::RecursionShape, + ExpReverseBitsInstr, Instruction, RecursionProgram, }; -const SHRINK_ID: usize = usize::MAX; - #[derive(sp1_derive::MachineAir)] #[sp1_core_path = "sp1_core_machine"] #[execution_record_path = "crate::ExecutionRecord"] @@ -43,6 +48,17 @@ pub enum RecursionAir< DummyWide(DummyChip), } +#[derive(Debug, Clone, Copy, Default)] +pub struct RecursionAirEventCount { + mem_const_events: usize, + mem_var_events: usize, + base_alu_events: usize, + ext_alu_events: usize, + poseidon2_wide_events: usize, + fri_fold_events: usize, + exp_reverse_bits_len_events: usize, +} + impl, const DEGREE: usize, const COL_PADDING: usize> RecursionAir { @@ -140,7 +156,78 @@ impl, const DEGREE: usize, const COL_P ] .map(|(chip, log_height)| (chip.name(), log_height)), ); - RecursionShape { id: SHRINK_ID, shape } + RecursionShape { inner: shape } + } + + pub fn heights(program: &RecursionProgram) -> Vec<(String, usize)> { + let heights = program + .instructions + .iter() + .fold(RecursionAirEventCount::default(), |heights, instruction| heights + instruction); + + [ + ( + Self::MemoryConst(MemoryConstChip::default()), + heights.mem_const_events.div_ceil(NUM_CONST_MEM_ENTRIES_PER_ROW), + ), + ( + Self::MemoryVar(MemoryVarChip::default()), + heights.mem_var_events.div_ceil(NUM_VAR_MEM_ENTRIES_PER_ROW), + ), + ( + Self::BaseAlu(BaseAluChip), + heights.base_alu_events.div_ceil(NUM_BASE_ALU_ENTRIES_PER_ROW), + ), + ( + Self::ExtAlu(ExtAluChip), + heights.ext_alu_events.div_ceil(NUM_EXT_ALU_ENTRIES_PER_ROW), + ), + (Self::Poseidon2Wide(Poseidon2WideChip::), heights.poseidon2_wide_events), + ( + Self::ExpReverseBitsLen(ExpReverseBitsLenChip::), + heights.exp_reverse_bits_len_events, + ), + (Self::PublicValues(PublicValuesChip), PUB_VALUES_LOG_HEIGHT), + ] + .map(|(chip, log_height)| (chip.name(), log_height)) + .to_vec() + } +} + +impl AddAssign<&Instruction> for RecursionAirEventCount { + #[inline] + fn add_assign(&mut self, rhs: &Instruction) { + match rhs { + Instruction::BaseAlu(_) => self.base_alu_events += 1, + Instruction::ExtAlu(_) => self.ext_alu_events += 1, + Instruction::Mem(_) => self.mem_const_events += 1, + Instruction::Poseidon2(_) => self.poseidon2_wide_events += 1, + Instruction::ExpReverseBitsLen(ExpReverseBitsInstr { addrs, .. }) => { + self.exp_reverse_bits_len_events += addrs.exp.len() + } + Instruction::Hint(HintInstr { output_addrs_mults }) + | Instruction::HintBits(HintBitsInstr { + output_addrs_mults, + input_addr: _, // No receive interaction for the hint operation + }) => self.mem_var_events += output_addrs_mults.len(), + Instruction::HintExt2Felts(HintExt2FeltsInstr { + output_addrs_mults, + input_addr: _, // No receive interaction for the hint operation + }) => self.mem_var_events += output_addrs_mults.len(), + Instruction::FriFold(_) => self.fri_fold_events += 1, + Instruction::CommitPublicValues(_) => {} + Instruction::Print(_) => {} + } + } +} + +impl Add<&Instruction> for RecursionAirEventCount { + type Output = Self; + + #[inline] + fn add(mut self, rhs: &Instruction) -> Self::Output { + self += rhs; + self } } diff --git a/crates/recursion/core-v2/src/runtime/program.rs b/crates/recursion/core-v2/src/runtime/program.rs index 9658f5e90e..38fb29ca8a 100644 --- a/crates/recursion/core-v2/src/runtime/program.rs +++ b/crates/recursion/core-v2/src/runtime/program.rs @@ -28,7 +28,7 @@ impl RecursionProgram { .as_ref() .map(|shape| { shape - .shape + .inner .get(&air.name()) .unwrap_or_else(|| panic!("Chip {} not found in specified shape", air.name())) }) diff --git a/crates/recursion/core-v2/src/shape.rs b/crates/recursion/core-v2/src/shape.rs index 905e8bbeff..4baac1498a 100644 --- a/crates/recursion/core-v2/src/shape.rs +++ b/crates/recursion/core-v2/src/shape.rs @@ -1,31 +1,216 @@ +use std::marker::PhantomData; + use hashbrown::HashMap; +use itertools::Itertools; +use p3_field::{extension::BinomiallyExtendable, PrimeField32}; use serde::{Deserialize, Serialize}; +use sp1_stark::{air::MachineAir, ProofShape}; + +use crate::{ + chips::{ + alu_base::BaseAluChip, + alu_ext::ExtAluChip, + exp_reverse_bits::ExpReverseBitsLenChip, + mem::{MemoryConstChip, MemoryVarChip}, + poseidon2_wide::Poseidon2WideChip, + public_values::{PublicValuesChip, PUB_VALUES_LOG_HEIGHT}, + }, + machine::RecursionAir, + RecursionProgram, D, +}; #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct RecursionShape { - pub id: usize, - pub shape: HashMap, + pub(crate) inner: HashMap, +} + +pub struct RecursionShapeConfig { + allowed_shapes: Vec>, + _marker: PhantomData<(F, A)>, +} + +impl, const DEGREE: usize, const COL_PADDING: usize> + RecursionShapeConfig> +{ + pub fn fix_shape(&self, program: &mut RecursionProgram) { + let heights = RecursionAir::::heights(program); + // Get the allowed shape with a minimal hamming distance from the current shape. + let mut min_distance = usize::MAX; + let mut closest_shape = None; + for shape in self.allowed_shapes.iter() { + let mut distance = 0; + let mut is_valid = true; + for (name, height) in heights.iter() { + let next_power_of_two = height.next_power_of_two(); + let allowed_log_height = shape.get(name).unwrap(); + let allowed_height = 1 << allowed_log_height; + if next_power_of_two != allowed_height { + distance += 1; + } + if next_power_of_two > allowed_height { + is_valid = false; + } + } + if is_valid && distance < min_distance { + min_distance = distance; + closest_shape = Some(shape.clone()); + } + } + + if let Some(shape) = closest_shape { + tracing::info!("Found shape with minimal hamming distance: {}", min_distance); + let shape = RecursionShape { inner: shape }; + program.shape = Some(shape); + } else { + panic!("no shape found for heights: {:?}", heights); + } + } + + pub fn get_all_shape_combinations( + &self, + batch_size: usize, + ) -> impl Iterator> + '_ { + (0..batch_size) + .map(|_| self.allowed_shapes.iter().map(ProofShape::from_map)) + .multi_cartesian_product() + } } -// let chips = [ -// RecursionAir::MemoryConst(MemoryConstChip { -// fixed_log2_rows: Some(16), -// _data: PhantomData, -// }), -// RecursionAir::MemoryVar(MemoryVarChip { -// fixed_log2_rows: Some(18), -// _data: PhantomData, -// }), -// RecursionAir::BaseAlu(BaseAluChip { fixed_log2_rows: Some(20) }), -// RecursionAir::ExtAlu(ExtAluChip { fixed_log2_rows: Some(22) }), -// RecursionAir::Poseidon2Wide(Poseidon2WideChip:: { fixed_log2_rows: Some(16) }), -// RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { -// fixed_log2_rows: Some(16), -// }), -// RecursionAir::PublicValues(PublicValuesChip::default()), -// ] -// .map(Chip::new) -// .into_iter() -// .collect::>(); -// StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) +impl, const DEGREE: usize, const COL_PADDING: usize> + Default for RecursionShapeConfig> +{ + fn default() -> Self { + // Get the names of all the recursion airs to make the shape specification more readable. + let mem_const = + RecursionAir::::MemoryConst(MemoryConstChip::default()).name(); + let mem_var = + RecursionAir::::MemoryVar(MemoryVarChip::default()).name(); + let base_alu = RecursionAir::::BaseAlu(BaseAluChip).name(); + let ext_alu = RecursionAir::::ExtAlu(ExtAluChip).name(); + let poseidon2_wide = + RecursionAir::::Poseidon2Wide(Poseidon2WideChip::) + .name(); + let exp_reverse_bits_len = RecursionAir::::ExpReverseBitsLen( + ExpReverseBitsLenChip::, + ) + .name(); + let public_values = + RecursionAir::::PublicValues(PublicValuesChip).name(); + + // Specify allowed shapes. + let allowed_shapes = [ + [ + (base_alu.clone(), 20), + (mem_var.clone(), 18), + (ext_alu.clone(), 18), + (exp_reverse_bits_len.clone(), 17), + (mem_const.clone(), 17), + (poseidon2_wide.clone(), 16), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 20), + (mem_var.clone(), 18), + (ext_alu.clone(), 18), + (exp_reverse_bits_len.clone(), 17), + (mem_const.clone(), 16), + (poseidon2_wide.clone(), 16), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (ext_alu.clone(), 20), + (base_alu.clone(), 19), + (mem_var.clone(), 19), + (poseidon2_wide.clone(), 17), + (mem_const.clone(), 16), + (exp_reverse_bits_len.clone(), 16), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 19), + (mem_var.clone(), 18), + (ext_alu.clone(), 18), + (exp_reverse_bits_len.clone(), 17), + (mem_const.clone(), 16), + (poseidon2_wide.clone(), 16), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 19), + (mem_var.clone(), 18), + (ext_alu.clone(), 18), + (exp_reverse_bits_len.clone(), 16), + (mem_const.clone(), 16), + (poseidon2_wide.clone(), 16), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 20), + (mem_var.clone(), 19), + (ext_alu.clone(), 19), + (exp_reverse_bits_len.clone(), 17), + (mem_const.clone(), 17), + (poseidon2_wide.clone(), 17), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 21), + (mem_var.clone(), 19), + (ext_alu.clone(), 19), + (exp_reverse_bits_len.clone(), 18), + (mem_const.clone(), 18), + (poseidon2_wide.clone(), 17), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 21), + (mem_var.clone(), 19), + (ext_alu.clone(), 19), + (exp_reverse_bits_len.clone(), 18), + (mem_const.clone(), 17), + (poseidon2_wide.clone(), 17), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (ext_alu.clone(), 21), + (base_alu.clone(), 20), + (mem_var.clone(), 20), + (poseidon2_wide.clone(), 18), + (mem_const.clone(), 17), + (exp_reverse_bits_len.clone(), 17), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 20), + (mem_var.clone(), 19), + (ext_alu.clone(), 19), + (exp_reverse_bits_len.clone(), 18), + (mem_const.clone(), 17), + (poseidon2_wide.clone(), 17), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 20), + (mem_var.clone(), 19), + (ext_alu.clone(), 19), + (exp_reverse_bits_len.clone(), 17), + (mem_const.clone(), 17), + (poseidon2_wide.clone(), 17), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + [ + (base_alu.clone(), 21), + (mem_var.clone(), 20), + (ext_alu.clone(), 20), + (exp_reverse_bits_len.clone(), 18), + (mem_const.clone(), 18), + (poseidon2_wide.clone(), 18), + (public_values.clone(), PUB_VALUES_LOG_HEIGHT), + ], + ] + .map(HashMap::from) + .to_vec(); + Self { allowed_shapes, _marker: PhantomData } + } +} diff --git a/crates/stark/src/chip.rs b/crates/stark/src/chip.rs index 5d58986c4a..8797ed3d58 100644 --- a/crates/stark/src/chip.rs +++ b/crates/stark/src/chip.rs @@ -43,6 +43,11 @@ impl Chip { pub const fn log_quotient_degree(&self) -> usize { self.log_quotient_degree } + + /// Consumes the chip and returns the underlying air. + pub fn into_inner(self) -> A { + self.air + } } impl> Chip { @@ -112,6 +117,7 @@ where ) -> RowMajorMatrix where F: PrimeField, + A: MachineAir, { let batch_size = self.logup_batch_size(); generate_permutation_trace( diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index 36ad306002..c4dc7656e6 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -213,7 +213,7 @@ where mut named_traces: Vec<(String, RowMajorMatrix>)>, ) -> ShardMainData { // Order the chips and traces by trace size (biggest first), and get the ordering map. - named_traces.sort_by_key(|(_, trace)| Reverse(trace.height())); + named_traces.sort_by_key(|(name, trace)| Reverse((trace.height(), name.clone()))); let pcs = self.config().pcs(); diff --git a/crates/stark/src/types.rs b/crates/stark/src/types.rs index 04b1418879..9652ea9e84 100644 --- a/crates/stark/src/types.rs +++ b/crates/stark/src/types.rs @@ -1,6 +1,6 @@ #![allow(missing_docs)] -use std::fmt::Debug; +use std::{cmp::Reverse, collections::BTreeSet, fmt::Debug}; use hashbrown::HashMap; use itertools::Itertools; @@ -80,7 +80,7 @@ pub struct ShardProof { #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, PartialOrd, Ord, Eq, Hash)] pub struct ProofShape { - pub chip_information: Vec<(String, usize, usize)>, + pub chip_information: Vec<(String, usize)>, } impl Debug for ShardProof { @@ -167,7 +167,34 @@ impl ShardProof { .iter() .sorted_by_key(|(_, idx)| *idx) .zip(self.opened_values.chips.iter()) - .map(|((name, idx), values)| (name.to_owned(), *idx, values.log_degree)) + .map(|((name, _), values)| (name.to_owned(), values.log_degree)) + .collect(), + } + } +} + +impl ProofShape { + #[must_use] + pub fn from_map(map: &HashMap) -> Self { + Self { + chip_information: map + .iter() + .map(|(name, log_degree)| (name.clone(), *log_degree)) + .collect(), + } + } +} + +impl FromIterator<(String, usize)> for ProofShape { + fn from_iter>(iter: T) -> Self { + let set = iter + .into_iter() + .map(|(name, log_degree)| Reverse((log_degree, name))) + .collect::>(); + Self { + chip_information: set + .into_iter() + .map(|Reverse((log_degree, name))| (name, log_degree)) .collect(), } } From f595b719115d0cfad548a10eb09b0f0c94879c0b Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 13 Sep 2024 17:28:43 -0700 Subject: [PATCH 179/268] lowercase --- crates/prover/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 0a459eed68..21b06428a6 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -340,7 +340,7 @@ impl SP1Prover { cache .get_or_insert(input.shape(), || { let misses = self.compress_cache_misses.fetch_add(1, Ordering::Relaxed); - tracing::debug!("Compress cache miss, misses: {}", misses); + tracing::debug!("compress cache miss, misses: {}", misses); // Get the operations. let builder_span = tracing::debug_span!("build compress program").entered(); let mut builder = Builder::::default(); @@ -424,7 +424,7 @@ impl SP1Prover { // Get the operations. let operations_span = - tracing::debug_span!("Get operations for the deferred program").entered(); + tracing::debug_span!("get operations for the deferred program").entered(); let mut builder = Builder::::default(); let input_read_span = tracing::debug_span!("Read input values").entered(); let input = input.read(&mut builder); @@ -436,7 +436,7 @@ impl SP1Prover { operations_span.exit(); // Compile the program. - tracing::debug_span!("Compile compress program").in_scope(|| { + tracing::debug_span!("compile compress program").in_scope(|| { let mut compiler = AsmCompiler::::default(); Arc::new(compiler.compile(operations)) }) From db332bd60f9c81e337fbfde88ce801562169e47c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Mon, 16 Sep 2024 14:01:43 -0700 Subject: [PATCH 180/268] cleanup log --- crates/recursion/core-v2/src/shape.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/recursion/core-v2/src/shape.rs b/crates/recursion/core-v2/src/shape.rs index 4baac1498a..7d0c4617a5 100644 --- a/crates/recursion/core-v2/src/shape.rs +++ b/crates/recursion/core-v2/src/shape.rs @@ -59,7 +59,6 @@ impl, const DEGREE: usize, const COL_P } if let Some(shape) = closest_shape { - tracing::info!("Found shape with minimal hamming distance: {}", min_distance); let shape = RecursionShape { inner: shape }; program.shape = Some(shape); } else { From 1e3ef0e9d21d235ad6d8b2b1d357e8f153a8b022 Mon Sep 17 00:00:00 2001 From: Kevin Jue Date: Tue, 17 Sep 2024 16:04:31 -0700 Subject: [PATCH 181/268] perf: local bus (#1293) --- Cargo.lock | 76 +--- Cargo.toml | 8 +- crates/core/executor/Cargo.toml | 2 +- crates/core/executor/src/dependencies.rs | 290 +++++++++++++ crates/core/executor/src/events/alu.rs | 7 +- crates/core/executor/src/events/byte.rs | 35 +- crates/core/executor/src/events/cpu.rs | 4 +- crates/core/executor/src/events/memory.rs | 51 +++ crates/core/executor/src/events/mod.rs | 2 + .../executor/src/events/precompiles/ec.rs | 26 +- .../src/events/precompiles/edwards.rs | 8 +- .../src/events/precompiles/fptower.rs | 23 +- .../events/precompiles/keccak256_permute.rs | 8 +- .../executor/src/events/precompiles/mod.rs | 184 ++++++++ .../src/events/precompiles/sha256_compress.rs | 8 +- .../src/events/precompiles/sha256_extend.rs | 12 +- .../src/events/precompiles/uint256.rs | 8 +- crates/core/executor/src/events/syscall.rs | 23 + crates/core/executor/src/executor.rs | 151 +++++-- crates/core/executor/src/lib.rs | 2 + crates/core/executor/src/record.rs | 271 ++++-------- crates/core/executor/src/state.rs | 5 - crates/core/executor/src/syscalls/commit.rs | 3 +- crates/core/executor/src/syscalls/context.rs | 40 +- crates/core/executor/src/syscalls/deferred.rs | 10 +- crates/core/executor/src/syscalls/halt.rs | 10 +- crates/core/executor/src/syscalls/hint.rs | 12 +- crates/core/executor/src/syscalls/mod.rs | 8 +- .../src/syscalls/precompiles/edwards/add.rs | 14 +- .../precompiles/edwards/decompress.rs | 20 +- .../src/syscalls/precompiles/fptower/fp.rs | 76 ++-- .../precompiles/fptower/fp2_addsub.rs | 75 ++-- .../syscalls/precompiles/fptower/fp2_mul.rs | 55 ++- .../syscalls/precompiles/keccak256/permute.rs | 18 +- .../syscalls/precompiles/sha256/compress.rs | 19 +- .../src/syscalls/precompiles/sha256/extend.rs | 18 +- .../src/syscalls/precompiles/uint256.rs | 18 +- .../syscalls/precompiles/weierstrass/add.rs | 25 +- .../precompiles/weierstrass/decompress.rs | 20 +- .../precompiles/weierstrass/double.rs | 27 +- .../executor/src/syscalls/unconstrained.rs | 6 +- crates/core/executor/src/syscalls/verify.rs | 10 +- crates/core/executor/src/syscalls/write.rs | 10 +- crates/core/executor/src/utils.rs | 30 ++ crates/core/machine/src/air/memory.rs | 37 +- crates/core/machine/src/air/program.rs | 12 +- crates/core/machine/src/air/word.rs | 10 - crates/core/machine/src/alu/add_sub/mod.rs | 14 +- crates/core/machine/src/alu/bitwise/mod.rs | 16 +- crates/core/machine/src/alu/divrem/mod.rs | 174 +------- crates/core/machine/src/alu/divrem/utils.rs | 24 -- crates/core/machine/src/alu/lt/mod.rs | 44 +- crates/core/machine/src/alu/mul/mod.rs | 37 +- crates/core/machine/src/alu/sll/mod.rs | 27 +- crates/core/machine/src/alu/sr/mod.rs | 33 +- crates/core/machine/src/bytes/air.rs | 98 ++--- crates/core/machine/src/bytes/columns.rs | 15 +- crates/core/machine/src/bytes/mod.rs | 97 ++--- crates/core/machine/src/bytes/trace.rs | 24 +- crates/core/machine/src/cpu/air/branch.rs | 3 - crates/core/machine/src/cpu/air/ecall.rs | 7 +- crates/core/machine/src/cpu/air/memory.rs | 10 +- crates/core/machine/src/cpu/air/mod.rs | 20 +- crates/core/machine/src/cpu/air/register.rs | 10 +- .../core/machine/src/cpu/columns/channel.rs | 59 --- crates/core/machine/src/cpu/columns/mod.rs | 7 - crates/core/machine/src/cpu/trace.rs | 205 +-------- crates/core/machine/src/memory/global.rs | 74 ++-- crates/core/machine/src/memory/local.rs | 269 ++++++++++++ crates/core/machine/src/memory/mod.rs | 9 + crates/core/machine/src/memory/program.rs | 18 +- crates/core/machine/src/memory/trace.rs | 54 +-- crates/core/machine/src/operations/add.rs | 15 +- crates/core/machine/src/operations/add4.rs | 23 +- crates/core/machine/src/operations/add5.rs | 21 +- crates/core/machine/src/operations/and.rs | 14 +- .../machine/src/operations/field/field_den.rs | 46 +- .../operations/field/field_inner_product.rs | 45 +- .../machine/src/operations/field/field_op.rs | 82 +--- .../src/operations/field/field_sqrt.rs | 41 +- .../machine/src/operations/field/range.rs | 6 - .../src/operations/fixed_rotate_right.rs | 6 - .../src/operations/fixed_shift_right.rs | 6 - crates/core/machine/src/operations/lt.rs | 14 +- crates/core/machine/src/operations/not.rs | 14 +- crates/core/machine/src/operations/or.rs | 15 +- crates/core/machine/src/operations/xor.rs | 14 +- crates/core/machine/src/riscv/cost.rs | 19 +- crates/core/machine/src/riscv/mod.rs | 76 ++-- crates/core/machine/src/riscv/shape.rs | 20 +- crates/core/machine/src/syscall/chip.rs | 143 +++++++ crates/core/machine/src/syscall/mod.rs | 1 + .../machine/src/syscall/precompiles/README.md | 81 +--- .../src/syscall/precompiles/edwards/ed_add.rs | 138 ++---- .../precompiles/edwards/ed_decompress.rs | 95 ++-- .../src/syscall/precompiles/fptower/fp.rs | 64 +-- .../syscall/precompiles/fptower/fp2_addsub.rs | 68 +-- .../syscall/precompiles/fptower/fp2_mul.rs | 64 +-- .../src/syscall/precompiles/keccak256/air.rs | 13 +- .../syscall/precompiles/keccak256/columns.rs | 1 - .../syscall/precompiles/keccak256/trace.rs | 53 +-- .../precompiles/sha256/compress/air.rs | 99 +---- .../precompiles/sha256/compress/columns.rs | 1 - .../precompiles/sha256/compress/trace.rs | 88 ++-- .../syscall/precompiles/sha256/extend/air.rs | 35 +- .../precompiles/sha256/extend/columns.rs | 1 - .../syscall/precompiles/sha256/extend/mod.rs | 2 +- .../precompiles/sha256/extend/trace.rs | 81 ++-- .../src/syscall/precompiles/uint256/air.rs | 44 +- .../weierstrass/weierstrass_add.rs | 162 ++----- .../weierstrass/weierstrass_decompress.rs | 115 ++--- .../weierstrass/weierstrass_double.rs | 162 ++----- crates/core/machine/src/utils/prove.rs | 151 +++++-- crates/derive/src/lib.rs | 13 + crates/prover/src/lib.rs | 42 +- crates/prover/src/verify.rs | 4 +- crates/recursion/circuit-v2/Cargo.toml | 6 +- .../recursion/circuit-v2/src/constraints.rs | 2 +- .../circuit-v2/src/machine/compress.rs | 23 +- .../recursion/circuit-v2/src/machine/core.rs | 26 +- .../circuit-v2/src/machine/deferred.rs | 18 +- crates/recursion/circuit-v2/src/stark.rs | 108 ++++- .../recursion/circuit-v2/src/witness/mod.rs | 24 +- crates/recursion/core-v2/src/builder.rs | 28 +- crates/recursion/core-v2/src/machine.rs | 13 +- .../recursion/core-v2/src/runtime/record.rs | 12 +- crates/recursion/core/src/air/builder.rs | 76 ++-- .../recursion/core/src/air/multi_builder.rs | 10 +- .../recursion/core/src/air/public_values.rs | 3 +- crates/recursion/core/src/memory/air.rs | 56 +-- crates/recursion/core/src/stark/config.rs | 19 +- crates/recursion/core/src/stark/mod.rs | 8 +- crates/sdk/src/provers/cpu.rs | 3 +- crates/sdk/src/provers/mock.rs | 4 +- crates/stark/Cargo.toml | 4 +- crates/stark/src/air/builder.rs | 174 ++++---- crates/stark/src/air/machine.rs | 7 + crates/stark/src/bb31_poseidon2.rs | 27 +- crates/stark/src/chip.rs | 24 +- crates/stark/src/config.rs | 8 +- crates/stark/src/debug.rs | 20 +- crates/stark/src/folder.rs | 20 +- crates/stark/src/lookup/builder.rs | 43 +- crates/stark/src/lookup/debug.rs | 27 +- crates/stark/src/lookup/interaction.rs | 13 +- crates/stark/src/machine.rs | 134 ++++-- crates/stark/src/permutation.rs | 405 ++++++++++++------ crates/stark/src/prover.rs | 400 ++++++++++++++--- crates/stark/src/quotient.rs | 10 +- crates/stark/src/types.rs | 31 +- crates/stark/src/verifier.rs | 90 +++- examples/Cargo.lock | 61 +-- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 119484 -> 119480 bytes .../program/elf/riscv32im-succinct-zkvm-elf | Bin 1258964 -> 1153004 bytes 154 files changed, 3942 insertions(+), 3328 deletions(-) create mode 100644 crates/core/executor/src/dependencies.rs create mode 100644 crates/core/executor/src/events/syscall.rs delete mode 100644 crates/core/machine/src/alu/divrem/utils.rs delete mode 100644 crates/core/machine/src/cpu/columns/channel.rs create mode 100644 crates/core/machine/src/memory/local.rs create mode 100644 crates/core/machine/src/syscall/chip.rs diff --git a/Cargo.lock b/Cargo.lock index 9418a175b0..c6657d2653 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4551,7 +4551,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.22.20", + "toml_edit 0.22.21", ] [[package]] @@ -6158,38 +6158,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "sp1-recursion-circuit" -version = "2.0.0" -dependencies = [ - "bincode", - "ff 0.13.0", - "itertools 0.13.0", - "p3-air", - "p3-baby-bear", - "p3-bn254-fr", - "p3-challenger", - "p3-commit", - "p3-dft", - "p3-field", - "p3-fri", - "p3-matrix", - "p3-merkle-tree", - "p3-poseidon2", - "p3-symmetric", - "p3-util", - "rand 0.8.5", - "serde", - "sp1-core-machine", - "sp1-recursion-compiler", - "sp1-recursion-core", - "sp1-recursion-derive", - "sp1-recursion-gnark-ffi", - "sp1-recursion-program", - "sp1-stark", - "zkhash", -] - [[package]] name = "sp1-recursion-circuit-v2" version = "2.0.0" @@ -6198,6 +6166,7 @@ dependencies = [ "ff 0.13.0", "hashbrown 0.14.5", "itertools 0.13.0", + "num-traits", "p3-air", "p3-baby-bear", "p3-bn254-fr", @@ -6217,12 +6186,10 @@ dependencies = [ "sp1-core-executor", "sp1-core-machine", "sp1-primitives", - "sp1-recursion-circuit", "sp1-recursion-compiler", "sp1-recursion-core-v2", "sp1-recursion-derive", "sp1-recursion-gnark-ffi", - "sp1-recursion-program", "sp1-stark", "stacker", "tracing", @@ -6382,36 +6349,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "sp1-recursion-program" -version = "2.0.0" -dependencies = [ - "itertools 0.13.0", - "p3-air", - "p3-baby-bear", - "p3-challenger", - "p3-commit", - "p3-dft", - "p3-field", - "p3-fri", - "p3-matrix", - "p3-maybe-rayon", - "p3-merkle-tree", - "p3-poseidon2", - "p3-symmetric", - "p3-util", - "rand 0.8.5", - "serde", - "sp1-core-executor", - "sp1-core-machine", - "sp1-primitives", - "sp1-recursion-compiler", - "sp1-recursion-core", - "sp1-stark", - "stacker", - "tracing", -] - [[package]] name = "sp1-sdk" version = "2.0.0" @@ -6467,6 +6404,7 @@ dependencies = [ "getrandom 0.2.15", "hashbrown 0.14.5", "itertools 0.13.0", + "num-traits", "p3-air", "p3-baby-bear", "p3-challenger", @@ -6486,6 +6424,8 @@ dependencies = [ "sp1-derive", "sp1-primitives", "sp1-zkvm", + "strum", + "strum_macros", "sysinfo", "tracing", ] @@ -7059,7 +6999,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.20", + "toml_edit 0.22.21", ] [[package]] @@ -7084,9 +7024,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf" dependencies = [ "indexmap 2.5.0", "serde", diff --git a/Cargo.toml b/Cargo.toml index 263262febd..2f99c90924 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,6 @@ members = [ "crates/helper", "crates/primitives", "crates/prover", - "crates/recursion/circuit", "crates/recursion/circuit-v2", "crates/recursion/compiler", "crates/recursion/core", @@ -26,13 +25,16 @@ members = [ "crates/recursion/derive", "crates/recursion/gnark-cli", "crates/recursion/gnark-ffi", - "crates/recursion/program", "crates/sdk", "crates/cuda", "crates/stark", "crates/zkvm/*", ] -exclude = ["examples/target"] +exclude = [ + "examples/target", + "crates/recursion/program", + "crates/recursion/circuit", +] resolver = "2" [profile.release] diff --git a/crates/core/executor/Cargo.toml b/crates/core/executor/Cargo.toml index 0e48407583..2fb78d74a8 100644 --- a/crates/core/executor/Cargo.toml +++ b/crates/core/executor/Cargo.toml @@ -38,7 +38,7 @@ nohash-hasher = "0.2.0" thiserror = "1.0.63" tracing = "0.1.40" strum_macros = "0.26.4" -strum = "0.26.3" +strum = { version = "0.26.3", features = ["derive"] } log = "0.4.22" hex = "0.4.3" bytemuck = "1.16.3" diff --git a/crates/core/executor/src/dependencies.rs b/crates/core/executor/src/dependencies.rs new file mode 100644 index 0000000000..194d8d0eb2 --- /dev/null +++ b/crates/core/executor/src/dependencies.rs @@ -0,0 +1,290 @@ +use crate::{ + events::{create_alu_lookups, AluEvent, CpuEvent}, + utils::{get_msb, get_quotient_and_remainder, is_signed_operation}, + Executor, Opcode, +}; + +/// Emits the dependencies for division and remainder operations. +#[allow(clippy::too_many_lines)] +pub fn emit_divrem_dependencies(executor: &mut Executor, event: AluEvent) { + let (quotient, remainder) = get_quotient_and_remainder(event.b, event.c, event.opcode); + let c_msb = get_msb(event.c); + let rem_msb = get_msb(remainder); + let mut c_neg = 0; + let mut rem_neg = 0; + let is_signed_operation = is_signed_operation(event.opcode); + if is_signed_operation { + c_neg = c_msb; // same as abs_c_alu_event + rem_neg = rem_msb; // same as abs_rem_alu_event + } + + if c_neg == 1 { + executor.record.add_events.push(AluEvent { + lookup_id: event.sub_lookups[4], + shard: event.shard, + clk: event.clk, + opcode: Opcode::ADD, + a: 0, + b: event.c, + c: (event.c as i32).unsigned_abs(), + sub_lookups: create_alu_lookups(), + }); + } + if rem_neg == 1 { + executor.record.add_events.push(AluEvent { + lookup_id: event.sub_lookups[5], + shard: event.shard, + clk: event.clk, + opcode: Opcode::ADD, + a: 0, + b: remainder, + c: (remainder as i32).unsigned_abs(), + sub_lookups: create_alu_lookups(), + }); + } + + let c_times_quotient = { + if is_signed_operation { + (((quotient as i32) as i64) * ((event.c as i32) as i64)).to_le_bytes() + } else { + ((quotient as u64) * (event.c as u64)).to_le_bytes() + } + }; + let lower_word = u32::from_le_bytes(c_times_quotient[0..4].try_into().unwrap()); + let upper_word = u32::from_le_bytes(c_times_quotient[4..8].try_into().unwrap()); + + let lower_multiplication = AluEvent { + lookup_id: event.sub_lookups[0], + shard: event.shard, + clk: event.clk, + opcode: Opcode::MUL, + a: lower_word, + c: event.c, + b: quotient, + sub_lookups: create_alu_lookups(), + }; + executor.record.mul_events.push(lower_multiplication); + + let upper_multiplication = AluEvent { + lookup_id: event.sub_lookups[1], + shard: event.shard, + clk: event.clk, + opcode: { + if is_signed_operation { + Opcode::MULH + } else { + Opcode::MULHU + } + }, + a: upper_word, + c: event.c, + b: quotient, + sub_lookups: create_alu_lookups(), + }; + executor.record.mul_events.push(upper_multiplication); + + let lt_event = if is_signed_operation { + AluEvent { + lookup_id: event.sub_lookups[2], + shard: event.shard, + opcode: Opcode::SLTU, + a: 1, + b: (remainder as i32).unsigned_abs(), + c: u32::max(1, (event.c as i32).unsigned_abs()), + clk: event.clk, + sub_lookups: create_alu_lookups(), + } + } else { + AluEvent { + lookup_id: event.sub_lookups[3], + shard: event.shard, + opcode: Opcode::SLTU, + a: 1, + b: remainder, + c: u32::max(1, event.c), + clk: event.clk, + sub_lookups: create_alu_lookups(), + } + }; + + if event.c != 0 { + executor.record.lt_events.push(lt_event); + } +} + +/// Emit the dependencies for CPU events. +#[allow(clippy::too_many_lines)] +pub fn emit_cpu_dependencies(executor: &mut Executor, event: &CpuEvent) { + if matches!( + event.instruction.opcode, + Opcode::LB + | Opcode::LH + | Opcode::LW + | Opcode::LBU + | Opcode::LHU + | Opcode::SB + | Opcode::SH + | Opcode::SW + ) { + let memory_addr = event.b.wrapping_add(event.c); + // Add event to ALU check to check that addr == b + c + let add_event = AluEvent { + lookup_id: event.memory_add_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: Opcode::ADD, + a: memory_addr, + b: event.b, + c: event.c, + sub_lookups: create_alu_lookups(), + }; + executor.record.add_events.push(add_event); + let addr_offset = (memory_addr % 4_u32) as u8; + let mem_value = event.memory_record.unwrap().value(); + + if matches!(event.instruction.opcode, Opcode::LB | Opcode::LH) { + let (unsigned_mem_val, most_sig_mem_value_byte, sign_value) = + match event.instruction.opcode { + Opcode::LB => { + let most_sig_mem_value_byte = mem_value.to_le_bytes()[addr_offset as usize]; + let sign_value = 256; + (most_sig_mem_value_byte as u32, most_sig_mem_value_byte, sign_value) + } + Opcode::LH => { + let sign_value = 65536; + let unsigned_mem_val = match (addr_offset >> 1) % 2 { + 0 => mem_value & 0x0000FFFF, + 1 => (mem_value & 0xFFFF0000) >> 16, + _ => unreachable!(), + }; + let most_sig_mem_value_byte = unsigned_mem_val.to_le_bytes()[1]; + (unsigned_mem_val, most_sig_mem_value_byte, sign_value) + } + _ => unreachable!(), + }; + + if most_sig_mem_value_byte >> 7 & 0x01 == 1 { + let sub_event = AluEvent { + lookup_id: event.memory_sub_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: Opcode::SUB, + a: event.a, + b: unsigned_mem_val, + c: sign_value, + sub_lookups: create_alu_lookups(), + }; + executor.record.add_events.push(sub_event); + } + } + } + + if event.instruction.is_branch_instruction() { + let a_eq_b = event.a == event.b; + let use_signed_comparison = matches!(event.instruction.opcode, Opcode::BLT | Opcode::BGE); + let a_lt_b = if use_signed_comparison { + (event.a as i32) < (event.b as i32) + } else { + event.a < event.b + }; + let a_gt_b = if use_signed_comparison { + (event.a as i32) > (event.b as i32) + } else { + event.a > event.b + }; + + let alu_op_code = if use_signed_comparison { Opcode::SLT } else { Opcode::SLTU }; + // Add the ALU events for the comparisons + let lt_comp_event = AluEvent { + lookup_id: event.branch_lt_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: alu_op_code, + a: a_lt_b as u32, + b: event.a, + c: event.b, + sub_lookups: create_alu_lookups(), + }; + let gt_comp_event = AluEvent { + lookup_id: event.branch_gt_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: alu_op_code, + a: a_gt_b as u32, + b: event.b, + c: event.a, + sub_lookups: create_alu_lookups(), + }; + executor.record.lt_events.push(lt_comp_event); + executor.record.lt_events.push(gt_comp_event); + let branching = match event.instruction.opcode { + Opcode::BEQ => a_eq_b, + Opcode::BNE => !a_eq_b, + Opcode::BLT | Opcode::BLTU => a_lt_b, + Opcode::BGE | Opcode::BGEU => a_eq_b || a_gt_b, + _ => unreachable!(), + }; + if branching { + let next_pc = event.pc.wrapping_add(event.c); + let add_event = AluEvent { + lookup_id: event.branch_add_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: Opcode::ADD, + a: next_pc, + b: event.pc, + c: event.c, + sub_lookups: create_alu_lookups(), + }; + executor.record.add_events.push(add_event); + } + } + + if event.instruction.is_jump_instruction() { + match event.instruction.opcode { + Opcode::JAL => { + let next_pc = event.pc.wrapping_add(event.b); + let add_event = AluEvent { + lookup_id: event.jump_jal_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: Opcode::ADD, + a: next_pc, + b: event.pc, + c: event.b, + sub_lookups: create_alu_lookups(), + }; + executor.record.add_events.push(add_event); + } + Opcode::JALR => { + let next_pc = event.b.wrapping_add(event.c); + let add_event = AluEvent { + lookup_id: event.jump_jalr_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: Opcode::ADD, + a: next_pc, + b: event.b, + c: event.c, + sub_lookups: create_alu_lookups(), + }; + executor.record.add_events.push(add_event); + } + _ => unreachable!(), + } + } + + if matches!(event.instruction.opcode, Opcode::AUIPC) { + let add_event = AluEvent { + lookup_id: event.auipc_lookup_id, + shard: event.shard, + clk: event.clk, + opcode: Opcode::ADD, + a: event.a, + b: event.pc, + c: event.b, + sub_lookups: create_alu_lookups(), + }; + executor.record.add_events.push(add_event); + } +} diff --git a/crates/core/executor/src/events/alu.rs b/crates/core/executor/src/events/alu.rs index b2ace9b673..4d72410a96 100644 --- a/crates/core/executor/src/events/alu.rs +++ b/crates/core/executor/src/events/alu.rs @@ -7,15 +7,13 @@ use super::{create_alu_lookups, LookupId}; /// Arithmetic Logic Unit (ALU) Event. /// /// This object encapsulated the information needed to prove an ALU operation. This includes its -/// shard, channel, opcode, operands, and other relevant information. +/// shard, opcode, operands, and other relevant information. #[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct AluEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The opcode. @@ -33,11 +31,10 @@ pub struct AluEvent { impl AluEvent { /// Create a new [`AluEvent`]. #[must_use] - pub fn new(shard: u32, channel: u8, clk: u32, opcode: Opcode, a: u32, b: u32, c: u32) -> Self { + pub fn new(shard: u32, clk: u32, opcode: Opcode, a: u32, b: u32, c: u32) -> Self { Self { lookup_id: LookupId::default(), shard, - channel, clk, opcode, a, diff --git a/crates/core/executor/src/events/byte.rs b/crates/core/executor/src/events/byte.rs index 2f2f0f043d..4e5f254373 100644 --- a/crates/core/executor/src/events/byte.rs +++ b/crates/core/executor/src/events/byte.rs @@ -16,13 +16,11 @@ pub const NUM_BYTE_OPS: usize = 9; /// Byte Lookup Event. /// /// This object encapsulates the information needed to prove a byte lookup operation. This includes -/// the shard, channel, opcode, operands, and other relevant information. +/// the shard, opcode, operands, and other relevant information. #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Hash)] pub struct ByteLookupEvent { /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The opcode. pub opcode: ByteOpcode, /// The first operand. @@ -55,10 +53,9 @@ pub trait ByteRecord { } /// Adds a `ByteLookupEvent` to verify `a` and `b` are indeed bytes to the shard. - fn add_u8_range_check(&mut self, shard: u32, channel: u8, a: u8, b: u8) { + fn add_u8_range_check(&mut self, shard: u32, a: u8, b: u8) { self.add_byte_lookup_event(ByteLookupEvent { shard, - channel, opcode: ByteOpcode::U8Range, a1: 0, a2: 0, @@ -68,10 +65,9 @@ pub trait ByteRecord { } /// Adds a `ByteLookupEvent` to verify `a` is indeed u16. - fn add_u16_range_check(&mut self, shard: u32, channel: u8, a: u16) { + fn add_u16_range_check(&mut self, shard: u32, a: u16) { self.add_byte_lookup_event(ByteLookupEvent { shard, - channel, opcode: ByteOpcode::U16Range, a1: a, a2: 0, @@ -81,43 +77,36 @@ pub trait ByteRecord { } /// Adds `ByteLookupEvent`s to verify that all the bytes in the input slice are indeed bytes. - fn add_u8_range_checks(&mut self, shard: u32, channel: u8, bytes: &[u8]) { + fn add_u8_range_checks(&mut self, shard: u32, bytes: &[u8]) { let mut index = 0; while index + 1 < bytes.len() { - self.add_u8_range_check(shard, channel, bytes[index], bytes[index + 1]); + self.add_u8_range_check(shard, bytes[index], bytes[index + 1]); index += 2; } if index < bytes.len() { // If the input slice's length is odd, we need to add a check for the last byte. - self.add_u8_range_check(shard, channel, bytes[index], 0); + self.add_u8_range_check(shard, bytes[index], 0); } } /// Adds `ByteLookupEvent`s to verify that all the field elements in the input slice are indeed /// bytes. - fn add_u8_range_checks_field( - &mut self, - shard: u32, - channel: u8, - field_values: &[F], - ) { + fn add_u8_range_checks_field(&mut self, shard: u32, field_values: &[F]) { self.add_u8_range_checks( shard, - channel, &field_values.iter().map(|x| x.as_canonical_u32() as u8).collect::>(), ); } /// Adds `ByteLookupEvent`s to verify that all the bytes in the input slice are indeed bytes. - fn add_u16_range_checks(&mut self, shard: u32, channel: u8, ls: &[u16]) { - ls.iter().for_each(|x| self.add_u16_range_check(shard, channel, *x)); + fn add_u16_range_checks(&mut self, shard: u32, ls: &[u16]) { + ls.iter().for_each(|x| self.add_u16_range_check(shard, *x)); } /// Adds a `ByteLookupEvent` to compute the bitwise OR of the two input values. - fn lookup_or(&mut self, shard: u32, channel: u8, b: u8, c: u8) { + fn lookup_or(&mut self, shard: u32, b: u8, c: u8) { self.add_byte_lookup_event(ByteLookupEvent { shard, - channel, opcode: ByteOpcode::OR, a1: (b | c) as u16, a2: 0, @@ -130,8 +119,8 @@ pub trait ByteRecord { impl ByteLookupEvent { /// Creates a new `ByteLookupEvent`. #[must_use] - pub fn new(shard: u32, channel: u8, opcode: ByteOpcode, a1: u16, a2: u8, b: u8, c: u8) -> Self { - Self { shard, channel, opcode, a1, a2, b, c } + pub fn new(shard: u32, opcode: ByteOpcode, a1: u16, a2: u8, b: u8, c: u8) -> Self { + Self { shard, opcode, a1, a2, b, c } } } diff --git a/crates/core/executor/src/events/cpu.rs b/crates/core/executor/src/events/cpu.rs index cf6d9b4dae..b2d775cf12 100644 --- a/crates/core/executor/src/events/cpu.rs +++ b/crates/core/executor/src/events/cpu.rs @@ -7,13 +7,11 @@ use super::{memory::MemoryRecordEnum, LookupId}; /// CPU Event. /// /// This object encapsulates the information needed to prove a CPU operation. This includes its -/// shard, channel, opcode, operands, and other relevant information. +/// shard, opcode, operands, and other relevant information. #[derive(Debug, Copy, Clone, Serialize, Deserialize)] pub struct CpuEvent { /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The program counter. diff --git a/crates/core/executor/src/events/memory.rs b/crates/core/executor/src/events/memory.rs index 588fb18e99..4372f21267 100644 --- a/crates/core/executor/src/events/memory.rs +++ b/crates/core/executor/src/events/memory.rs @@ -85,6 +85,42 @@ pub enum MemoryRecordEnum { Write(MemoryWriteRecord), } +impl MemoryRecordEnum { + /// Retrieve the current memory record. + #[must_use] + pub fn current_record(&self) -> MemoryRecord { + match self { + MemoryRecordEnum::Read(record) => MemoryRecord { + shard: record.shard, + timestamp: record.timestamp, + value: record.value, + }, + MemoryRecordEnum::Write(record) => MemoryRecord { + shard: record.shard, + timestamp: record.timestamp, + value: record.value, + }, + } + } + + /// Retrieve the previous memory record. + #[must_use] + pub fn previous_record(&self) -> MemoryRecord { + match self { + MemoryRecordEnum::Read(record) => MemoryRecord { + shard: record.prev_shard, + timestamp: record.prev_timestamp, + value: record.value, + }, + MemoryRecordEnum::Write(record) => MemoryRecord { + shard: record.prev_shard, + timestamp: record.prev_timestamp, + value: record.prev_value, + }, + } + } +} + /// Memory Initialize/Finalize Event. /// /// This object encapsulates the information needed to prove a memory initialize or finalize @@ -177,3 +213,18 @@ impl From for MemoryRecordEnum { MemoryRecordEnum::Write(write_record) } } + +/// Memory Local Event. +/// +/// This object encapsulates the information needed to prove a memory access operation within a +/// shard. This includes the address, initial memory access, and final memory access within a +/// shard. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct MemoryLocalEvent { + /// The address. + pub addr: u32, + /// The initial memory access. + pub initial_mem_access: MemoryRecord, + /// The final memory access. + pub final_mem_access: MemoryRecord, +} diff --git a/crates/core/executor/src/events/mod.rs b/crates/core/executor/src/events/mod.rs index 9981e960af..da38bb83c2 100644 --- a/crates/core/executor/src/events/mod.rs +++ b/crates/core/executor/src/events/mod.rs @@ -5,6 +5,7 @@ mod byte; mod cpu; mod memory; mod precompiles; +mod syscall; mod utils; pub use alu::*; @@ -12,4 +13,5 @@ pub use byte::*; pub use cpu::*; pub use memory::*; pub use precompiles::*; +pub use syscall::*; pub use utils::*; diff --git a/crates/core/executor/src/events/precompiles/ec.rs b/crates/core/executor/src/events/precompiles/ec.rs index ff8fee9844..7b8f2305f2 100644 --- a/crates/core/executor/src/events/precompiles/ec.rs +++ b/crates/core/executor/src/events/precompiles/ec.rs @@ -11,7 +11,7 @@ use typenum::Unsigned; use crate::{ events::{ memory::{MemoryReadRecord, MemoryWriteRecord}, - LookupId, + LookupId, MemoryLocalEvent, }, syscalls::SyscallContext, }; @@ -19,13 +19,11 @@ use crate::{ /// Elliptic Curve Add Event. /// /// This event is emitted when an elliptic curve addition operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct EllipticCurveAddEvent { pub(crate) lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the first point. @@ -40,19 +38,19 @@ pub struct EllipticCurveAddEvent { pub p_memory_records: Vec, /// The memory records for the second point. pub q_memory_records: Vec, + /// The local memory access records. + pub local_mem_access: Vec, } /// Elliptic Curve Double Event. /// /// This event is emitted when an elliptic curve doubling operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct EllipticCurveDoubleEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the point. @@ -61,19 +59,19 @@ pub struct EllipticCurveDoubleEvent { pub p: Vec, /// The memory records for the point. pub p_memory_records: Vec, + /// The local memory access records. + pub local_mem_access: Vec, } /// Elliptic Curve Point Decompress Event. /// /// This event is emitted when an elliptic curve point decompression operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct EllipticCurveDecompressEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the point. @@ -88,6 +86,8 @@ pub struct EllipticCurveDecompressEvent { pub x_memory_records: Vec, /// The memory records for the y coordinate. pub y_memory_records: Vec, + /// The local memory access records. + pub local_mem_access: Vec, } /// Create an elliptic curve add event. It takes two pointers to memory locations, reads the points @@ -130,7 +130,6 @@ pub fn create_ec_add_event( EllipticCurveAddEvent { lookup_id: rt.syscall_lookup_id, shard: rt.current_shard(), - channel: rt.current_channel(), clk: start_clk, p_ptr, p, @@ -138,6 +137,7 @@ pub fn create_ec_add_event( q, p_memory_records, q_memory_records, + local_mem_access: rt.postprocess(), } } @@ -171,11 +171,11 @@ pub fn create_ec_double_event( EllipticCurveDoubleEvent { lookup_id: rt.syscall_lookup_id, shard: rt.current_shard(), - channel: rt.current_channel(), clk: start_clk, p_ptr, p, p_memory_records, + local_mem_access: rt.postprocess(), } } @@ -219,7 +219,6 @@ pub fn create_ec_decompress_event( EllipticCurveDecompressEvent { lookup_id: rt.syscall_lookup_id, shard: rt.current_shard(), - channel: rt.current_channel(), clk: start_clk, ptr: slice_ptr, sign_bit: sign_bit != 0, @@ -227,5 +226,6 @@ pub fn create_ec_decompress_event( decompressed_y_bytes, x_memory_records, y_memory_records, + local_mem_access: rt.postprocess(), } } diff --git a/crates/core/executor/src/events/precompiles/edwards.rs b/crates/core/executor/src/events/precompiles/edwards.rs index 17daf6837e..3d795b891a 100644 --- a/crates/core/executor/src/events/precompiles/edwards.rs +++ b/crates/core/executor/src/events/precompiles/edwards.rs @@ -3,20 +3,18 @@ use sp1_curves::{edwards::WORDS_FIELD_ELEMENT, COMPRESSED_POINT_BYTES, NUM_BYTES use crate::events::{ memory::{MemoryReadRecord, MemoryWriteRecord}, - LookupId, + LookupId, MemoryLocalEvent, }; /// Edwards Decompress Event. /// /// This event is emitted when an edwards decompression operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct EdDecompressEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the point. @@ -31,4 +29,6 @@ pub struct EdDecompressEvent { pub x_memory_records: [MemoryWriteRecord; WORDS_FIELD_ELEMENT], /// The memory records for the y coordinate. pub y_memory_records: [MemoryReadRecord; WORDS_FIELD_ELEMENT], + /// The local memory access events. + pub local_mem_access: Vec, } diff --git a/crates/core/executor/src/events/precompiles/fptower.rs b/crates/core/executor/src/events/precompiles/fptower.rs index 1ae2afd005..e4f1c96d59 100644 --- a/crates/core/executor/src/events/precompiles/fptower.rs +++ b/crates/core/executor/src/events/precompiles/fptower.rs @@ -1,11 +1,12 @@ use serde::{Deserialize, Serialize}; -use crate::events::{LookupId, MemoryReadRecord, MemoryWriteRecord}; +use crate::events::{LookupId, MemoryLocalEvent, MemoryReadRecord, MemoryWriteRecord}; /// This is an arithmetic operation for emulating modular arithmetic. -#[derive(PartialEq, Copy, Clone, Debug, Serialize, Deserialize)] +#[derive(Default, PartialEq, Copy, Clone, Debug, Serialize, Deserialize)] pub enum FieldOperation { /// Addition. + #[default] Add, /// Multiplication. Mul, @@ -18,14 +19,12 @@ pub enum FieldOperation { /// Emulated Field Operation Events. /// /// This event is emitted when an emulated field operation is performed on the input operands. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct FpOpEvent { /// The lookup id. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the x operand. @@ -42,19 +41,19 @@ pub struct FpOpEvent { pub x_memory_records: Vec, /// The memory records for the y operand. pub y_memory_records: Vec, + /// The local memory access records. + pub local_mem_access: Vec, } /// Emulated Degree 2 Field Addition/Subtraction Events. /// /// This event is emitted when an emulated degree 2 field operation is performed on the input -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct Fp2AddSubEvent { /// The lookup id. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The operation to perform. @@ -71,17 +70,17 @@ pub struct Fp2AddSubEvent { pub x_memory_records: Vec, /// The memory records for the y operand. pub y_memory_records: Vec, + /// The local memory access records. + pub local_mem_access: Vec, } /// Emulated Degree 2 Field Multiplication Events. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct Fp2MulEvent { /// The lookup id. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the x operand. @@ -96,4 +95,6 @@ pub struct Fp2MulEvent { pub x_memory_records: Vec, /// The memory records for the y operand. pub y_memory_records: Vec, + /// The local memory access records. + pub local_mem_access: Vec, } diff --git a/crates/core/executor/src/events/precompiles/keccak256_permute.rs b/crates/core/executor/src/events/precompiles/keccak256_permute.rs index 19ad295034..ded58bbfed 100644 --- a/crates/core/executor/src/events/precompiles/keccak256_permute.rs +++ b/crates/core/executor/src/events/precompiles/keccak256_permute.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use crate::events::{ memory::{MemoryReadRecord, MemoryWriteRecord}, - LookupId, + LookupId, MemoryLocalEvent, }; pub(crate) const STATE_SIZE: usize = 25; @@ -10,14 +10,12 @@ pub(crate) const STATE_SIZE: usize = 25; /// Keccak-256 Permutation Event. /// /// This event is emitted when a keccak-256 permutation operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct KeccakPermuteEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pre-state as a list of u64 words. @@ -30,4 +28,6 @@ pub struct KeccakPermuteEvent { pub state_write_records: Vec, /// The address of the state. pub state_addr: u32, + /// The local memory access records. + pub local_mem_access: Vec, } diff --git a/crates/core/executor/src/events/precompiles/mod.rs b/crates/core/executor/src/events/precompiles/mod.rs index ded0f62cd2..8acfed9e60 100644 --- a/crates/core/executor/src/events/precompiles/mod.rs +++ b/crates/core/executor/src/events/precompiles/mod.rs @@ -9,7 +9,191 @@ mod uint256; pub use ec::*; pub use edwards::*; pub use fptower::*; +use hashbrown::HashMap; pub use keccak256_permute::*; +use serde::{Deserialize, Serialize}; pub use sha256_compress::*; pub use sha256_extend::*; +use strum::{EnumIter, IntoEnumIterator}; pub use uint256::*; + +use crate::syscalls::SyscallCode; + +use super::MemoryLocalEvent; + +#[derive(Clone, Debug, Serialize, Deserialize, EnumIter)] +/// Precompile event. There should be one variant for every precompile syscall. +pub enum PrecompileEvent { + /// Sha256 extend precompile event. + ShaExtend(ShaExtendEvent), + /// Sha256 compress precompile event. + ShaCompress(ShaCompressEvent), + /// Keccak256 permute precompile event. + KeccakPermute(KeccakPermuteEvent), + /// Edwards curve add precompile event. + EdAdd(EllipticCurveAddEvent), + /// Edwards curve decompress precompile event. + EdDecompress(EdDecompressEvent), + /// Secp256k1 curve add precompile event. + Secp256k1Add(EllipticCurveAddEvent), + /// Secp256k1 curve double precompile event. + Secp256k1Double(EllipticCurveDoubleEvent), + /// Secp256k1 curve decompress precompile event. + Secp256k1Decompress(EllipticCurveDecompressEvent), + /// K256 curve decompress precompile event. + K256Decompress(EllipticCurveDecompressEvent), + /// Bn254 curve add precompile event. + Bn254Add(EllipticCurveAddEvent), + /// Bn254 curve double precompile event. + Bn254Double(EllipticCurveDoubleEvent), + /// Bn254 base field operation precompile event. + Bn254Fp(FpOpEvent), + /// Bn254 quadratic field add/sub precompile event. + Bn254Fp2AddSub(Fp2AddSubEvent), + /// Bn254 quadratic field mul precompile event. + Bn254Fp2Mul(Fp2MulEvent), + /// Bls12-381 curve add precompile event. + Bls12381Add(EllipticCurveAddEvent), + /// Bls12-381 curve double precompile event. + Bls12381Double(EllipticCurveDoubleEvent), + /// Bls12-381 curve decompress precompile event. + Bls12381Decompress(EllipticCurveDecompressEvent), + /// Bls12-381 base field operation precompile event. + Bls12381Fp(FpOpEvent), + /// Bls12-381 quadratic field add/sub precompile event. + Bls12381Fp2AddSub(Fp2AddSubEvent), + /// Bls12-381 quadratic field mul precompile event. + Bls12381Fp2Mul(Fp2MulEvent), + /// Uint256 mul precompile event. + Uint256Mul(Uint256MulEvent), +} + +/// Trait to retrieve all the local memory events from a vec of precompile events. +pub trait PrecompileLocalMemory { + /// Get an iterator of all the local memory events. + fn get_local_mem_events(&self) -> impl IntoIterator; +} + +impl PrecompileLocalMemory for Vec { + fn get_local_mem_events(&self) -> impl IntoIterator { + let mut iterators = Vec::new(); + + for event in self.iter() { + match event { + PrecompileEvent::ShaExtend(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::ShaCompress(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::KeccakPermute(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::EdDecompress(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::Secp256k1Add(e) + | PrecompileEvent::EdAdd(e) + | PrecompileEvent::Bn254Add(e) + | PrecompileEvent::Bls12381Add(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::Secp256k1Double(e) + | PrecompileEvent::Bn254Double(e) + | PrecompileEvent::Bls12381Double(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::Secp256k1Decompress(e) + | PrecompileEvent::K256Decompress(e) + | PrecompileEvent::Bls12381Decompress(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::Uint256Mul(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::Bls12381Fp(e) | PrecompileEvent::Bn254Fp(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::Bls12381Fp2AddSub(e) | PrecompileEvent::Bn254Fp2AddSub(e) => { + iterators.push(e.local_mem_access.iter()); + } + PrecompileEvent::Bls12381Fp2Mul(e) | PrecompileEvent::Bn254Fp2Mul(e) => { + iterators.push(e.local_mem_access.iter()); + } + } + } + + iterators.into_iter().flatten() + } +} + +/// A record of all the precompile events. +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct PrecompileEvents { + events: HashMap>, +} + +impl Default for PrecompileEvents { + fn default() -> Self { + let mut events = HashMap::new(); + for syscall_code in SyscallCode::iter() { + if syscall_code.should_send() == 1 { + events.insert(syscall_code, Vec::new()); + } + } + + Self { events } + } +} + +impl PrecompileEvents { + pub(crate) fn append(&mut self, other: &mut PrecompileEvents) { + for (syscall, events) in other.events.iter_mut() { + if !events.is_empty() { + self.events.entry(*syscall).or_default().append(events); + } + } + } + + #[inline] + /// Add a precompile event for a given syscall code. + pub(crate) fn add_event(&mut self, syscall_code: SyscallCode, event: PrecompileEvent) { + assert!(syscall_code.should_send() == 1); + self.events.entry(syscall_code).or_default().push(event); + } + + #[inline] + /// Insert a vector of precompile events for a given syscall code. + pub(crate) fn insert(&mut self, syscall_code: SyscallCode, events: Vec) { + assert!(syscall_code.should_send() == 1); + self.events.insert(syscall_code, events); + } + + #[inline] + pub(crate) fn into_iter(self) -> impl Iterator)> { + self.events.into_iter() + } + + #[inline] + pub(crate) fn iter(&self) -> impl Iterator)> { + self.events.iter() + } + + #[inline] + /// Get all the precompile events for a given syscall code. + pub(crate) fn get_events(&self, syscall_code: SyscallCode) -> &Vec { + assert!(syscall_code.should_send() == 1); + &self.events[&syscall_code] + } + + /// Get all the local events from all the precompile events. + pub(crate) fn get_local_mem_events(&self) -> impl Iterator { + let mut iterators = Vec::new(); + + for (_, events) in self.events.iter() { + iterators.push(events.get_local_mem_events()); + } + + iterators.into_iter().flatten() + } +} diff --git a/crates/core/executor/src/events/precompiles/sha256_compress.rs b/crates/core/executor/src/events/precompiles/sha256_compress.rs index 4c3f42bf3d..5bf094611d 100644 --- a/crates/core/executor/src/events/precompiles/sha256_compress.rs +++ b/crates/core/executor/src/events/precompiles/sha256_compress.rs @@ -2,20 +2,18 @@ use serde::{Deserialize, Serialize}; use crate::events::{ memory::{MemoryReadRecord, MemoryWriteRecord}, - LookupId, + LookupId, MemoryLocalEvent, }; /// SHA-256 Compress Event. /// /// This event is emitted when a SHA-256 compress operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct ShaCompressEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the word. @@ -32,4 +30,6 @@ pub struct ShaCompressEvent { pub w_i_read_records: Vec, /// The memory records for the word. pub h_write_records: [MemoryWriteRecord; 8], + /// The local memory accesses. + pub local_mem_access: Vec, } diff --git a/crates/core/executor/src/events/precompiles/sha256_extend.rs b/crates/core/executor/src/events/precompiles/sha256_extend.rs index f63998362d..c6671cea9b 100644 --- a/crates/core/executor/src/events/precompiles/sha256_extend.rs +++ b/crates/core/executor/src/events/precompiles/sha256_extend.rs @@ -1,19 +1,19 @@ use serde::{Deserialize, Serialize}; -use crate::events::memory::{MemoryReadRecord, MemoryWriteRecord}; -use crate::events::LookupId; +use crate::events::{ + memory::{MemoryReadRecord, MemoryWriteRecord}, + LookupId, MemoryLocalEvent, +}; /// SHA-256 Extend Event. /// /// This event is emitted when a SHA-256 extend operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct ShaExtendEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the word. @@ -28,4 +28,6 @@ pub struct ShaExtendEvent { pub w_i_minus_7_reads: Vec, /// The memory writes of w[i]. pub w_i_writes: Vec, + /// The local memory accesses. + pub local_mem_access: Vec, } diff --git a/crates/core/executor/src/events/precompiles/uint256.rs b/crates/core/executor/src/events/precompiles/uint256.rs index bcd13e140b..4acbcfc3c6 100644 --- a/crates/core/executor/src/events/precompiles/uint256.rs +++ b/crates/core/executor/src/events/precompiles/uint256.rs @@ -2,20 +2,18 @@ use serde::{Deserialize, Serialize}; use crate::events::{ memory::{MemoryReadRecord, MemoryWriteRecord}, - LookupId, + LookupId, MemoryLocalEvent, }; /// Uint256 Mul Event. /// /// This event is emitted when a uint256 mul operation is performed. -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Default, Debug, Clone, Serialize, Deserialize)] pub struct Uint256MulEvent { /// The lookup identifer. pub lookup_id: LookupId, /// The shard number. pub shard: u32, - /// The channel number. - pub channel: u8, /// The clock cycle. pub clk: u32, /// The pointer to the x value. @@ -34,4 +32,6 @@ pub struct Uint256MulEvent { pub y_memory_records: Vec, /// The memory records for the modulus. pub modulus_memory_records: Vec, + /// The local memory access records. + pub local_mem_access: Vec, } diff --git a/crates/core/executor/src/events/syscall.rs b/crates/core/executor/src/events/syscall.rs new file mode 100644 index 0000000000..62fbf86fa4 --- /dev/null +++ b/crates/core/executor/src/events/syscall.rs @@ -0,0 +1,23 @@ +use serde::{Deserialize, Serialize}; + +use super::LookupId; + +/// Syscall Event. +/// +/// This object encapsulated the information needed to prove a syscall invocation from the CPU table. +/// This includes its shard, clk, syscall id, arguments, other relevant information. +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +pub struct SyscallEvent { + /// The shard number. + pub shard: u32, + /// The clock cycle. + pub clk: u32, + /// The lookup id. + pub lookup_id: LookupId, + /// The syscall id. + pub syscall_id: u32, + /// The first argument. + pub arg1: u32, + /// The second operand. + pub arg2: u32, +} diff --git a/crates/core/executor/src/executor.rs b/crates/core/executor/src/executor.rs index eefb133195..014a0fd778 100644 --- a/crates/core/executor/src/executor.rs +++ b/crates/core/executor/src/executor.rs @@ -11,10 +11,11 @@ use thiserror::Error; use crate::{ context::SP1Context, + dependencies::{emit_cpu_dependencies, emit_divrem_dependencies}, events::{ create_alu_lookup_id, create_alu_lookups, AluEvent, CpuEvent, LookupId, - MemoryAccessPosition, MemoryInitializeFinalizeEvent, MemoryReadRecord, MemoryRecord, - MemoryWriteRecord, + MemoryAccessPosition, MemoryInitializeFinalizeEvent, MemoryLocalEvent, MemoryReadRecord, + MemoryRecord, MemoryWriteRecord, SyscallEvent, }, hook::{HookEnv, HookRegistry}, memory::{Entry, PagedMemory}, @@ -101,6 +102,9 @@ pub struct Executor<'a> { /// Memory addresses that were touched in this batch of shards. Used to minimize the size of /// checkpoints. pub memory_checkpoint: PagedMemory>, + + /// Local memory access events. + pub local_memory_access: HashMap, } /// The different modes the executor can run in. @@ -175,7 +179,7 @@ impl<'a> Executor<'a> { let program = Arc::new(program); // Create a default record with the program. - let record = ExecutionRecord { program: program.clone(), ..Default::default() }; + let record = ExecutionRecord::new(program.clone()); // If `TRACE_FILE`` is set, initialize the trace buffer. let trace_buf = if let Ok(trace_file) = std::env::var("TRACE_FILE") { @@ -217,6 +221,7 @@ impl<'a> Executor<'a> { opts, max_cycles: context.max_cycles, memory_checkpoint: PagedMemory::new_preallocated(), + local_memory_access: HashMap::new(), } } @@ -345,15 +350,14 @@ impl<'a> Executor<'a> { self.state.current_shard } - /// Get the current channel. - #[must_use] - #[inline] - pub fn channel(&self) -> u8 { - self.state.channel - } - /// Read a word from memory and create an access record. - pub fn mr(&mut self, addr: u32, shard: u32, timestamp: u32) -> MemoryReadRecord { + pub fn mr( + &mut self, + addr: u32, + shard: u32, + timestamp: u32, + local_memory_access: Option<&mut HashMap>, + ) -> MemoryReadRecord { // Get the memory record entry. let entry = self.state.memory.entry(addr); if self.executor_mode == ExecutorMode::Checkpoint || self.unconstrained { @@ -387,18 +391,49 @@ impl<'a> Executor<'a> { entry.insert(MemoryRecord { value: *value, shard: 0, timestamp: 0 }) } }; - let value = record.value; - let prev_shard = record.shard; - let prev_timestamp = record.timestamp; + + let prev_record = *record; record.shard = shard; record.timestamp = timestamp; + if !self.unconstrained { + let local_memory_access = if let Some(local_memory_access) = local_memory_access { + local_memory_access + } else { + &mut self.local_memory_access + }; + + local_memory_access + .entry(addr) + .and_modify(|e| { + e.final_mem_access = *record; + }) + .or_insert(MemoryLocalEvent { + addr, + initial_mem_access: prev_record, + final_mem_access: *record, + }); + } + // Construct the memory read record. - MemoryReadRecord::new(value, shard, timestamp, prev_shard, prev_timestamp) + MemoryReadRecord::new( + record.value, + record.shard, + record.timestamp, + prev_record.shard, + prev_record.timestamp, + ) } /// Write a word to memory and create an access record. - pub fn mw(&mut self, addr: u32, value: u32, shard: u32, timestamp: u32) -> MemoryWriteRecord { + pub fn mw( + &mut self, + addr: u32, + value: u32, + shard: u32, + timestamp: u32, + local_memory_access: Option<&mut HashMap>, + ) -> MemoryWriteRecord { // Get the memory record entry. let entry = self.state.memory.entry(addr); if self.executor_mode == ExecutorMode::Checkpoint || self.unconstrained { @@ -433,15 +468,40 @@ impl<'a> Executor<'a> { entry.insert(MemoryRecord { value: *value, shard: 0, timestamp: 0 }) } }; - let prev_value = record.value; - let prev_shard = record.shard; - let prev_timestamp = record.timestamp; + + let prev_record = *record; record.value = value; record.shard = shard; record.timestamp = timestamp; + if !self.unconstrained { + let local_memory_access = if let Some(local_memory_access) = local_memory_access { + local_memory_access + } else { + &mut self.local_memory_access + }; + + local_memory_access + .entry(addr) + .and_modify(|e| { + e.final_mem_access = *record; + }) + .or_insert(MemoryLocalEvent { + addr, + initial_mem_access: prev_record, + final_mem_access: *record, + }); + } + // Construct the memory write record. - MemoryWriteRecord::new(value, shard, timestamp, prev_value, prev_shard, prev_timestamp) + MemoryWriteRecord::new( + record.value, + record.shard, + record.timestamp, + prev_record.value, + prev_record.shard, + prev_record.timestamp, + ) } /// Read from memory, assuming that all addresses are aligned. @@ -450,7 +510,7 @@ impl<'a> Executor<'a> { assert_valid_memory_access!(addr, position); // Read the address from memory and create a memory read record. - let record = self.mr(addr, self.shard(), self.timestamp(&position)); + let record = self.mr(addr, self.shard(), self.timestamp(&position), None); // If we're not in unconstrained mode, record the access for the current cycle. if !self.unconstrained && self.executor_mode == ExecutorMode::Trace { @@ -475,7 +535,7 @@ impl<'a> Executor<'a> { assert_valid_memory_access!(addr, position); // Read the address from memory and create a memory read record. - let record = self.mw(addr, value, self.shard(), self.timestamp(&position)); + let record = self.mw(addr, value, self.shard(), self.timestamp(&position), None); // If we're not in unconstrained mode, record the access for the current cycle. if !self.unconstrained && self.executor_mode == ExecutorMode::Trace { @@ -522,7 +582,6 @@ impl<'a> Executor<'a> { fn emit_cpu( &mut self, shard: u32, - channel: u8, clk: u32, pc: u32, next_pc: u32, @@ -538,7 +597,6 @@ impl<'a> Executor<'a> { ) { let cpu_event = CpuEvent { shard, - channel, clk, pc, next_pc, @@ -565,6 +623,7 @@ impl<'a> Executor<'a> { }; self.record.cpu_events.push(cpu_event); + emit_cpu_dependencies(self, &cpu_event); } /// Emit an ALU event. @@ -573,7 +632,6 @@ impl<'a> Executor<'a> { lookup_id, shard: self.shard(), clk, - channel: self.channel(), opcode, a, b, @@ -604,11 +662,26 @@ impl<'a> Executor<'a> { } Opcode::DIVU | Opcode::REMU | Opcode::DIV | Opcode::REM => { self.record.divrem_events.push(event); + emit_divrem_dependencies(self, event); } _ => {} } } + fn emit_syscall( + &mut self, + clk: u32, + syscall_id: u32, + arg1: u32, + arg2: u32, + lookup_id: LookupId, + ) { + let syscall_event = + SyscallEvent { shard: self.shard(), clk, syscall_id, arg1, arg2, lookup_id }; + + self.record.syscall_events.push(syscall_event); + } + /// Fetch the destination register and input operand values for an ALU instruction. fn alu_rr(&mut self, instruction: &Instruction) -> (Register, u32, u32) { if !instruction.imm_c { @@ -942,6 +1015,9 @@ impl<'a> Executor<'a> { } let syscall_impl = self.get_syscall(syscall).cloned(); + if syscall.should_send() != 0 { + self.emit_syscall(clk, syscall.syscall_id(), b, c, syscall_lookup_id); + } let mut precompile_rt = SyscallContext::new(self); precompile_rt.syscall_lookup_id = syscall_lookup_id; let (precompile_next_pc, precompile_cycles, returned_exit_code) = @@ -949,7 +1025,7 @@ impl<'a> Executor<'a> { // Executing a syscall optionally returns a value to write to the t0 // register. If it returns None, we just keep the // syscall_id in t0. - let res = syscall_impl.execute(&mut precompile_rt, b, c); + let res = syscall_impl.execute(&mut precompile_rt, syscall, b, c); if let Some(val) = res { a = val; } else { @@ -1068,18 +1144,10 @@ impl<'a> Executor<'a> { // Update the clk to the next cycle. self.state.clk += 4; - let channel = self.channel(); - - // Update the channel to the next cycle. - if !self.unconstrained { - self.state.channel = (self.state.channel + 1) % NUM_BYTE_LOOKUP_CHANNELS; - } - // Emit the CPU event for this cycle. if self.executor_mode == ExecutorMode::Trace { self.emit_cpu( self.shard(), - channel, clk, pc, next_pc, @@ -1117,7 +1185,6 @@ impl<'a> Executor<'a> { if !self.unconstrained && self.max_syscall_cycles + self.state.clk >= self.shard_size { self.state.current_shard += 1; self.state.clk = 0; - self.state.channel = 0; self.bump_record(); } @@ -1141,6 +1208,11 @@ impl<'a> Executor<'a> { /// Bump the record. pub fn bump_record(&mut self) { + // Copy all of the existing local memory accesses to the record's local_memory_access vec. + for (_, event) in self.local_memory_access.drain() { + self.record.cpu_local_memory_access.push(event); + } + let removed_record = std::mem::replace(&mut self.record, ExecutionRecord::new(self.program.clone())); let public_values = removed_record.public_values; @@ -1204,7 +1276,6 @@ impl<'a> Executor<'a> { fn initialize(&mut self) { self.state.clk = 0; - self.state.channel = 0; tracing::debug!("loading memory image"); for (&addr, value) in &self.program.memory_image { @@ -1342,7 +1413,7 @@ impl<'a> Executor<'a> { } // SECTION: Set up all MemoryInitializeFinalizeEvents needed for memory argument. - let memory_finalize_events = &mut self.record.memory_finalize_events; + let memory_finalize_events = &mut self.record.global_memory_finalize_events; // We handle the addr = 0 case separately, as we constrain it to be 0 in the first row // of the memory finalize table so it must be first in the array of events. @@ -1355,7 +1426,7 @@ impl<'a> Executor<'a> { memory_finalize_events .push(MemoryInitializeFinalizeEvent::finalize_from_record(0, addr_0_final_record)); - let memory_initialize_events = &mut self.record.memory_initialize_events; + let memory_initialize_events = &mut self.record.global_memory_initialize_events; let addr_0_initialize_event = MemoryInitializeFinalizeEvent::initialize(0, 0, addr_0_record.is_some()); memory_initialize_events.push(addr_0_initialize_event); @@ -1419,10 +1490,6 @@ pub const fn align(addr: u32) -> u32 { addr - addr % 4 } -// TODO: FIX -/// The number of different byte lookup channels. -pub const NUM_BYTE_LOOKUP_CHANNELS: u8 = 16; - #[cfg(test)] mod tests { diff --git a/crates/core/executor/src/lib.rs b/crates/core/executor/src/lib.rs index a5c1941dbd..a4b6a06ced 100644 --- a/crates/core/executor/src/lib.rs +++ b/crates/core/executor/src/lib.rs @@ -20,6 +20,7 @@ #![warn(missing_docs)] mod context; +mod dependencies; mod disassembler; pub mod events; mod executor; @@ -53,3 +54,4 @@ pub use register::*; pub use report::*; pub use shape::*; pub use state::*; +pub use utils::*; diff --git a/crates/core/executor/src/record.rs b/crates/core/executor/src/record.rs index 4241e3074a..c747a557a5 100644 --- a/crates/core/executor/src/record.rs +++ b/crates/core/executor/src/record.rs @@ -5,20 +5,19 @@ use sp1_stark::{ air::{MachineAir, PublicValues}, MachineRecord, SP1CoreOpts, SplitOpts, }; -use std::sync::Arc; +use std::{mem::take, sync::Arc}; use serde::{Deserialize, Serialize}; use super::{program::Program, Opcode}; use crate::{ events::{ - add_sharded_byte_lookup_events, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, - EdDecompressEvent, EllipticCurveAddEvent, EllipticCurveDecompressEvent, - EllipticCurveDoubleEvent, Fp2AddSubEvent, Fp2MulEvent, FpOpEvent, KeccakPermuteEvent, - LookupId, MemoryInitializeFinalizeEvent, MemoryRecordEnum, ShaCompressEvent, - ShaExtendEvent, Uint256MulEvent, + add_sharded_byte_lookup_events, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, LookupId, + MemoryInitializeFinalizeEvent, MemoryLocalEvent, MemoryRecordEnum, PrecompileEvent, + PrecompileEvents, SyscallEvent, }, - shape::CoreShape, + syscalls::SyscallCode, + CoreShape, }; /// A record of the execution of a program. @@ -48,50 +47,16 @@ pub struct ExecutionRecord { pub lt_events: Vec, /// A trace of the byte lookups that are needed. pub byte_lookups: HashMap>, - /// A trace of the sha256 extend events. - pub sha_extend_events: Vec, - /// A trace of the sha256 compress events. - pub sha_compress_events: Vec, - /// A trace of the keccak256 permute events. - pub keccak_permute_events: Vec, - /// A trace of the edwards add events. - pub ed_add_events: Vec, - /// A trace of the edwards decompress events. - pub ed_decompress_events: Vec, - /// A trace of the secp256k1 add events. - pub secp256k1_add_events: Vec, - /// A trace of the secp256k1 double events. - pub secp256k1_double_events: Vec, - /// A trace of the bn254 add events. - pub bn254_add_events: Vec, - /// A trace of the bn254 double events. - pub bn254_double_events: Vec, - /// A trace of the k256 decompress events. - pub k256_decompress_events: Vec, - /// A trace of the bls12381 add events. - pub bls12381_add_events: Vec, - /// A trace of the bls12381 double events. - pub bls12381_double_events: Vec, - /// A trace of the uint256 mul events. - pub uint256_mul_events: Vec, - /// A trace of the memory initialize events. - pub memory_initialize_events: Vec, - /// A trace of the memory finalize events. - pub memory_finalize_events: Vec, - /// A trace of the bls12381 decompress events. - pub bls12381_decompress_events: Vec, - /// A trace of the bls12381 fp events. - pub bls12381_fp_events: Vec, - /// A trace of the bls12381 fp2 add/sub events. - pub bls12381_fp2_addsub_events: Vec, - /// A trace of the bls12381 fp2 mul events. - pub bls12381_fp2_mul_events: Vec, - /// A trace of the bn254 fp events. - pub bn254_fp_events: Vec, - /// A trace of the bn254 fp2 add/sub events. - pub bn254_fp2_addsub_events: Vec, - /// A trace of the bn254 fp2 mul events. - pub bn254_fp2_mul_events: Vec, + /// A trace of the precompile events. + pub precompile_events: PrecompileEvents, + /// A trace of the global memory initialize events. + pub global_memory_initialize_events: Vec, + /// A trace of the global memory finalize events. + pub global_memory_finalize_events: Vec, + /// A trace of all the shard's local memory events. + pub cpu_local_memory_access: Vec, + /// A trace of all the syscall events. + pub syscall_events: Vec, /// The public values. pub public_values: PublicValues, /// The nonce lookup. @@ -155,31 +120,13 @@ impl ExecutionRecord { /// included in every shard. #[must_use] pub fn defer(&mut self) -> ExecutionRecord { - ExecutionRecord { - keccak_permute_events: std::mem::take(&mut self.keccak_permute_events), - secp256k1_add_events: std::mem::take(&mut self.secp256k1_add_events), - secp256k1_double_events: std::mem::take(&mut self.secp256k1_double_events), - bn254_fp_events: std::mem::take(&mut self.bn254_fp_events), - bn254_fp2_addsub_events: std::mem::take(&mut self.bn254_fp2_addsub_events), - bn254_fp2_mul_events: std::mem::take(&mut self.bn254_fp2_mul_events), - bn254_add_events: std::mem::take(&mut self.bn254_add_events), - bn254_double_events: std::mem::take(&mut self.bn254_double_events), - bls12381_add_events: std::mem::take(&mut self.bls12381_add_events), - bls12381_double_events: std::mem::take(&mut self.bls12381_double_events), - sha_extend_events: std::mem::take(&mut self.sha_extend_events), - sha_compress_events: std::mem::take(&mut self.sha_compress_events), - ed_add_events: std::mem::take(&mut self.ed_add_events), - ed_decompress_events: std::mem::take(&mut self.ed_decompress_events), - k256_decompress_events: std::mem::take(&mut self.k256_decompress_events), - uint256_mul_events: std::mem::take(&mut self.uint256_mul_events), - bls12381_fp_events: std::mem::take(&mut self.bls12381_fp_events), - bls12381_fp2_addsub_events: std::mem::take(&mut self.bls12381_fp2_addsub_events), - bls12381_fp2_mul_events: std::mem::take(&mut self.bls12381_fp2_mul_events), - bls12381_decompress_events: std::mem::take(&mut self.bls12381_decompress_events), - memory_initialize_events: std::mem::take(&mut self.memory_initialize_events), - memory_finalize_events: std::mem::take(&mut self.memory_finalize_events), - ..Default::default() - } + let mut execution_record = ExecutionRecord::new(self.program.clone()); + execution_record.precompile_events = std::mem::take(&mut self.precompile_events); + execution_record.global_memory_initialize_events = + std::mem::take(&mut self.global_memory_initialize_events); + execution_record.global_memory_finalize_events = + std::mem::take(&mut self.global_memory_finalize_events); + execution_record } /// Splits the deferred [`ExecutionRecord`] into multiple [`ExecutionRecord`]s, each which @@ -187,67 +134,50 @@ impl ExecutionRecord { pub fn split(&mut self, last: bool, opts: SplitOpts) -> Vec { let mut shards = Vec::new(); - macro_rules! split_events { - ($self:ident, $events:ident, $shards:ident, $threshold:expr, $exact:expr) => { - let events = std::mem::take(&mut $self.$events); - let chunks = events.chunks_exact($threshold); - if !$exact { - $self.$events = chunks.remainder().to_vec(); - } else { - let remainder = chunks.remainder().to_vec(); - if !remainder.is_empty() { - $shards.push(ExecutionRecord { - $events: chunks.remainder().to_vec(), - program: self.program.clone(), - ..Default::default() - }); - } - } - let mut event_shards = chunks - .map(|chunk| ExecutionRecord { - $events: chunk.to_vec(), - program: self.program.clone(), - ..Default::default() - }) - .collect::>(); - $shards.append(&mut event_shards); + let precompile_events = take(&mut self.precompile_events); + + for (syscall_code, events) in precompile_events.into_iter() { + let threshold = match syscall_code { + SyscallCode::KECCAK_PERMUTE => opts.keccak, + SyscallCode::SHA_EXTEND => opts.sha_extend, + SyscallCode::SHA_COMPRESS => opts.sha_compress, + _ => opts.deferred, }; - } - split_events!(self, keccak_permute_events, shards, opts.keccak, last); - split_events!(self, secp256k1_add_events, shards, opts.deferred, last); - split_events!(self, secp256k1_double_events, shards, opts.deferred, last); - split_events!(self, bn254_add_events, shards, opts.deferred, last); - split_events!(self, bn254_double_events, shards, opts.deferred, last); - split_events!(self, bls12381_add_events, shards, opts.deferred, last); - split_events!(self, bls12381_double_events, shards, opts.deferred, last); - split_events!(self, sha_extend_events, shards, opts.sha_extend, last); - split_events!(self, sha_compress_events, shards, opts.sha_compress, last); - split_events!(self, ed_add_events, shards, opts.deferred, last); - split_events!(self, ed_decompress_events, shards, opts.deferred, last); - split_events!(self, k256_decompress_events, shards, opts.deferred, last); - split_events!(self, uint256_mul_events, shards, opts.deferred, last); - split_events!(self, bls12381_decompress_events, shards, opts.deferred, last); - split_events!(self, bls12381_fp_events, shards, opts.deferred, last); - split_events!(self, bls12381_fp2_addsub_events, shards, opts.deferred, last); - split_events!(self, bls12381_fp2_mul_events, shards, opts.deferred, last); - split_events!(self, bn254_fp_events, shards, opts.deferred, last); - split_events!(self, bn254_fp2_addsub_events, shards, opts.deferred, last); - split_events!(self, bn254_fp2_mul_events, shards, opts.deferred, last); + let chunks = events.chunks_exact(threshold); + if last { + let remainder = chunks.remainder().to_vec(); + if !remainder.is_empty() { + let mut execution_record = ExecutionRecord::new(self.program.clone()); + execution_record.precompile_events.insert(syscall_code, remainder); + shards.push(execution_record); + } + } else { + self.precompile_events.insert(syscall_code, chunks.remainder().to_vec()); + } + let mut event_shards = chunks + .map(|chunk| { + let mut execution_record = ExecutionRecord::new(self.program.clone()); + execution_record.precompile_events.insert(syscall_code, chunk.to_vec()); + execution_record + }) + .collect::>(); + shards.append(&mut event_shards); + } // _ = last_pct; if last { // shards.push(last_shard); - self.memory_initialize_events.sort_by_key(|event| event.addr); - self.memory_finalize_events.sort_by_key(|event| event.addr); + self.global_memory_initialize_events.sort_by_key(|event| event.addr); + self.global_memory_finalize_events.sort_by_key(|event| event.addr); let mut init_addr_bits = [0; 32]; let mut finalize_addr_bits = [0; 32]; for mem_chunks in self - .memory_initialize_events + .global_memory_initialize_events .chunks(opts.memory) - .zip_longest(self.memory_finalize_events.chunks(opts.memory)) + .zip_longest(self.global_memory_finalize_events.chunks(opts.memory)) { let (mem_init_chunk, mem_finalize_chunk) = match mem_chunks { EitherOrBoth::Both(mem_init_chunk, mem_finalize_chunk) => { @@ -256,9 +186,8 @@ impl ExecutionRecord { EitherOrBoth::Left(mem_init_chunk) => (mem_init_chunk, [].as_slice()), EitherOrBoth::Right(mem_finalize_chunk) => ([].as_slice(), mem_finalize_chunk), }; - let mut shard = ExecutionRecord::default(); - shard.program = self.program.clone(); - shard.memory_initialize_events.extend_from_slice(mem_init_chunk); + let mut shard = ExecutionRecord::new(self.program.clone()); + shard.global_memory_initialize_events.extend_from_slice(mem_init_chunk); shard.public_values.previous_init_addr_bits = init_addr_bits; if let Some(last_event) = mem_init_chunk.last() { let last_init_addr_bits = core::array::from_fn(|i| (last_event.addr >> i) & 1); @@ -266,7 +195,7 @@ impl ExecutionRecord { } shard.public_values.last_init_addr_bits = init_addr_bits; - shard.memory_finalize_events.extend_from_slice(mem_finalize_chunk); + shard.global_memory_finalize_events.extend_from_slice(mem_finalize_chunk); shard.public_values.previous_finalize_addr_bits = finalize_addr_bits; if let Some(last_event) = mem_finalize_chunk.last() { let last_finalize_addr_bits = @@ -299,6 +228,26 @@ impl ExecutionRecord { pub fn contains_cpu(&self) -> bool { !self.cpu_events.is_empty() } + + #[inline] + /// Add a precompile event to the execution record. + pub fn add_precompile_event(&mut self, syscall_code: SyscallCode, event: PrecompileEvent) { + self.precompile_events.add_event(syscall_code, event); + } + + /// Get all the precompile events for a syscall code. + #[inline] + #[must_use] + pub fn get_precompile_events(&self, syscall_code: SyscallCode) -> &Vec { + self.precompile_events.get_events(syscall_code) + } + + /// Get all the local memory events. + #[inline] + pub fn get_local_mem_events(&self) -> impl Iterator { + let precompile_local_mem_events = self.precompile_events.get_local_mem_events(); + precompile_local_mem_events.chain(self.cpu_local_memory_access.iter()) + } } /// A memory access record. @@ -328,34 +277,20 @@ impl MachineRecord for ExecutionRecord { stats.insert("shift_right_events".to_string(), self.shift_right_events.len()); stats.insert("divrem_events".to_string(), self.divrem_events.len()); stats.insert("lt_events".to_string(), self.lt_events.len()); - stats.insert("sha_extend_events".to_string(), self.sha_extend_events.len()); - stats.insert("sha_compress_events".to_string(), self.sha_compress_events.len()); - stats.insert("keccak_permute_events".to_string(), self.keccak_permute_events.len()); - stats.insert("ed_add_events".to_string(), self.ed_add_events.len()); - stats.insert("ed_decompress_events".to_string(), self.ed_decompress_events.len()); - stats.insert("secp256k1_add_events".to_string(), self.secp256k1_add_events.len()); - stats.insert("secp256k1_double_events".to_string(), self.secp256k1_double_events.len()); - stats.insert("bn254_add_events".to_string(), self.bn254_add_events.len()); - stats.insert("bn254_double_events".to_string(), self.bn254_double_events.len()); - stats.insert("k256_decompress_events".to_string(), self.k256_decompress_events.len()); - stats.insert("bls12381_add_events".to_string(), self.bls12381_add_events.len()); - stats.insert("bls12381_double_events".to_string(), self.bls12381_double_events.len()); - stats.insert("uint256_mul_events".to_string(), self.uint256_mul_events.len()); - stats.insert("bls12381_fp_event".to_string(), self.bls12381_fp_events.len()); + + for (syscall_code, events) in self.precompile_events.iter() { + stats.insert(format!("syscall {syscall_code:?}"), events.len()); + } + stats.insert( - "bls12381_fp2_addsub_events".to_string(), - self.bls12381_fp2_addsub_events.len(), + "global_memory_initialize_events".to_string(), + self.global_memory_initialize_events.len(), ); - stats.insert("bls12381_fp2_mul_events".to_string(), self.bls12381_fp2_mul_events.len()); - stats.insert("bn254_fp_events".to_string(), self.bn254_fp_events.len()); - stats.insert("bn254_fp2_addsub_events".to_string(), self.bn254_fp2_addsub_events.len()); - stats.insert("bn254_fp2_mul_events".to_string(), self.bn254_fp2_mul_events.len()); stats.insert( - "bls12381_decompress_events".to_string(), - self.bls12381_decompress_events.len(), + "global_memory_finalize_events".to_string(), + self.global_memory_finalize_events.len(), ); - stats.insert("memory_initialize_events".to_string(), self.memory_initialize_events.len()); - stats.insert("memory_finalize_events".to_string(), self.memory_finalize_events.len()); + stats.insert("local_memory_access_events".to_string(), self.cpu_local_memory_access.len()); if !self.cpu_events.is_empty() { let shard = self.cpu_events[0].shard; stats.insert( @@ -378,28 +313,9 @@ impl MachineRecord for ExecutionRecord { self.shift_right_events.append(&mut other.shift_right_events); self.divrem_events.append(&mut other.divrem_events); self.lt_events.append(&mut other.lt_events); - self.sha_extend_events.append(&mut other.sha_extend_events); - self.sha_compress_events.append(&mut other.sha_compress_events); - self.keccak_permute_events.append(&mut other.keccak_permute_events); - self.ed_add_events.append(&mut other.ed_add_events); - self.ed_decompress_events.append(&mut other.ed_decompress_events); - self.secp256k1_add_events.append(&mut other.secp256k1_add_events); - self.secp256k1_double_events.append(&mut other.secp256k1_double_events); - self.bn254_add_events.append(&mut other.bn254_add_events); - self.bn254_double_events.append(&mut other.bn254_double_events); - self.k256_decompress_events.append(&mut other.k256_decompress_events); - self.bls12381_add_events.append(&mut other.bls12381_add_events); - self.bls12381_double_events.append(&mut other.bls12381_double_events); - self.uint256_mul_events.append(&mut other.uint256_mul_events); - self.bls12381_fp_events.append(&mut other.bls12381_fp_events); - self.bls12381_fp2_addsub_events.append(&mut other.bls12381_fp2_addsub_events); - self.bls12381_fp2_mul_events.append(&mut other.bls12381_fp2_mul_events); - self.bn254_fp_events.append(&mut other.bn254_fp_events); - self.bn254_fp2_addsub_events.append(&mut other.bn254_fp2_addsub_events); - self.bn254_fp2_mul_events.append(&mut other.bn254_fp2_mul_events); - self.bls12381_decompress_events.append(&mut other.bls12381_decompress_events); - - self.bls12381_decompress_events.append(&mut other.bls12381_decompress_events); + self.syscall_events.append(&mut other.syscall_events); + + self.precompile_events.append(&mut other.precompile_events); if self.byte_lookups.is_empty() { self.byte_lookups = std::mem::take(&mut other.byte_lookups); @@ -407,8 +323,9 @@ impl MachineRecord for ExecutionRecord { self.add_sharded_byte_lookup_events(vec![&other.byte_lookups]); } - self.memory_initialize_events.append(&mut other.memory_initialize_events); - self.memory_finalize_events.append(&mut other.memory_finalize_events); + self.global_memory_initialize_events.append(&mut other.global_memory_initialize_events); + self.global_memory_finalize_events.append(&mut other.global_memory_finalize_events); + self.cpu_local_memory_access.append(&mut other.cpu_local_memory_access); } fn register_nonces(&mut self, _opts: &Self::Config) { diff --git a/crates/core/executor/src/state.rs b/crates/core/executor/src/state.rs index 614a6147d5..775bf72f4d 100644 --- a/crates/core/executor/src/state.rs +++ b/crates/core/executor/src/state.rs @@ -30,10 +30,6 @@ pub struct ExecutionState { /// executed in this shard. pub clk: u32, - /// The channel alternates between 0 and [`crate::bytes::NUM_BYTE_LOOKUP_CHANNELS`], - /// used to controll byte lookup multiplicity. - pub channel: u8, - /// The program counter. pub pc: u32, @@ -82,7 +78,6 @@ impl ExecutionState { // Start at shard 1 since shard 0 is reserved for memory initialization. current_shard: 1, clk: 0, - channel: 0, pc: pc_start, memory: PagedMemory::new_preallocated(), uninitialized_memory: HashMap::default(), diff --git a/crates/core/executor/src/syscalls/commit.rs b/crates/core/executor/src/syscalls/commit.rs index 89c462a3d4..2772fb6208 100644 --- a/crates/core/executor/src/syscalls/commit.rs +++ b/crates/core/executor/src/syscalls/commit.rs @@ -1,4 +1,4 @@ -use super::{Syscall, SyscallContext}; +use super::{Syscall, SyscallCode, SyscallContext}; pub(crate) struct CommitSyscall; @@ -7,6 +7,7 @@ impl Syscall for CommitSyscall { fn execute( &self, ctx: &mut SyscallContext, + _: SyscallCode, word_idx: u32, public_values_digest_word: u32, ) -> Option { diff --git a/crates/core/executor/src/syscalls/context.rs b/crates/core/executor/src/syscalls/context.rs index 60c93e478b..9db49c5cae 100644 --- a/crates/core/executor/src/syscalls/context.rs +++ b/crates/core/executor/src/syscalls/context.rs @@ -1,5 +1,7 @@ +use hashbrown::HashMap; + use crate::{ - events::{LookupId, MemoryReadRecord, MemoryWriteRecord}, + events::{LookupId, MemoryLocalEvent, MemoryReadRecord, MemoryWriteRecord}, record::ExecutionRecord, Executor, Register, }; @@ -20,6 +22,8 @@ pub struct SyscallContext<'a, 'b: 'a> { pub rt: &'a mut Executor<'b>, /// The syscall lookup id. pub syscall_lookup_id: LookupId, + /// The local memory access events for the syscall. + pub local_memory_access: HashMap, } impl<'a, 'b> SyscallContext<'a, 'b> { @@ -34,6 +38,7 @@ impl<'a, 'b> SyscallContext<'a, 'b> { exit_code: 0, rt: runtime, syscall_lookup_id: LookupId::default(), + local_memory_access: HashMap::new(), } } @@ -48,15 +53,10 @@ impl<'a, 'b> SyscallContext<'a, 'b> { self.rt.state.current_shard } - /// Get the current channel. - #[must_use] - pub fn current_channel(&self) -> u8 { - self.rt.state.channel - } - /// Read a word from memory. pub fn mr(&mut self, addr: u32) -> (MemoryReadRecord, u32) { - let record = self.rt.mr(addr, self.current_shard, self.clk); + let record = + self.rt.mr(addr, self.current_shard, self.clk, Some(&mut self.local_memory_access)); (record, record.value) } @@ -74,7 +74,7 @@ impl<'a, 'b> SyscallContext<'a, 'b> { /// Write a word to memory. pub fn mw(&mut self, addr: u32, value: u32) -> MemoryWriteRecord { - self.rt.mw(addr, value, self.current_shard, self.clk) + self.rt.mw(addr, value, self.current_shard, self.clk, Some(&mut self.local_memory_access)) } /// Write a slice of words to memory. @@ -87,6 +87,28 @@ impl<'a, 'b> SyscallContext<'a, 'b> { records } + /// Postprocess the syscall. Specifically will process the syscall's memory local events. + pub fn postprocess(&mut self) -> Vec { + let mut syscall_local_mem_events = Vec::new(); + + if !self.rt.unconstrained { + // Will need to transfer the existing memory local events in the executor to it's record, + // and return all the syscall memory local events. This is similar to what + // `bump_record` does. + for (addr, event) in self.local_memory_access.drain() { + let local_mem_access = self.rt.local_memory_access.remove(&addr); + + if let Some(local_mem_access) = local_mem_access { + self.rt.record.cpu_local_memory_access.push(local_mem_access); + } + + syscall_local_mem_events.push(event); + } + } + + syscall_local_mem_events + } + /// Get the current value of a register, but doesn't use a memory record. /// This is generally unconstrained, so you must be careful using it. #[must_use] diff --git a/crates/core/executor/src/syscalls/deferred.rs b/crates/core/executor/src/syscalls/deferred.rs index d8f5167f58..a1045f93d5 100644 --- a/crates/core/executor/src/syscalls/deferred.rs +++ b/crates/core/executor/src/syscalls/deferred.rs @@ -1,10 +1,16 @@ -use super::{Syscall, SyscallContext}; +use super::{Syscall, SyscallCode, SyscallContext}; pub(crate) struct CommitDeferredSyscall; impl Syscall for CommitDeferredSyscall { #[allow(clippy::mut_mut)] - fn execute(&self, ctx: &mut SyscallContext, word_idx: u32, word: u32) -> Option { + fn execute( + &self, + ctx: &mut SyscallContext, + _: SyscallCode, + word_idx: u32, + word: u32, + ) -> Option { let rt = &mut ctx.rt; rt.record.public_values.deferred_proofs_digest[word_idx as usize] = word; diff --git a/crates/core/executor/src/syscalls/halt.rs b/crates/core/executor/src/syscalls/halt.rs index 5488be00e3..e09690caad 100644 --- a/crates/core/executor/src/syscalls/halt.rs +++ b/crates/core/executor/src/syscalls/halt.rs @@ -1,9 +1,15 @@ -use super::{context::SyscallContext, Syscall}; +use super::{context::SyscallContext, Syscall, SyscallCode}; pub(crate) struct HaltSyscall; impl Syscall for HaltSyscall { - fn execute(&self, ctx: &mut SyscallContext, exit_code: u32, _: u32) -> Option { + fn execute( + &self, + ctx: &mut SyscallContext, + _: SyscallCode, + exit_code: u32, + _: u32, + ) -> Option { ctx.set_next_pc(0); ctx.set_exit_code(exit_code); None diff --git a/crates/core/executor/src/syscalls/hint.rs b/crates/core/executor/src/syscalls/hint.rs index 8f0b7f0b92..89b19a57f4 100644 --- a/crates/core/executor/src/syscalls/hint.rs +++ b/crates/core/executor/src/syscalls/hint.rs @@ -1,9 +1,15 @@ -use super::{Syscall, SyscallContext}; +use super::{Syscall, SyscallCode, SyscallContext}; pub(crate) struct HintLenSyscall; impl Syscall for HintLenSyscall { - fn execute(&self, ctx: &mut SyscallContext, _arg1: u32, _arg2: u32) -> Option { + fn execute( + &self, + ctx: &mut SyscallContext, + _: SyscallCode, + _arg1: u32, + _arg2: u32, + ) -> Option { if ctx.rt.state.input_stream_ptr >= ctx.rt.state.input_stream.len() { panic!( "failed reading stdin due to insufficient input data: input_stream_ptr={}, input_stream_len={}", @@ -18,7 +24,7 @@ impl Syscall for HintLenSyscall { pub(crate) struct HintReadSyscall; impl Syscall for HintReadSyscall { - fn execute(&self, ctx: &mut SyscallContext, ptr: u32, len: u32) -> Option { + fn execute(&self, ctx: &mut SyscallContext, _: SyscallCode, ptr: u32, len: u32) -> Option { if ctx.rt.state.input_stream_ptr >= ctx.rt.state.input_stream.len() { panic!( "failed reading stdin due to insufficient input data: input_stream_ptr={}, input_stream_len={}", diff --git a/crates/core/executor/src/syscalls/mod.rs b/crates/core/executor/src/syscalls/mod.rs index da24a3ab49..6633633102 100644 --- a/crates/core/executor/src/syscalls/mod.rs +++ b/crates/core/executor/src/syscalls/mod.rs @@ -57,7 +57,13 @@ pub trait Syscall: Send + Sync { /// X10 and X11, respectively. While not a hard requirement, the convention is that the return /// value is only for system calls such as `HALT`. Most precompiles use `arg1` and `arg2` to /// denote the addresses of the input data, and write the result to the memory at `arg1`. - fn execute(&self, ctx: &mut SyscallContext, arg1: u32, arg2: u32) -> Option; + fn execute( + &self, + ctx: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option; /// The number of extra cycles that the syscall takes to execute. /// diff --git a/crates/core/executor/src/syscalls/precompiles/edwards/add.rs b/crates/core/executor/src/syscalls/precompiles/edwards/add.rs index 3074392b64..a883848ece 100644 --- a/crates/core/executor/src/syscalls/precompiles/edwards/add.rs +++ b/crates/core/executor/src/syscalls/precompiles/edwards/add.rs @@ -3,8 +3,8 @@ use std::marker::PhantomData; use sp1_curves::{edwards::EdwardsParameters, EllipticCurve}; use crate::{ - events::create_ec_add_event, - syscalls::{Syscall, SyscallContext}, + events::{create_ec_add_event, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub(crate) struct EdwardsAddAssignSyscall { @@ -23,9 +23,15 @@ impl Syscall for EdwardsAddAssignSyscall Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let event = create_ec_add_event::(rt, arg1, arg2); - rt.record_mut().ed_add_events.push(event); + rt.record_mut().add_precompile_event(syscall_code, PrecompileEvent::EdAdd(event)); None } } diff --git a/crates/core/executor/src/syscalls/precompiles/edwards/decompress.rs b/crates/core/executor/src/syscalls/precompiles/edwards/decompress.rs index e4d90a87b0..90884a91bb 100644 --- a/crates/core/executor/src/syscalls/precompiles/edwards/decompress.rs +++ b/crates/core/executor/src/syscalls/precompiles/edwards/decompress.rs @@ -8,8 +8,8 @@ use sp1_curves::{ use sp1_primitives::consts::{bytes_to_words_le, words_to_bytes_le}; use crate::{ - events::{EdDecompressEvent, MemoryReadRecord, MemoryWriteRecord}, - syscalls::{Syscall, SyscallContext}, + events::{EdDecompressEvent, MemoryReadRecord, MemoryWriteRecord, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub(crate) struct EdwardsDecompressSyscall { @@ -24,7 +24,13 @@ impl EdwardsDecompressSyscall { } impl Syscall for EdwardsDecompressSyscall { - fn execute(&self, rt: &mut SyscallContext, arg1: u32, sign: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + sign: u32, + ) -> Option { let start_clk = rt.clk; let slice_ptr = arg1; assert!(slice_ptr % 4 == 0, "Pointer must be 4-byte aligned."); @@ -60,11 +66,9 @@ impl Syscall for EdwardsDecompressSyscall { let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); - let channel = rt.current_channel(); - rt.record_mut().ed_decompress_events.push(EdDecompressEvent { + let event = EdDecompressEvent { lookup_id, shard, - channel, clk: start_clk, ptr: slice_ptr, sign: sign_bool, @@ -72,7 +76,9 @@ impl Syscall for EdwardsDecompressSyscall { decompressed_x_bytes: decompressed_x_bytes.try_into().unwrap(), x_memory_records, y_memory_records, - }); + local_mem_access: rt.postprocess(), + }; + rt.record_mut().add_precompile_event(syscall_code, PrecompileEvent::EdDecompress(event)); None } diff --git a/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs b/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs index 703efa87a5..181030f090 100644 --- a/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs +++ b/crates/core/executor/src/syscalls/precompiles/fptower/fp.rs @@ -7,8 +7,8 @@ use std::marker::PhantomData; use typenum::Unsigned; use crate::{ - events::{FieldOperation, FpOpEvent}, - syscalls::{Syscall, SyscallContext}, + events::{FieldOperation, FpOpEvent, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub struct FpOpSyscall

{ @@ -23,7 +23,13 @@ impl

FpOpSyscall

{ } impl Syscall for FpOpSyscall

{ - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let clk = rt.clk; let x_ptr = arg1; if x_ptr % 4 != 0 { @@ -57,37 +63,47 @@ impl Syscall for FpOpSyscall

{ let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); - let channel = rt.current_channel(); + let event = FpOpEvent { + lookup_id, + shard, + clk, + x_ptr, + x, + y_ptr, + y, + op: self.op, + x_memory_records, + y_memory_records, + local_mem_access: rt.postprocess(), + }; + + // Since all the Fp events are on the same table, we need to preserve the ordering of the + // events b/c of the nonce. In this table's trace_gen, the nonce is simply the row number. + // Group all of the events for a specific curve into the same syscall code key. + // TODO: FIX THIS. + match P::FIELD_TYPE { FieldType::Bn254 => { - rt.record_mut().bn254_fp_events.push(FpOpEvent { - lookup_id, - shard, - channel, - clk, - x_ptr, - x, - y_ptr, - y, - op: self.op, - x_memory_records, - y_memory_records, - }); + let syscall_code_key = match syscall_code { + SyscallCode::BN254_FP_ADD + | SyscallCode::BN254_FP_SUB + | SyscallCode::BN254_FP_MUL => SyscallCode::BN254_FP_ADD, + _ => unreachable!(), + }; + + rt.record_mut() + .add_precompile_event(syscall_code_key, PrecompileEvent::Bn254Fp(event)); } FieldType::Bls12381 => { - rt.record_mut().bls12381_fp_events.push(FpOpEvent { - lookup_id, - shard, - channel, - clk, - x_ptr, - x, - y_ptr, - y, - op: self.op, - x_memory_records, - y_memory_records, - }); + let syscall_code_key = match syscall_code { + SyscallCode::BLS12381_FP_ADD + | SyscallCode::BLS12381_FP_SUB + | SyscallCode::BLS12381_FP_MUL => SyscallCode::BLS12381_FP_ADD, + _ => unreachable!(), + }; + + rt.record_mut() + .add_precompile_event(syscall_code_key, PrecompileEvent::Bls12381Fp(event)); } } diff --git a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs index 548566d61c..9263d466e5 100644 --- a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs +++ b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_addsub.rs @@ -7,8 +7,8 @@ use std::marker::PhantomData; use typenum::Unsigned; use crate::{ - events::{FieldOperation, Fp2AddSubEvent}, - syscalls::{Syscall, SyscallContext}, + events::{FieldOperation, Fp2AddSubEvent, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub struct Fp2AddSubSyscall

{ @@ -23,7 +23,13 @@ impl

Fp2AddSubSyscall

{ } impl Syscall for Fp2AddSubSyscall

{ - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let clk = rt.clk; let x_ptr = arg1; if x_ptr % 4 != 0 { @@ -65,38 +71,47 @@ impl Syscall for Fp2AddSubSyscall

{ let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); - let channel = rt.current_channel(); let op = self.op; + let event = Fp2AddSubEvent { + lookup_id, + shard, + clk, + op, + x_ptr, + x, + y_ptr, + y, + x_memory_records, + y_memory_records, + local_mem_access: rt.postprocess(), + }; match P::FIELD_TYPE { + // All the fp2 add and sub events for a given curve are coalesced to the curve's fp2 add operation. Only check for + // that operation. + // TODO: Fix this. FieldType::Bn254 => { - rt.record_mut().bn254_fp2_addsub_events.push(Fp2AddSubEvent { - lookup_id, - shard, - channel, - clk, - op, - x_ptr, - x, - y_ptr, - y, - x_memory_records, - y_memory_records, - }); + let syscall_code_key = match syscall_code { + SyscallCode::BN254_FP2_ADD | SyscallCode::BN254_FP2_SUB => { + SyscallCode::BN254_FP2_ADD + } + _ => unreachable!(), + }; + + rt.record_mut() + .add_precompile_event(syscall_code_key, PrecompileEvent::Bn254Fp2AddSub(event)); } FieldType::Bls12381 => { - rt.record_mut().bls12381_fp2_addsub_events.push(Fp2AddSubEvent { - lookup_id, - shard, - channel, - clk, - op, - x_ptr, - x, - y_ptr, - y, - x_memory_records, - y_memory_records, - }); + let syscall_code_key = match syscall_code { + SyscallCode::BLS12381_FP2_ADD | SyscallCode::BLS12381_FP2_SUB => { + SyscallCode::BLS12381_FP2_ADD + } + _ => unreachable!(), + }; + + rt.record_mut().add_precompile_event( + syscall_code_key, + PrecompileEvent::Bls12381Fp2AddSub(event), + ); } } None diff --git a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs index 652bba0037..4bfae253ab 100644 --- a/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs +++ b/crates/core/executor/src/syscalls/precompiles/fptower/fp2_mul.rs @@ -8,8 +8,8 @@ use sp1_curves::{ use typenum::Unsigned; use crate::{ - events::Fp2MulEvent, - syscalls::{Syscall, SyscallContext}, + events::{Fp2MulEvent, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub struct Fp2MulSyscall

{ @@ -23,7 +23,13 @@ impl

Fp2MulSyscall

{ } impl Syscall for Fp2MulSyscall

{ - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let clk = rt.clk; let x_ptr = arg1; if x_ptr % 4 != 0 { @@ -64,32 +70,25 @@ impl Syscall for Fp2MulSyscall

{ let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); - let channel = rt.current_channel(); + let event = Fp2MulEvent { + lookup_id, + shard, + clk, + x_ptr, + x, + y_ptr, + y, + x_memory_records, + y_memory_records, + local_mem_access: rt.postprocess(), + }; match P::FIELD_TYPE { - FieldType::Bn254 => rt.record_mut().bn254_fp2_mul_events.push(Fp2MulEvent { - lookup_id, - shard, - channel, - clk, - x_ptr, - x, - y_ptr, - y, - x_memory_records, - y_memory_records, - }), - FieldType::Bls12381 => rt.record_mut().bls12381_fp2_mul_events.push(Fp2MulEvent { - lookup_id, - shard, - channel, - clk, - x_ptr, - x, - y_ptr, - y, - x_memory_records, - y_memory_records, - }), + FieldType::Bn254 => rt + .record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Bn254Fp2Mul(event)), + FieldType::Bls12381 => rt + .record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Bls12381Fp2Mul(event)), }; None } diff --git a/crates/core/executor/src/syscalls/precompiles/keccak256/permute.rs b/crates/core/executor/src/syscalls/precompiles/keccak256/permute.rs index 70c64950dd..0b668e87a8 100644 --- a/crates/core/executor/src/syscalls/precompiles/keccak256/permute.rs +++ b/crates/core/executor/src/syscalls/precompiles/keccak256/permute.rs @@ -1,6 +1,6 @@ use crate::{ - events::KeccakPermuteEvent, - syscalls::{Syscall, SyscallContext}, + events::{KeccakPermuteEvent, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; use tiny_keccak::keccakf; @@ -17,7 +17,13 @@ impl Syscall for Keccak256PermuteSyscall { 1 } - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let start_clk = rt.clk; let state_ptr = arg1; if arg2 != 0 { @@ -58,19 +64,19 @@ impl Syscall for Keccak256PermuteSyscall { // Push the Keccak permute event. let shard = rt.current_shard(); - let channel = rt.current_channel(); let lookup_id = rt.syscall_lookup_id; - rt.record_mut().keccak_permute_events.push(KeccakPermuteEvent { + let event = PrecompileEvent::KeccakPermute(KeccakPermuteEvent { lookup_id, shard, - channel, clk: start_clk, pre_state: saved_state.as_slice().try_into().unwrap(), post_state: state.as_slice().try_into().unwrap(), state_read_records, state_write_records, state_addr: state_ptr, + local_mem_access: rt.postprocess(), }); + rt.record_mut().add_precompile_event(syscall_code, event); None } diff --git a/crates/core/executor/src/syscalls/precompiles/sha256/compress.rs b/crates/core/executor/src/syscalls/precompiles/sha256/compress.rs index 1c8317cfc9..4fad4ff42e 100644 --- a/crates/core/executor/src/syscalls/precompiles/sha256/compress.rs +++ b/crates/core/executor/src/syscalls/precompiles/sha256/compress.rs @@ -1,6 +1,6 @@ use crate::{ - events::ShaCompressEvent, - syscalls::{Syscall, SyscallContext}, + events::{PrecompileEvent, ShaCompressEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub const SHA_COMPRESS_K: [u32; 64] = [ @@ -21,8 +21,15 @@ impl Syscall for Sha256CompressSyscall { 1 } + #[allow(clippy::too_many_lines)] #[allow(clippy::many_single_char_names)] - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let w_ptr = arg1; let h_ptr = arg2; assert_ne!(w_ptr, h_ptr); @@ -88,11 +95,9 @@ impl Syscall for Sha256CompressSyscall { // Push the SHA extend event. let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); - let channel = rt.current_channel(); - rt.record_mut().sha_compress_events.push(ShaCompressEvent { + let event = PrecompileEvent::ShaCompress(ShaCompressEvent { lookup_id, shard, - channel, clk: start_clk, w_ptr, h_ptr, @@ -101,7 +106,9 @@ impl Syscall for Sha256CompressSyscall { h_read_records: h_read_records.try_into().unwrap(), w_i_read_records, h_write_records: h_write_records.try_into().unwrap(), + local_mem_access: rt.postprocess(), }); + rt.record_mut().add_precompile_event(syscall_code, event); None } diff --git a/crates/core/executor/src/syscalls/precompiles/sha256/extend.rs b/crates/core/executor/src/syscalls/precompiles/sha256/extend.rs index 842fc678b8..4b3fe7f479 100644 --- a/crates/core/executor/src/syscalls/precompiles/sha256/extend.rs +++ b/crates/core/executor/src/syscalls/precompiles/sha256/extend.rs @@ -1,6 +1,6 @@ use crate::{ - events::ShaExtendEvent, - syscalls::{Syscall, SyscallContext}, + events::{PrecompileEvent, ShaExtendEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub(crate) struct Sha256ExtendSyscall; @@ -10,7 +10,13 @@ impl Syscall for Sha256ExtendSyscall { 48 } - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let clk_init = rt.clk; let w_ptr = arg1; assert!(arg2 == 0, "arg2 must be 0"); @@ -57,11 +63,9 @@ impl Syscall for Sha256ExtendSyscall { // Push the SHA extend event. let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); - let channel = rt.current_channel(); - rt.record_mut().sha_extend_events.push(ShaExtendEvent { + let event = PrecompileEvent::ShaExtend(ShaExtendEvent { lookup_id, shard, - channel, clk: clk_init, w_ptr: w_ptr_init, w_i_minus_15_reads, @@ -69,7 +73,9 @@ impl Syscall for Sha256ExtendSyscall { w_i_minus_16_reads, w_i_minus_7_reads, w_i_writes, + local_mem_access: rt.postprocess(), }); + rt.record_mut().add_precompile_event(syscall_code, event); None } diff --git a/crates/core/executor/src/syscalls/precompiles/uint256.rs b/crates/core/executor/src/syscalls/precompiles/uint256.rs index 4592f999fc..32160992b2 100644 --- a/crates/core/executor/src/syscalls/precompiles/uint256.rs +++ b/crates/core/executor/src/syscalls/precompiles/uint256.rs @@ -4,14 +4,20 @@ use sp1_curves::edwards::WORDS_FIELD_ELEMENT; use sp1_primitives::consts::{bytes_to_words_le, words_to_bytes_le_vec, WORD_SIZE}; use crate::{ - events::Uint256MulEvent, - syscalls::{Syscall, SyscallContext}, + events::{PrecompileEvent, Uint256MulEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub(crate) struct Uint256MulSyscall; impl Syscall for Uint256MulSyscall { - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let clk = rt.clk; let x_ptr = arg1; @@ -60,11 +66,9 @@ impl Syscall for Uint256MulSyscall { let lookup_id = rt.syscall_lookup_id; let shard = rt.current_shard(); - let channel = rt.current_channel(); - rt.record_mut().uint256_mul_events.push(Uint256MulEvent { + let event = PrecompileEvent::Uint256Mul(Uint256MulEvent { lookup_id, shard, - channel, clk, x_ptr, x, @@ -74,7 +78,9 @@ impl Syscall for Uint256MulSyscall { x_memory_records, y_memory_records, modulus_memory_records, + local_mem_access: rt.postprocess(), }); + rt.record_mut().add_precompile_event(syscall_code, event); None } diff --git a/crates/core/executor/src/syscalls/precompiles/weierstrass/add.rs b/crates/core/executor/src/syscalls/precompiles/weierstrass/add.rs index 9d39ca325a..6243ad6ae5 100644 --- a/crates/core/executor/src/syscalls/precompiles/weierstrass/add.rs +++ b/crates/core/executor/src/syscalls/precompiles/weierstrass/add.rs @@ -3,8 +3,8 @@ use std::marker::PhantomData; use sp1_curves::{CurveType, EllipticCurve}; use crate::{ - events::create_ec_add_event, - syscalls::{Syscall, SyscallContext}, + events::{create_ec_add_event, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub(crate) struct WeierstrassAddAssignSyscall { @@ -19,12 +19,25 @@ impl WeierstrassAddAssignSyscall { } impl Syscall for WeierstrassAddAssignSyscall { - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let event = create_ec_add_event::(rt, arg1, arg2); match E::CURVE_TYPE { - CurveType::Secp256k1 => rt.record_mut().secp256k1_add_events.push(event), - CurveType::Bn254 => rt.record_mut().bn254_add_events.push(event), - CurveType::Bls12381 => rt.record_mut().bls12381_add_events.push(event), + CurveType::Secp256k1 => rt + .record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Secp256k1Add(event)), + CurveType::Bn254 => { + rt.record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Bn254Add(event)); + } + CurveType::Bls12381 => rt + .record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Bls12381Add(event)), _ => panic!("Unsupported curve"), } None diff --git a/crates/core/executor/src/syscalls/precompiles/weierstrass/decompress.rs b/crates/core/executor/src/syscalls/precompiles/weierstrass/decompress.rs index a2b476281e..7f5e506f3a 100644 --- a/crates/core/executor/src/syscalls/precompiles/weierstrass/decompress.rs +++ b/crates/core/executor/src/syscalls/precompiles/weierstrass/decompress.rs @@ -3,8 +3,8 @@ use std::marker::PhantomData; use sp1_curves::{CurveType, EllipticCurve}; use crate::{ - events::create_ec_decompress_event, - syscalls::{Syscall, SyscallContext}, + events::{create_ec_decompress_event, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub(crate) struct WeierstrassDecompressSyscall { @@ -19,11 +19,21 @@ impl WeierstrassDecompressSyscall { } impl Syscall for WeierstrassDecompressSyscall { - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let event = create_ec_decompress_event::(rt, arg1, arg2); match E::CURVE_TYPE { - CurveType::Secp256k1 => rt.record_mut().k256_decompress_events.push(event), - CurveType::Bls12381 => rt.record_mut().bls12381_decompress_events.push(event), + CurveType::Secp256k1 => rt + .record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Secp256k1Decompress(event)), + CurveType::Bls12381 => rt + .record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Bls12381Decompress(event)), _ => panic!("Unsupported curve"), } None diff --git a/crates/core/executor/src/syscalls/precompiles/weierstrass/double.rs b/crates/core/executor/src/syscalls/precompiles/weierstrass/double.rs index 507e78f05c..1e388b6bd4 100644 --- a/crates/core/executor/src/syscalls/precompiles/weierstrass/double.rs +++ b/crates/core/executor/src/syscalls/precompiles/weierstrass/double.rs @@ -3,8 +3,8 @@ use std::marker::PhantomData; use sp1_curves::{CurveType, EllipticCurve}; use crate::{ - events::create_ec_double_event, - syscalls::{Syscall, SyscallContext}, + events::{create_ec_double_event, PrecompileEvent}, + syscalls::{Syscall, SyscallCode, SyscallContext}, }; pub(crate) struct WeierstrassDoubleAssignSyscall { @@ -19,12 +19,27 @@ impl WeierstrassDoubleAssignSyscall { } impl Syscall for WeierstrassDoubleAssignSyscall { - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + rt: &mut SyscallContext, + syscall_code: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let event = create_ec_double_event::(rt, arg1, arg2); match E::CURVE_TYPE { - CurveType::Secp256k1 => rt.record_mut().secp256k1_double_events.push(event), - CurveType::Bn254 => rt.record_mut().bn254_double_events.push(event), - CurveType::Bls12381 => rt.record_mut().bls12381_double_events.push(event), + CurveType::Secp256k1 => { + rt.record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Secp256k1Double(event)); + } + CurveType::Bn254 => { + rt.record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Bn254Double(event)); + } + CurveType::Bls12381 => { + rt.record_mut() + .add_precompile_event(syscall_code, PrecompileEvent::Bls12381Double(event)); + } _ => panic!("Unsupported curve"), } None diff --git a/crates/core/executor/src/syscalls/unconstrained.rs b/crates/core/executor/src/syscalls/unconstrained.rs index 2a957c56d7..a84338eb0f 100644 --- a/crates/core/executor/src/syscalls/unconstrained.rs +++ b/crates/core/executor/src/syscalls/unconstrained.rs @@ -2,12 +2,12 @@ use hashbrown::HashMap; use crate::{state::ForkState, ExecutorMode}; -use super::{Syscall, SyscallContext}; +use super::{Syscall, SyscallCode, SyscallContext}; pub(crate) struct EnterUnconstrainedSyscall; impl Syscall for EnterUnconstrainedSyscall { - fn execute(&self, ctx: &mut SyscallContext, _: u32, _: u32) -> Option { + fn execute(&self, ctx: &mut SyscallContext, _: SyscallCode, _: u32, _: u32) -> Option { if ctx.rt.unconstrained { panic!("Unconstrained block is already active."); } @@ -29,7 +29,7 @@ impl Syscall for EnterUnconstrainedSyscall { pub(crate) struct ExitUnconstrainedSyscall; impl Syscall for ExitUnconstrainedSyscall { - fn execute(&self, ctx: &mut SyscallContext, _: u32, _: u32) -> Option { + fn execute(&self, ctx: &mut SyscallContext, _: SyscallCode, _: u32, _: u32) -> Option { // Reset the state of the runtime. if ctx.rt.unconstrained { ctx.rt.state.global_clk = ctx.rt.unconstrained_state.global_clk; diff --git a/crates/core/executor/src/syscalls/verify.rs b/crates/core/executor/src/syscalls/verify.rs index cf314b1ad8..0197199e51 100644 --- a/crates/core/executor/src/syscalls/verify.rs +++ b/crates/core/executor/src/syscalls/verify.rs @@ -1,10 +1,16 @@ -use super::{Syscall, SyscallContext}; +use super::{Syscall, SyscallCode, SyscallContext}; pub(crate) struct VerifySyscall; impl Syscall for VerifySyscall { #[allow(clippy::mut_mut)] - fn execute(&self, ctx: &mut SyscallContext, vkey_ptr: u32, pv_digest_ptr: u32) -> Option { + fn execute( + &self, + ctx: &mut SyscallContext, + _: SyscallCode, + vkey_ptr: u32, + pv_digest_ptr: u32, + ) -> Option { let rt = &mut ctx.rt; // vkey_ptr is a pointer to [u32; 8] which contains the verification key. diff --git a/crates/core/executor/src/syscalls/write.rs b/crates/core/executor/src/syscalls/write.rs index d40133903f..d0db44cae8 100644 --- a/crates/core/executor/src/syscalls/write.rs +++ b/crates/core/executor/src/syscalls/write.rs @@ -2,7 +2,7 @@ use sp1_primitives::consts::num_to_comma_separated; use crate::{Executor, Register}; -use super::{Syscall, SyscallContext}; +use super::{Syscall, SyscallCode, SyscallContext}; pub(crate) struct WriteSyscall; @@ -27,7 +27,13 @@ impl Syscall for WriteSyscall { /// /// Else, log a warning. #[allow(clippy::pedantic)] - fn execute(&self, ctx: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute( + &self, + ctx: &mut SyscallContext, + _: SyscallCode, + arg1: u32, + arg2: u32, + ) -> Option { let a2 = Register::X12; let rt = &mut ctx.rt; let fd = arg1; diff --git a/crates/core/executor/src/utils.rs b/crates/core/executor/src/utils.rs index 2b1448a893..ec4203aa50 100644 --- a/crates/core/executor/src/utils.rs +++ b/crates/core/executor/src/utils.rs @@ -3,6 +3,9 @@ use hashbrown::HashMap; use nohash_hasher::BuildNoHashHasher; use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use crate::Opcode; + +/// Serialize a `HashMap` as a `Vec<(u32, V)>`. pub fn serialize_hashmap_as_vec( map: &HashMap>, serializer: S, @@ -10,9 +13,36 @@ pub fn serialize_hashmap_as_vec( Serialize::serialize(&map.iter().collect::>(), serializer) } +/// Deserialize a `Vec<(u32, V)>` as a `HashMap`. pub fn deserialize_hashmap_as_vec<'de, V: Deserialize<'de>, D: Deserializer<'de>>( deserializer: D, ) -> Result>, D::Error> { let seq: Vec<(u32, V)> = Deserialize::deserialize(deserializer)?; Ok(seq.into_iter().collect()) } + +/// Returns `true` if the given `opcode` is a signed operation. +#[must_use] +pub fn is_signed_operation(opcode: Opcode) -> bool { + opcode == Opcode::DIV || opcode == Opcode::REM +} + +/// Calculate the correct `quotient` and `remainder` for the given `b` and `c` per RISC-V spec. +#[must_use] +pub fn get_quotient_and_remainder(b: u32, c: u32, opcode: Opcode) -> (u32, u32) { + if c == 0 { + // When c is 0, the quotient is 2^32 - 1 and the remainder is b regardless of whether we + // perform signed or unsigned division. + (u32::MAX, b) + } else if is_signed_operation(opcode) { + ((b as i32).wrapping_div(c as i32) as u32, (b as i32).wrapping_rem(c as i32) as u32) + } else { + (b.wrapping_div(c), b.wrapping_rem(c)) + } +} + +/// Calculate the most significant bit of the given 32-bit integer `a`, and returns it as a u8. +#[must_use] +pub const fn get_msb(a: u32) -> u8 { + ((a >> 31) & 1) as u8 +} diff --git a/crates/core/machine/src/air/memory.rs b/crates/core/machine/src/air/memory.rs index 8d0c9fb909..53d243f63b 100644 --- a/crates/core/machine/src/air/memory.rs +++ b/crates/core/machine/src/air/memory.rs @@ -4,7 +4,7 @@ use p3_air::AirBuilder; use p3_field::AbstractField; use sp1_core_executor::ByteOpcode; use sp1_stark::{ - air::{AirInteraction, BaseAirBuilder, ByteAirBuilder}, + air::{AirInteraction, BaseAirBuilder, ByteAirBuilder, InteractionScope}, InteractionKind, }; @@ -18,7 +18,6 @@ pub trait MemoryAirBuilder: BaseAirBuilder { fn eval_memory_access + Clone>( &mut self, shard: impl Into, - channel: impl Into, clk: impl Into, addr: impl Into, memory_access: &impl MemoryCols, @@ -26,20 +25,13 @@ pub trait MemoryAirBuilder: BaseAirBuilder { ) { let do_check: Self::Expr = do_check.into(); let shard: Self::Expr = shard.into(); - let channel: Self::Expr = channel.into(); let clk: Self::Expr = clk.into(); let mem_access = memory_access.access(); self.assert_bool(do_check.clone()); // Verify that the current memory access time is greater than the previous's. - self.eval_memory_access_timestamp( - mem_access, - do_check.clone(), - shard.clone(), - channel, - clk.clone(), - ); + self.eval_memory_access_timestamp(mem_access, do_check.clone(), shard.clone(), clk.clone()); // Add to the memory argument. let addr = addr.into(); @@ -57,21 +49,22 @@ pub trait MemoryAirBuilder: BaseAirBuilder { .collect(); // The previous values get sent with multiplicity = 1, for "read". - self.send(AirInteraction::new(prev_values, do_check.clone(), InteractionKind::Memory)); + self.send( + AirInteraction::new(prev_values, do_check.clone(), InteractionKind::Memory), + InteractionScope::Local, + ); // The current values get "received", i.e. multiplicity = -1 - self.receive(AirInteraction::new( - current_values, - do_check.clone(), - InteractionKind::Memory, - )); + self.receive( + AirInteraction::new(current_values, do_check.clone(), InteractionKind::Memory), + InteractionScope::Local, + ); } /// Constraints a memory read or write to a slice of `MemoryAccessCols`. fn eval_memory_access_slice + Copy>( &mut self, shard: impl Into + Copy, - channel: impl Into + Clone, clk: impl Into + Clone, initial_addr: impl Into + Clone, memory_access_slice: &[impl MemoryCols], @@ -80,7 +73,6 @@ pub trait MemoryAirBuilder: BaseAirBuilder { for (i, access_slice) in memory_access_slice.iter().enumerate() { self.eval_memory_access( shard, - channel.clone(), clk.clone(), initial_addr.clone().into() + Self::Expr::from_canonical_usize(i * 4), access_slice, @@ -100,7 +92,6 @@ pub trait MemoryAirBuilder: BaseAirBuilder { mem_access: &MemoryAccessCols + Clone>, do_check: impl Into, shard: impl Into + Clone, - channel: impl Into + Clone, clk: impl Into, ) { let do_check: Self::Expr = do_check.into(); @@ -138,8 +129,6 @@ pub trait MemoryAirBuilder: BaseAirBuilder { diff_minus_one, mem_access.diff_16bit_limb.clone(), mem_access.diff_8bit_limb.clone(), - shard.clone(), - channel.clone(), do_check, ); } @@ -155,8 +144,6 @@ pub trait MemoryAirBuilder: BaseAirBuilder { value: impl Into, limb_16: impl Into + Clone, limb_8: impl Into + Clone, - shard: impl Into + Clone, - channel: impl Into + Clone, do_check: impl Into + Clone, ) { // Verify that value = limb_16 + limb_8 * 2^16. @@ -172,8 +159,6 @@ pub trait MemoryAirBuilder: BaseAirBuilder { limb_16, Self::Expr::zero(), Self::Expr::zero(), - shard.clone(), - channel.clone(), do_check.clone(), ); @@ -182,8 +167,6 @@ pub trait MemoryAirBuilder: BaseAirBuilder { Self::Expr::zero(), Self::Expr::zero(), limb_8, - shard.clone(), - channel.clone(), do_check, ) } diff --git a/crates/core/machine/src/air/program.rs b/crates/core/machine/src/air/program.rs index d94f006d1b..4efaa97f3f 100644 --- a/crates/core/machine/src/air/program.rs +++ b/crates/core/machine/src/air/program.rs @@ -2,7 +2,7 @@ use std::iter::once; use p3_air::AirBuilder; use sp1_stark::{ - air::{AirInteraction, BaseAirBuilder}, + air::{AirInteraction, BaseAirBuilder, InteractionScope}, InteractionKind, }; @@ -26,7 +26,10 @@ pub trait ProgramAirBuilder: BaseAirBuilder { .chain(once(shard.into())) .collect(); - self.send(AirInteraction::new(values, multiplicity.into(), InteractionKind::Program)); + self.send( + AirInteraction::new(values, multiplicity.into(), InteractionKind::Program), + InteractionScope::Local, + ); } /// Receives an instruction. @@ -45,6 +48,9 @@ pub trait ProgramAirBuilder: BaseAirBuilder { .chain(once(shard.into())) .collect(); - self.receive(AirInteraction::new(values, multiplicity.into(), InteractionKind::Program)); + self.receive( + AirInteraction::new(values, multiplicity.into(), InteractionKind::Program), + InteractionScope::Local, + ); } } diff --git a/crates/core/machine/src/air/word.rs b/crates/core/machine/src/air/word.rs index d96a1c6d31..b4e68c67ac 100644 --- a/crates/core/machine/src/air/word.rs +++ b/crates/core/machine/src/air/word.rs @@ -55,8 +55,6 @@ pub trait WordAirBuilder: ByteAirBuilder { fn slice_range_check_u8( &mut self, input: &[impl Into + Clone], - shard: impl Into + Clone, - channel: impl Into + Clone, mult: impl Into + Clone, ) { let mut index = 0; @@ -66,8 +64,6 @@ pub trait WordAirBuilder: ByteAirBuilder { Self::Expr::zero(), input[index].clone(), input[index + 1].clone(), - shard.clone(), - channel.clone(), mult.clone(), ); index += 2; @@ -78,8 +74,6 @@ pub trait WordAirBuilder: ByteAirBuilder { Self::Expr::zero(), input[index].clone(), Self::Expr::zero(), - shard.clone(), - channel.clone(), mult.clone(), ); } @@ -89,8 +83,6 @@ pub trait WordAirBuilder: ByteAirBuilder { fn slice_range_check_u16( &mut self, input: &[impl Into + Copy], - shard: impl Into + Clone, - channel: impl Into + Clone, mult: impl Into + Clone, ) { input.iter().for_each(|limb| { @@ -99,8 +91,6 @@ pub trait WordAirBuilder: ByteAirBuilder { *limb, Self::Expr::zero(), Self::Expr::zero(), - shard.clone(), - channel.clone(), mult.clone(), ); }); diff --git a/crates/core/machine/src/alu/add_sub/mod.rs b/crates/core/machine/src/alu/add_sub/mod.rs index 8128a8a8b0..93d4752791 100644 --- a/crates/core/machine/src/alu/add_sub/mod.rs +++ b/crates/core/machine/src/alu/add_sub/mod.rs @@ -40,9 +40,6 @@ pub struct AddSubCols { /// The shard number, used for byte lookup table. pub shard: T, - /// The channel number, used for byte lookup table. - pub channel: T, - /// The nonce of the operation. pub nonce: T, @@ -162,14 +159,13 @@ impl AddSubChip { ) { let is_add = event.opcode == Opcode::ADD; cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.is_add = F::from_bool(is_add); cols.is_sub = F::from_bool(!is_add); let operand_1 = if is_add { event.b } else { event.a }; let operand_2 = event.c; - cols.add_operation.populate(blu, event.shard, event.channel, operand_1, operand_2); + cols.add_operation.populate(blu, event.shard, operand_1, operand_2); cols.operand_1 = Word::from(operand_1); cols.operand_2 = Word::from(operand_2); } @@ -202,8 +198,6 @@ where local.operand_1, local.operand_2, local.add_operation, - local.shard, - local.channel, local.is_add + local.is_sub, ); @@ -215,7 +209,6 @@ where local.operand_1, local.operand_2, local.shard, - local.channel, local.nonce, local.is_add, ); @@ -227,7 +220,6 @@ where local.add_operation.value, local.operand_2, local.shard, - local.channel, local.nonce, local.is_sub, ); @@ -253,7 +245,7 @@ mod tests { #[test] fn generate_trace() { let mut shard = ExecutionRecord::default(); - shard.add_events = vec![AluEvent::new(0, 0, 0, Opcode::ADD, 14, 8, 6)]; + shard.add_events = vec![AluEvent::new(0, 0, Opcode::ADD, 14, 8, 6)]; let chip = AddSubChip::default(); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); @@ -271,7 +263,6 @@ mod tests { let operand_2 = thread_rng().gen_range(0..u32::MAX); let result = operand_1.wrapping_add(operand_2); shard.add_events.push(AluEvent::new( - 0, i % 2, 0, Opcode::ADD, @@ -285,7 +276,6 @@ mod tests { let operand_2 = thread_rng().gen_range(0..u32::MAX); let result = operand_1.wrapping_sub(operand_2); shard.add_events.push(AluEvent::new( - 0, i % 2, 0, Opcode::SUB, diff --git a/crates/core/machine/src/alu/bitwise/mod.rs b/crates/core/machine/src/alu/bitwise/mod.rs index 463723ec12..17a1e17d9d 100644 --- a/crates/core/machine/src/alu/bitwise/mod.rs +++ b/crates/core/machine/src/alu/bitwise/mod.rs @@ -35,9 +35,6 @@ pub struct BitwiseCols { /// The shard number, used for byte lookup table. pub shard: T, - /// The channel number, used for byte lookup table. - pub channel: T, - /// The nonce of the operation. pub nonce: T, @@ -144,7 +141,6 @@ impl BitwiseChip { let c = event.c.to_le_bytes(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.a = Word::from(event.a); cols.b = Word::from(event.b); cols.c = Word::from(event.c); @@ -156,7 +152,6 @@ impl BitwiseChip { for ((b_a, b_b), b_c) in a.into_iter().zip(b).zip(c) { let byte_event = ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::from(event.opcode), a1: b_a as u16, a2: 0, @@ -197,7 +192,7 @@ where // Get a multiplicity of `1` only for a true row. let mult = local.is_xor + local.is_or + local.is_and; for ((a, b), c) in local.a.into_iter().zip(local.b).zip(local.c) { - builder.send_byte(opcode.clone(), a, b, c, local.shard, local.channel, mult.clone()); + builder.send_byte(opcode.clone(), a, b, c, mult.clone()); } // Get the cpu opcode, which corresponds to the opcode being sent in the CPU table. @@ -212,7 +207,6 @@ where local.b, local.c, local.shard, - local.channel, local.nonce, local.is_xor + local.is_or + local.is_and, ); @@ -239,7 +233,7 @@ mod tests { #[test] fn generate_trace() { let mut shard = ExecutionRecord::default(); - shard.bitwise_events = vec![AluEvent::new(0, 0, 0, Opcode::XOR, 25, 10, 19)]; + shard.bitwise_events = vec![AluEvent::new(0, 0, Opcode::XOR, 25, 10, 19)]; let chip = BitwiseChip::default(); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); @@ -253,9 +247,9 @@ mod tests { let mut shard = ExecutionRecord::default(); shard.bitwise_events = [ - AluEvent::new(0, 0, 0, Opcode::XOR, 25, 10, 19), - AluEvent::new(0, 1, 0, Opcode::OR, 27, 10, 19), - AluEvent::new(0, 0, 0, Opcode::AND, 2, 10, 19), + AluEvent::new(0, 0, Opcode::XOR, 25, 10, 19), + AluEvent::new(0, 0, Opcode::OR, 27, 10, 19), + AluEvent::new(0, 0, Opcode::AND, 2, 10, 19), ] .repeat(1000); let chip = BitwiseChip::default(); diff --git a/crates/core/machine/src/alu/divrem/mod.rs b/crates/core/machine/src/alu/divrem/mod.rs index 01eceb51df..96e5d97344 100644 --- a/crates/core/machine/src/alu/divrem/mod.rs +++ b/crates/core/machine/src/alu/divrem/mod.rs @@ -60,20 +60,18 @@ //! # b = 0 * quotient + b is satisfied by any quotient. //! assert quotient = 0xffffffff -mod utils; - use core::{ borrow::{Borrow, BorrowMut}, mem::size_of, }; -use hashbrown::HashMap; use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{create_alu_lookups, AluEvent, ByteLookupEvent, ByteRecord}, - ByteOpcode, ExecutionRecord, Opcode, Program, + events::{ByteLookupEvent, ByteRecord}, + get_msb, get_quotient_and_remainder, is_signed_operation, ByteOpcode, ExecutionRecord, Opcode, + Program, }; use sp1_derive::AlignedBorrow; use sp1_primitives::consts::WORD_SIZE; @@ -81,7 +79,6 @@ use sp1_stark::{air::MachineAir, Word}; use crate::{ air::SP1CoreAirBuilder, - alu::divrem::utils::{get_msb, get_quotient_and_remainder, is_signed_operation}, operations::{IsEqualWordOperation, IsZeroWordOperation}, utils::pad_rows_fixed, }; @@ -106,9 +103,6 @@ pub struct DivRemCols { /// The shard number, used for byte lookup table. pub shard: T, - /// The channel number, used for byte lookup table. - pub channel: T, - /// The nonce of the operation. pub nonce: T, @@ -248,7 +242,6 @@ impl MachineAir for DivRemChip { cols.b = Word::from(event.b); cols.c = Word::from(event.c); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.is_real = F::one(); cols.is_divu = F::from_bool(event.opcode == Opcode::DIVU); cols.is_remu = F::from_bool(event.opcode == Opcode::REMU); @@ -301,7 +294,6 @@ impl MachineAir for DivRemChip { let most_significant_byte = word.to_le_bytes()[WORD_SIZE - 1]; blu_events.push(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::MSB, a1: get_msb(*word) as u16, a2: 0, @@ -350,93 +342,14 @@ impl MachineAir for DivRemChip { } // Insert the necessary multiplication & LT events. - // - // This generate_trace for div must be executed _before_ calling generate_trace for - // mul and LT upon which div depends. This ordering is critical as mul and LT - // require all the mul and LT events be added before we can call generate_trace. { - // Insert the absolute value computation events. - { - let mut add_events: Vec = vec![]; - if cols.abs_c_alu_event == F::one() { - add_events.push(AluEvent { - lookup_id: event.sub_lookups[4], - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::ADD, - a: 0, - b: event.c, - c: (event.c as i32).abs() as u32, - sub_lookups: create_alu_lookups(), - }) - } - if cols.abs_rem_alu_event == F::one() { - add_events.push(AluEvent { - lookup_id: event.sub_lookups[5], - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::ADD, - a: 0, - b: remainder, - c: (remainder as i32).abs() as u32, - sub_lookups: create_alu_lookups(), - }) - } - let mut alu_events = HashMap::new(); - alu_events.insert(Opcode::ADD, add_events); - output.add_alu_events(alu_events); - } - - let mut lower_word = 0; - for i in 0..WORD_SIZE { - lower_word += (c_times_quotient[i] as u32) << (i * BYTE_SIZE); - } - - let mut upper_word = 0; - for i in 0..WORD_SIZE { - upper_word += (c_times_quotient[WORD_SIZE + i] as u32) << (i * BYTE_SIZE); - } - - let lower_multiplication = AluEvent { - lookup_id: event.sub_lookups[0], - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::MUL, - a: lower_word, - c: event.c, - b: quotient, - sub_lookups: create_alu_lookups(), - }; cols.lower_nonce = F::from_canonical_u32( input.nonce_lookup.get(&event.sub_lookups[0]).copied().unwrap_or_default(), ); - output.add_mul_event(lower_multiplication); - - let upper_multiplication = AluEvent { - lookup_id: event.sub_lookups[1], - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: { - if is_signed_operation(event.opcode) { - Opcode::MULH - } else { - Opcode::MULHU - } - }, - a: upper_word, - c: event.c, - b: quotient, - sub_lookups: create_alu_lookups(), - }; cols.upper_nonce = F::from_canonical_u32( input.nonce_lookup.get(&event.sub_lookups[1]).copied().unwrap_or_default(), ); - output.add_mul_event(upper_multiplication); - let lt_event = if is_signed_operation(event.opcode) { + if is_signed_operation(event.opcode) { cols.abs_nonce = F::from_canonical_u32( input .nonce_lookup @@ -444,17 +357,6 @@ impl MachineAir for DivRemChip { .copied() .unwrap_or_default(), ); - AluEvent { - lookup_id: event.sub_lookups[2], - shard: event.shard, - channel: event.channel, - opcode: Opcode::SLTU, - a: 1, - b: (remainder as i32).abs() as u32, - c: u32::max(1, (event.c as i32).abs() as u32), - clk: event.clk, - sub_lookups: create_alu_lookups(), - } } else { cols.abs_nonce = F::from_canonical_u32( input @@ -463,33 +365,14 @@ impl MachineAir for DivRemChip { .copied() .unwrap_or_default(), ); - AluEvent { - lookup_id: event.sub_lookups[3], - shard: event.shard, - channel: event.channel, - opcode: Opcode::SLTU, - a: 1, - b: remainder, - c: u32::max(1, event.c), - clk: event.clk, - sub_lookups: create_alu_lookups(), - } }; - - if cols.remainder_check_multiplicity == F::one() { - output.add_lt_event(lt_event); - } } // Range check. { - output.add_u8_range_checks(event.shard, event.channel, "ient.to_le_bytes()); - output.add_u8_range_checks( - event.shard, - event.channel, - &remainder.to_le_bytes(), - ); - output.add_u8_range_checks(event.shard, event.channel, &c_times_quotient); + output.add_u8_range_checks(event.shard, "ient.to_le_bytes()); + output.add_u8_range_checks(event.shard, &remainder.to_le_bytes()); + output.add_u8_range_checks(event.shard, &c_times_quotient); } } @@ -599,7 +482,6 @@ where local.quotient, local.c, local.shard, - local.channel, local.lower_nonce, local.is_real, ); @@ -625,7 +507,6 @@ where local.quotient, local.c, local.shard, - local.channel, local.upper_nonce, local.is_real, ); @@ -780,7 +661,6 @@ where local.c, local.abs_c, local.shard, - local.channel, local.abs_c_alu_event_nonce, local.abs_c_alu_event, ); @@ -790,7 +670,6 @@ where local.remainder, local.abs_remainder, local.shard, - local.channel, local.abs_rem_alu_event_nonce, local.abs_rem_alu_event, ); @@ -837,7 +716,6 @@ where local.abs_remainder, local.max_abs_c_or_1, local.shard, - local.channel, local.abs_nonce, local.remainder_check_multiplicity, ); @@ -854,43 +732,20 @@ where for msb_pair in msb_pairs.iter() { let msb = msb_pair.0; let byte = msb_pair.1; - builder.send_byte( - opcode, - msb, - byte, - zero.clone(), - local.shard, - local.channel, - local.is_real, - ); + builder.send_byte(opcode, msb, byte, zero.clone(), local.is_real); } } // Range check all the bytes. { - builder.slice_range_check_u8( - &local.quotient.0, - local.shard, - local.channel, - local.is_real, - ); - builder.slice_range_check_u8( - &local.remainder.0, - local.shard, - local.channel, - local.is_real, - ); + builder.slice_range_check_u8(&local.quotient.0, local.is_real); + builder.slice_range_check_u8(&local.remainder.0, local.is_real); local.carry.iter().for_each(|carry| { builder.assert_bool(*carry); }); - builder.slice_range_check_u8( - &local.c_times_quotient, - local.shard, - local.channel, - local.is_real, - ); + builder.slice_range_check_u8(&local.c_times_quotient, local.is_real); } // Check that the flags are boolean. @@ -943,7 +798,6 @@ where local.b, local.c, local.shard, - local.channel, local.nonce, local.is_real, ); @@ -965,7 +819,7 @@ mod tests { #[test] fn generate_trace() { let mut shard = ExecutionRecord::default(); - shard.divrem_events = vec![AluEvent::new(0, 0, 0, Opcode::DIVU, 2, 17, 3)]; + shard.divrem_events = vec![AluEvent::new(0, 0, Opcode::DIVU, 2, 17, 3)]; let chip = DivRemChip::default(); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); @@ -1018,12 +872,12 @@ mod tests { (Opcode::REM, 0, 1 << 31, neg(1)), ]; for t in divrems.iter() { - divrem_events.push(AluEvent::new(0, 9, 0, t.0, t.1, t.2, t.3)); + divrem_events.push(AluEvent::new(0, 0, t.0, t.1, t.2, t.3)); } // Append more events until we have 1000 tests. for _ in 0..(1000 - divrems.len()) { - divrem_events.push(AluEvent::new(0, 0, 0, Opcode::DIVU, 1, 1, 1)); + divrem_events.push(AluEvent::new(0, 0, Opcode::DIVU, 1, 1, 1)); } let mut shard = ExecutionRecord::default(); diff --git a/crates/core/machine/src/alu/divrem/utils.rs b/crates/core/machine/src/alu/divrem/utils.rs deleted file mode 100644 index 5147d20f6c..0000000000 --- a/crates/core/machine/src/alu/divrem/utils.rs +++ /dev/null @@ -1,24 +0,0 @@ -use sp1_core_executor::Opcode; - -/// Returns `true` if the given `opcode` is a signed operation. -pub fn is_signed_operation(opcode: Opcode) -> bool { - opcode == Opcode::DIV || opcode == Opcode::REM -} - -/// Calculate the correct `quotient` and `remainder` for the given `b` and `c` per RISC-V spec. -pub fn get_quotient_and_remainder(b: u32, c: u32, opcode: Opcode) -> (u32, u32) { - if c == 0 { - // When c is 0, the quotient is 2^32 - 1 and the remainder is b regardless of whether we - // perform signed or unsigned division. - (u32::MAX, b) - } else if is_signed_operation(opcode) { - ((b as i32).wrapping_div(c as i32) as u32, (b as i32).wrapping_rem(c as i32) as u32) - } else { - ((b as u32).wrapping_div(c as u32) as u32, (b as u32).wrapping_rem(c as u32) as u32) - } -} - -/// Calculate the most significant bit of the given 32-bit integer `a`, and returns it as a u8. -pub const fn get_msb(a: u32) -> u8 { - ((a >> 31) & 1) as u8 -} diff --git a/crates/core/machine/src/alu/lt/mod.rs b/crates/core/machine/src/alu/lt/mod.rs index 0c6804bc15..e6d6b43dc0 100644 --- a/crates/core/machine/src/alu/lt/mod.rs +++ b/crates/core/machine/src/alu/lt/mod.rs @@ -35,9 +35,6 @@ pub struct LtCols { /// The shard number, used for byte lookup table. pub shard: T, - /// The channel number, used for byte lookup table. - pub channel: T, - /// The nonce of the operation. pub nonce: T, @@ -182,7 +179,6 @@ impl LtChip { let c = event.c.to_le_bytes(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.a = Word(a.map(F::from_canonical_u8)); cols.b = Word(b.map(F::from_canonical_u8)); cols.c = Word(c.map(F::from_canonical_u8)); @@ -196,7 +192,6 @@ impl LtChip { // Send the masked interaction. blu.add_byte_lookup_event(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::AND, a1: masked_b as u16, a2: 0, @@ -205,7 +200,6 @@ impl LtChip { }); blu.add_byte_lookup_event(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::AND, a1: masked_c as u16, a2: 0, @@ -255,7 +249,6 @@ impl LtChip { blu.add_byte_lookup_event(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::LTU, a1: cols.sltu.as_canonical_u32() as u16, a2: 0, @@ -319,8 +312,6 @@ where local.b_masked, local.b[3], AB::F::from_canonical_u8(0x7f), - local.shard, - local.channel, is_real.clone(), ); builder.send_byte( @@ -328,8 +319,6 @@ where local.c_masked, local.c[3], AB::F::from_canonical_u8(0x7f), - local.shard, - local.channel, is_real.clone(), ); @@ -440,8 +429,6 @@ where local.sltu, b_comp_byte, c_comp_byte, - local.shard, - local.channel, is_real.clone(), ); @@ -464,7 +451,6 @@ where local.b, local.c, local.shard, - local.channel, local.nonce, is_real, ); @@ -485,7 +471,7 @@ mod tests { #[test] fn generate_trace() { let mut shard = ExecutionRecord::default(); - shard.lt_events = vec![AluEvent::new(0, 1, 0, Opcode::SLT, 0, 3, 2)]; + shard.lt_events = vec![AluEvent::new(0, 0, Opcode::SLT, 0, 3, 2)]; let chip = LtChip::default(); let generate_trace = chip.generate_trace(&shard, &mut ExecutionRecord::default()); let trace: RowMajorMatrix = generate_trace; @@ -513,21 +499,21 @@ mod tests { const NEG_4: u32 = 0b11111111111111111111111111111100; shard.lt_events = vec![ // 0 == 3 < 2 - AluEvent::new(0, 0, 0, Opcode::SLT, 0, 3, 2), + AluEvent::new(0, 0, Opcode::SLT, 0, 3, 2), // 1 == 2 < 3 - AluEvent::new(0, 0, 1, Opcode::SLT, 1, 2, 3), + AluEvent::new(0, 1, Opcode::SLT, 1, 2, 3), // 0 == 5 < -3 - AluEvent::new(0, 0, 3, Opcode::SLT, 0, 5, NEG_3), + AluEvent::new(0, 3, Opcode::SLT, 0, 5, NEG_3), // 1 == -3 < 5 - AluEvent::new(0, 0, 2, Opcode::SLT, 1, NEG_3, 5), + AluEvent::new(0, 2, Opcode::SLT, 1, NEG_3, 5), // 0 == -3 < -4 - AluEvent::new(0, 0, 4, Opcode::SLT, 0, NEG_3, NEG_4), + AluEvent::new(0, 4, Opcode::SLT, 0, NEG_3, NEG_4), // 1 == -4 < -3 - AluEvent::new(0, 0, 4, Opcode::SLT, 1, NEG_4, NEG_3), + AluEvent::new(0, 4, Opcode::SLT, 1, NEG_4, NEG_3), // 0 == 3 < 3 - AluEvent::new(0, 0, 5, Opcode::SLT, 0, 3, 3), + AluEvent::new(0, 5, Opcode::SLT, 0, 3, 3), // 0 == -3 < -3 - AluEvent::new(0, 0, 5, Opcode::SLT, 0, NEG_3, NEG_3), + AluEvent::new(0, 5, Opcode::SLT, 0, NEG_3, NEG_3), ]; prove_babybear_template(&mut shard); @@ -540,17 +526,17 @@ mod tests { const LARGE: u32 = 0b11111111111111111111111111111101; shard.lt_events = vec![ // 0 == 3 < 2 - AluEvent::new(0, 0, 0, Opcode::SLTU, 0, 3, 2), + AluEvent::new(0, 0, Opcode::SLTU, 0, 3, 2), // 1 == 2 < 3 - AluEvent::new(0, 0, 1, Opcode::SLTU, 1, 2, 3), + AluEvent::new(0, 1, Opcode::SLTU, 1, 2, 3), // 0 == LARGE < 5 - AluEvent::new(0, 0, 2, Opcode::SLTU, 0, LARGE, 5), + AluEvent::new(0, 2, Opcode::SLTU, 0, LARGE, 5), // 1 == 5 < LARGE - AluEvent::new(0, 0, 3, Opcode::SLTU, 1, 5, LARGE), + AluEvent::new(0, 3, Opcode::SLTU, 1, 5, LARGE), // 0 == 0 < 0 - AluEvent::new(0, 0, 5, Opcode::SLTU, 0, 0, 0), + AluEvent::new(0, 5, Opcode::SLTU, 0, 0, 0), // 0 == LARGE < LARGE - AluEvent::new(0, 0, 5, Opcode::SLTU, 0, LARGE, LARGE), + AluEvent::new(0, 5, Opcode::SLTU, 0, LARGE, LARGE), ]; prove_babybear_template(&mut shard); diff --git a/crates/core/machine/src/alu/mul/mod.rs b/crates/core/machine/src/alu/mul/mod.rs index abde41848b..af1c9282fc 100644 --- a/crates/core/machine/src/alu/mul/mod.rs +++ b/crates/core/machine/src/alu/mul/mod.rs @@ -73,9 +73,6 @@ pub struct MulCols { /// The shard number, used for byte lookup table. pub shard: T, - /// The channel number, used for byte lookup table. - pub channel: T, - /// The nonce of the operation. pub nonce: T, @@ -194,7 +191,6 @@ impl MachineAir for MulChip { let most_significant_byte = word[WORD_SIZE - 1]; blu_events.push(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::MSB, a1: get_msb(*word) as u16, a2: 0, @@ -238,20 +234,11 @@ impl MachineAir for MulChip { cols.is_mulhu = F::from_bool(event.opcode == Opcode::MULHU); cols.is_mulhsu = F::from_bool(event.opcode == Opcode::MULHSU); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); // Range check. { - record.add_u16_range_checks( - event.shard, - event.channel, - &carry.map(|x| x as u16), - ); - record.add_u8_range_checks( - event.shard, - event.channel, - &product.map(|x| x as u8), - ); + record.add_u16_range_checks(event.shard, &carry.map(|x| x as u16)); + record.add_u8_range_checks(event.shard, &product.map(|x| x as u8)); } row }) @@ -327,15 +314,7 @@ where for msb_pair in msb_pairs.iter() { let msb = msb_pair.0; let byte = msb_pair.1; - builder.send_byte( - opcode, - msb, - byte, - zero.clone(), - local.shard, - local.channel, - local.is_real, - ); + builder.send_byte(opcode, msb, byte, zero.clone(), local.is_real); } (local.b_msb, local.c_msb) }; @@ -447,9 +426,9 @@ where // Ensure that the carry is at most 2^16. This ensures that // product_before_carry_propagation - carry * base + last_carry never overflows or // underflows enough to "wrap" around to create a second solution. - builder.slice_range_check_u16(&local.carry, local.shard, local.channel, local.is_real); + builder.slice_range_check_u16(&local.carry, local.is_real); - builder.slice_range_check_u8(&local.product, local.shard, local.channel, local.is_real); + builder.slice_range_check_u8(&local.product, local.is_real); } // Receive the arguments. @@ -459,7 +438,6 @@ where local.b, local.c, local.shard, - local.channel, local.nonce, local.is_real, ); @@ -485,7 +463,6 @@ mod tests { let mut mul_events: Vec = Vec::new(); for _ in 0..10i32.pow(7) { mul_events.push(AluEvent::new( - 0, 0, 0, Opcode::MULHSU, @@ -561,12 +538,12 @@ mod tests { (Opcode::MULH, 0xffffffff, 0x00000001, 0xffffffff), ]; for t in mul_instructions.iter() { - mul_events.push(AluEvent::new(0, 0, 0, t.0, t.1, t.2, t.3)); + mul_events.push(AluEvent::new(0, 0, t.0, t.1, t.2, t.3)); } // Append more events until we have 1000 tests. for _ in 0..(1000 - mul_instructions.len()) { - mul_events.push(AluEvent::new(0, 0, 0, Opcode::MUL, 1, 1, 1)); + mul_events.push(AluEvent::new(0, 0, Opcode::MUL, 1, 1, 1)); } shard.mul_events = mul_events; diff --git a/crates/core/machine/src/alu/sll/mod.rs b/crates/core/machine/src/alu/sll/mod.rs index 78c2fd7612..a89e3f1545 100644 --- a/crates/core/machine/src/alu/sll/mod.rs +++ b/crates/core/machine/src/alu/sll/mod.rs @@ -68,9 +68,6 @@ pub struct ShiftLeftCols { /// The shard number, used for byte lookup table. pub shard: T, - /// The channel number, used for byte lookup table. - pub channel: T, - /// The nonce of the operation. pub nonce: T, @@ -203,7 +200,6 @@ impl ShiftLeft { let b = event.b.to_le_bytes(); let c = event.c.to_le_bytes(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.a = Word(a.map(F::from_canonical_u8)); cols.b = Word(b.map(F::from_canonical_u8)); cols.c = Word(c.map(F::from_canonical_u8)); @@ -242,8 +238,8 @@ impl ShiftLeft { // Range checks. { - blu.add_u8_range_checks(event.shard, event.channel, &bit_shift_result); - blu.add_u8_range_checks(event.shard, event.channel, &bit_shift_result_carry); + blu.add_u8_range_checks(event.shard, &bit_shift_result); + blu.add_u8_range_checks(event.shard, &bit_shift_result_carry); } // Sanity check. @@ -369,18 +365,8 @@ where // Range check. { - builder.slice_range_check_u8( - &local.bit_shift_result, - local.shard, - local.channel, - local.is_real, - ); - builder.slice_range_check_u8( - &local.bit_shift_result_carry, - local.shard, - local.channel, - local.is_real, - ); + builder.slice_range_check_u8(&local.bit_shift_result, local.is_real); + builder.slice_range_check_u8(&local.bit_shift_result_carry, local.is_real); } for shift in local.shift_by_n_bytes.iter() { @@ -401,7 +387,6 @@ where local.b, local.c, local.shard, - local.channel, local.nonce, local.is_real, ); @@ -422,7 +407,7 @@ mod tests { #[test] fn generate_trace() { let mut shard = ExecutionRecord::default(); - shard.shift_left_events = vec![AluEvent::new(0, 0, 0, Opcode::SLL, 16, 8, 1)]; + shard.shift_left_events = vec![AluEvent::new(0, 0, Opcode::SLL, 16, 8, 1)]; let chip = ShiftLeft::default(); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); @@ -457,7 +442,7 @@ mod tests { (Opcode::SLL, 0x00000000, 0x21212120, 0xffffffff), ]; for t in shift_instructions.iter() { - shift_events.push(AluEvent::new(0, 0, 0, t.0, t.1, t.2, t.3)); + shift_events.push(AluEvent::new(0, 0, t.0, t.1, t.2, t.3)); } // Append more events until we have 1000 tests. diff --git a/crates/core/machine/src/alu/sr/mod.rs b/crates/core/machine/src/alu/sr/mod.rs index a384bd34b2..9142138aee 100644 --- a/crates/core/machine/src/alu/sr/mod.rs +++ b/crates/core/machine/src/alu/sr/mod.rs @@ -88,9 +88,6 @@ pub struct ShiftRightCols { /// The shard number, used for byte lookup table. pub shard: T, - /// The channel number, used for byte lookup table. - pub channel: T, - /// The nonce of the operation. pub nonce: T, @@ -238,7 +235,6 @@ impl ShiftRightChip { // Initialize cols with basic operands and flags derived from the current event. { cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.a = Word::from(event.a); cols.b = Word::from(event.b); cols.c = Word::from(event.c); @@ -258,7 +254,6 @@ impl ShiftRightChip { let most_significant_byte = event.b.to_le_bytes()[WORD_SIZE - 1]; blu.add_byte_lookup_events(vec![ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::MSB, a1: ((most_significant_byte >> 7) & 1) as u16, a2: 0, @@ -308,7 +303,6 @@ impl ShiftRightChip { let byte_event = ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::ShrCarry, a1: shift as u16, a2: carry, @@ -330,10 +324,10 @@ impl ShiftRightChip { debug_assert_eq!(cols.a[i], cols.bit_shift_result[i].clone()); } // Range checks. - blu.add_u8_range_checks(event.shard, event.channel, &byte_shift_result); - blu.add_u8_range_checks(event.shard, event.channel, &bit_shift_result); - blu.add_u8_range_checks(event.shard, event.channel, &shr_carry_output_carry); - blu.add_u8_range_checks(event.shard, event.channel, &shr_carry_output_shifted_byte); + blu.add_u8_range_checks(event.shard, &byte_shift_result); + blu.add_u8_range_checks(event.shard, &bit_shift_result); + blu.add_u8_range_checks(event.shard, &shr_carry_output_carry); + blu.add_u8_range_checks(event.shard, &shr_carry_output_shifted_byte); } } } @@ -366,15 +360,7 @@ where let byte = local.b[WORD_SIZE - 1]; let opcode = AB::F::from_canonical_u32(ByteOpcode::MSB as u32); let msb = local.b_msb; - builder.send_byte( - opcode, - msb, - byte, - zero.clone(), - local.shard, - local.channel, - local.is_real, - ); + builder.send_byte(opcode, msb, byte, zero.clone(), local.is_real); } // Calculate the number of bits and bytes to shift by from c. @@ -473,8 +459,6 @@ where local.shr_carry_output_carry[i], local.byte_shift_result[i], num_bits_to_shift.clone(), - local.shard, - local.channel, local.is_real, ); } @@ -524,7 +508,7 @@ where ]; for long_word in long_words.iter() { - builder.slice_range_check_u8(long_word, local.shard, local.channel, local.is_real); + builder.slice_range_check_u8(long_word, local.is_real); } } @@ -544,7 +528,6 @@ where local.b, local.c, local.shard, - local.channel, local.nonce, local.is_real, ); @@ -564,7 +547,7 @@ mod tests { #[test] fn generate_trace() { let mut shard = ExecutionRecord::default(); - shard.shift_right_events = vec![AluEvent::new(0, 0, 0, Opcode::SRL, 6, 12, 1)]; + shard.shift_right_events = vec![AluEvent::new(0, 0, Opcode::SRL, 6, 12, 1)]; let chip = ShiftRightChip::default(); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); @@ -615,7 +598,7 @@ mod tests { ]; let mut shift_events: Vec = Vec::new(); for t in shifts.iter() { - shift_events.push(AluEvent::new(0, 0, 0, t.0, t.1, t.2, t.3)); + shift_events.push(AluEvent::new(0, 0, t.0, t.1, t.2, t.3)); } let mut shard = ExecutionRecord::default(); shard.shift_right_events = shift_events; diff --git a/crates/core/machine/src/bytes/air.rs b/crates/core/machine/src/bytes/air.rs index 210783a89e..3aa2bbe1fa 100644 --- a/crates/core/machine/src/bytes/air.rs +++ b/crates/core/machine/src/bytes/air.rs @@ -8,7 +8,7 @@ use sp1_stark::air::SP1AirBuilder; use super::{ columns::{ByteMultCols, BytePreprocessedCols, NUM_BYTE_MULT_COLS}, - ByteChip, NUM_BYTE_LOOKUP_CHANNELS, + ByteChip, }; impl BaseAir for ByteChip { @@ -28,66 +28,44 @@ impl Air for ByteChip { let local: &BytePreprocessedCols = (*prep).borrow(); // Send all the lookups for each operation. - for channel in 0..NUM_BYTE_LOOKUP_CHANNELS { - let channel_f = AB::F::from_canonical_u8(channel); - let channel = channel as usize; - for (i, opcode) in ByteOpcode::all().iter().enumerate() { - let field_op = opcode.as_field::(); - let mult = local_mult.mult_channels[channel].multiplicities[i]; - let shard = local_mult.shard; - match opcode { - ByteOpcode::AND => builder.receive_byte( - field_op, local.and, local.b, local.c, shard, channel_f, mult, - ), - ByteOpcode::OR => builder - .receive_byte(field_op, local.or, local.b, local.c, shard, channel_f, mult), - ByteOpcode::XOR => builder.receive_byte( - field_op, local.xor, local.b, local.c, shard, channel_f, mult, - ), - ByteOpcode::SLL => builder.receive_byte( - field_op, local.sll, local.b, local.c, shard, channel_f, mult, - ), - ByteOpcode::U8Range => builder.receive_byte( - field_op, - AB::F::zero(), - local.b, - local.c, - shard, - channel_f, - mult, - ), - ByteOpcode::ShrCarry => builder.receive_byte_pair( - field_op, - local.shr, - local.shr_carry, - local.b, - local.c, - shard, - channel_f, - mult, - ), - ByteOpcode::LTU => builder.receive_byte( - field_op, local.ltu, local.b, local.c, shard, channel_f, mult, - ), - ByteOpcode::MSB => builder.receive_byte( - field_op, - local.msb, - local.b, - AB::F::zero(), - shard, - channel_f, - mult, - ), - ByteOpcode::U16Range => builder.receive_byte( - field_op, - local.value_u16, - AB::F::zero(), - AB::F::zero(), - shard, - channel_f, - mult, - ), + for (i, opcode) in ByteOpcode::all().iter().enumerate() { + let field_op = opcode.as_field::(); + let mult = local_mult.multiplicities[i]; + match opcode { + ByteOpcode::AND => { + builder.receive_byte(field_op, local.and, local.b, local.c, mult) } + ByteOpcode::OR => builder.receive_byte(field_op, local.or, local.b, local.c, mult), + ByteOpcode::XOR => { + builder.receive_byte(field_op, local.xor, local.b, local.c, mult) + } + ByteOpcode::SLL => { + builder.receive_byte(field_op, local.sll, local.b, local.c, mult) + } + ByteOpcode::U8Range => { + builder.receive_byte(field_op, AB::F::zero(), local.b, local.c, mult) + } + ByteOpcode::ShrCarry => builder.receive_byte_pair( + field_op, + local.shr, + local.shr_carry, + local.b, + local.c, + mult, + ), + ByteOpcode::LTU => { + builder.receive_byte(field_op, local.ltu, local.b, local.c, mult) + } + ByteOpcode::MSB => { + builder.receive_byte(field_op, local.msb, local.b, AB::F::zero(), mult) + } + ByteOpcode::U16Range => builder.receive_byte( + field_op, + local.value_u16, + AB::F::zero(), + AB::F::zero(), + mult, + ), } } } diff --git a/crates/core/machine/src/bytes/columns.rs b/crates/core/machine/src/bytes/columns.rs index 7134331f63..49e3edab5b 100644 --- a/crates/core/machine/src/bytes/columns.rs +++ b/crates/core/machine/src/bytes/columns.rs @@ -1,7 +1,7 @@ use sp1_derive::AlignedBorrow; use std::mem::size_of; -use super::{NUM_BYTE_LOOKUP_CHANNELS, NUM_BYTE_OPS}; +use super::NUM_BYTE_OPS; /// The number of main trace columns for `ByteChip`. pub const NUM_BYTE_PREPROCESSED_COLS: usize = size_of::>(); @@ -44,22 +44,11 @@ pub struct BytePreprocessedCols { pub value_u16: T, } -/// For each byte operation in the preprocessed table, a corresponding ByteMultCols row tracks the -/// number of times the operation is used. -#[derive(Debug, Clone, Copy, AlignedBorrow)] -#[repr(C)] -pub struct MultiplicitiesCols { - pub multiplicities: [T; NUM_BYTE_OPS], -} - /// For each byte operation in the preprocessed table, a corresponding ByteMultCols row tracks the /// number of times the operation is used. #[derive(Debug, Clone, Copy, AlignedBorrow)] #[repr(C)] pub struct ByteMultCols { - /// Shard number is tracked so that the multiplicities do not overflow. - pub shard: T, - /// The multiplicites of each byte operation. - pub mult_channels: [MultiplicitiesCols; NUM_BYTE_LOOKUP_CHANNELS as usize], + pub multiplicities: [T; NUM_BYTE_OPS], } diff --git a/crates/core/machine/src/bytes/mod.rs b/crates/core/machine/src/bytes/mod.rs index 91e72bf7f2..aad2545e78 100644 --- a/crates/core/machine/src/bytes/mod.rs +++ b/crates/core/machine/src/bytes/mod.rs @@ -23,9 +23,6 @@ use crate::bytes::trace::NUM_ROWS; /// The number of different byte operations. pub const NUM_BYTE_OPS: usize = 9; -/// The number of different byte lookup channels. -pub const NUM_BYTE_LOOKUP_CHANNELS: u8 = 16; - /// A chip for computing byte operations. /// /// The chip contains a preprocessed table of all possible byte operations. Other chips can then @@ -59,55 +56,51 @@ impl ByteChip { // Iterate over all operations for results and updating the table map. let shard = 0; - for channel in 0..NUM_BYTE_LOOKUP_CHANNELS { - for opcode in opcodes.iter() { - match opcode { - ByteOpcode::AND => { - let and = b & c; - col.and = F::from_canonical_u8(and); - ByteLookupEvent::new(shard, channel, *opcode, and as u16, 0, b, c) - } - ByteOpcode::OR => { - let or = b | c; - col.or = F::from_canonical_u8(or); - ByteLookupEvent::new(shard, channel, *opcode, or as u16, 0, b, c) - } - ByteOpcode::XOR => { - let xor = b ^ c; - col.xor = F::from_canonical_u8(xor); - ByteLookupEvent::new(shard, channel, *opcode, xor as u16, 0, b, c) - } - ByteOpcode::SLL => { - let sll = b << (c & 7); - col.sll = F::from_canonical_u8(sll); - ByteLookupEvent::new(shard, channel, *opcode, sll as u16, 0, b, c) - } - ByteOpcode::U8Range => { - ByteLookupEvent::new(shard, channel, *opcode, 0, 0, b, c) - } - ByteOpcode::ShrCarry => { - let (res, carry) = shr_carry(b, c); - col.shr = F::from_canonical_u8(res); - col.shr_carry = F::from_canonical_u8(carry); - ByteLookupEvent::new(shard, channel, *opcode, res as u16, carry, b, c) - } - ByteOpcode::LTU => { - let ltu = b < c; - col.ltu = F::from_bool(ltu); - ByteLookupEvent::new(shard, channel, *opcode, ltu as u16, 0, b, c) - } - ByteOpcode::MSB => { - let msb = (b & 0b1000_0000) != 0; - col.msb = F::from_bool(msb); - ByteLookupEvent::new(shard, channel, *opcode, msb as u16, 0, b, 0) - } - ByteOpcode::U16Range => { - let v = ((b as u32) << 8) + c as u32; - col.value_u16 = F::from_canonical_u32(v); - ByteLookupEvent::new(shard, channel, *opcode, v as u16, 0, 0, 0) - } - }; - } + for opcode in opcodes.iter() { + match opcode { + ByteOpcode::AND => { + let and = b & c; + col.and = F::from_canonical_u8(and); + ByteLookupEvent::new(shard, *opcode, and as u16, 0, b, c) + } + ByteOpcode::OR => { + let or = b | c; + col.or = F::from_canonical_u8(or); + ByteLookupEvent::new(shard, *opcode, or as u16, 0, b, c) + } + ByteOpcode::XOR => { + let xor = b ^ c; + col.xor = F::from_canonical_u8(xor); + ByteLookupEvent::new(shard, *opcode, xor as u16, 0, b, c) + } + ByteOpcode::SLL => { + let sll = b << (c & 7); + col.sll = F::from_canonical_u8(sll); + ByteLookupEvent::new(shard, *opcode, sll as u16, 0, b, c) + } + ByteOpcode::U8Range => ByteLookupEvent::new(shard, *opcode, 0, 0, b, c), + ByteOpcode::ShrCarry => { + let (res, carry) = shr_carry(b, c); + col.shr = F::from_canonical_u8(res); + col.shr_carry = F::from_canonical_u8(carry); + ByteLookupEvent::new(shard, *opcode, res as u16, carry, b, c) + } + ByteOpcode::LTU => { + let ltu = b < c; + col.ltu = F::from_bool(ltu); + ByteLookupEvent::new(shard, *opcode, ltu as u16, 0, b, c) + } + ByteOpcode::MSB => { + let msb = (b & 0b1000_0000) != 0; + col.msb = F::from_bool(msb); + ByteLookupEvent::new(shard, *opcode, msb as u16, 0, b, 0) + } + ByteOpcode::U16Range => { + let v = ((b as u32) << 8) + c as u32; + col.value_u16 = F::from_canonical_u32(v); + ByteLookupEvent::new(shard, *opcode, v as u16, 0, 0, 0) + } + }; } } diff --git a/crates/core/machine/src/bytes/trace.rs b/crates/core/machine/src/bytes/trace.rs index 0ea612ca44..e370009792 100644 --- a/crates/core/machine/src/bytes/trace.rs +++ b/crates/core/machine/src/bytes/trace.rs @@ -1,6 +1,5 @@ use std::borrow::BorrowMut; -use hashbrown::HashMap; use p3_field::Field; use p3_matrix::dense::RowMajorMatrix; use sp1_core_executor::{ByteOpcode, ExecutionRecord, Program}; @@ -43,19 +42,18 @@ impl MachineAir for ByteChip { let mut trace = RowMajorMatrix::new(vec![F::zero(); NUM_BYTE_MULT_COLS * NUM_ROWS], NUM_BYTE_MULT_COLS); - let shard = input.public_values.execution_shard; - for (lookup, mult) in input.byte_lookups.get(&shard).unwrap_or(&HashMap::new()).iter() { - let row = if lookup.opcode != ByteOpcode::U16Range { - (((lookup.b as u16) << 8) + lookup.c as u16) as usize - } else { - lookup.a1 as usize - }; - let index = lookup.opcode as usize; - let channel = lookup.channel as usize; + for (_, blu) in input.byte_lookups.iter() { + for (lookup, mult) in blu.iter() { + let row = if lookup.opcode != ByteOpcode::U16Range { + (((lookup.b as u16) << 8) + lookup.c as u16) as usize + } else { + lookup.a1 as usize + }; + let index = lookup.opcode as usize; - let cols: &mut ByteMultCols = trace.row_mut(row).borrow_mut(); - cols.mult_channels[channel].multiplicities[index] += F::from_canonical_usize(*mult); - cols.shard = F::from_canonical_u32(shard); + let cols: &mut ByteMultCols = trace.row_mut(row).borrow_mut(); + cols.multiplicities[index] += F::from_canonical_usize(*mult); + } } trace diff --git a/crates/core/machine/src/cpu/air/branch.rs b/crates/core/machine/src/cpu/air/branch.rs index 1377d1a14e..d8c615682f 100644 --- a/crates/core/machine/src/cpu/air/branch.rs +++ b/crates/core/machine/src/cpu/air/branch.rs @@ -88,7 +88,6 @@ impl CpuChip { branch_cols.pc, local.op_c_val(), local.shard, - local.channel, branch_cols.next_pc_nonce, local.branching, ); @@ -186,7 +185,6 @@ impl CpuChip { local.op_a_val(), local.op_b_val(), local.shard, - local.channel, branch_cols.a_lt_b_nonce, is_branch_instruction.clone(), ); @@ -199,7 +197,6 @@ impl CpuChip { local.op_b_val(), local.op_a_val(), local.shard, - local.channel, branch_cols.a_gt_b_nonce, is_branch_instruction.clone(), ); diff --git a/crates/core/machine/src/cpu/air/ecall.rs b/crates/core/machine/src/cpu/air/ecall.rs index 8a88453a7a..9c05105bcc 100644 --- a/crates/core/machine/src/cpu/air/ecall.rs +++ b/crates/core/machine/src/cpu/air/ecall.rs @@ -2,7 +2,10 @@ use p3_air::AirBuilder; use p3_field::AbstractField; use sp1_core_executor::syscalls::SyscallCode; use sp1_stark::{ - air::{BaseAirBuilder, PublicValues, SP1AirBuilder, POSEIDON_NUM_WORDS, PV_DIGEST_NUM_WORDS}, + air::{ + BaseAirBuilder, InteractionScope, PublicValues, SP1AirBuilder, POSEIDON_NUM_WORDS, + PV_DIGEST_NUM_WORDS, + }, Word, }; @@ -50,13 +53,13 @@ impl CpuChip { builder.send_syscall( local.shard, - local.channel, local.clk, ecall_cols.syscall_nonce, syscall_id, local.op_b_val().reduce::(), local.op_c_val().reduce::(), local.ecall_mul_send_to_table, + InteractionScope::Local, ); // Compute whether this ecall is ENTER_UNCONSTRAINED. diff --git a/crates/core/machine/src/cpu/air/memory.rs b/crates/core/machine/src/cpu/air/memory.rs index 4ab7e1036e..efceb98f97 100644 --- a/crates/core/machine/src/cpu/air/memory.rs +++ b/crates/core/machine/src/cpu/air/memory.rs @@ -72,7 +72,6 @@ impl CpuChip { local.op_b_val(), local.op_c_val(), local.shard, - local.channel, memory_columns.addr_word_nonce, is_memory_instruction.clone(), ); @@ -86,12 +85,7 @@ impl CpuChip { ); // Check that each addr_word element is a byte. - builder.slice_range_check_u8( - &memory_columns.addr_word.0, - local.shard, - local.channel, - is_memory_instruction.clone(), - ); + builder.slice_range_check_u8(&memory_columns.addr_word.0, is_memory_instruction.clone()); // Evaluate the addr_offset column and offset flags. self.eval_offset_value_flags(builder, memory_columns, local); @@ -129,7 +123,6 @@ impl CpuChip { // value into the memory columns. builder.eval_memory_access( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(MemoryAccessPosition::Memory as u32), memory_columns.addr_aligned, &memory_columns.memory_access, @@ -181,7 +174,6 @@ impl CpuChip { local.unsigned_mem_val, signed_value, local.shard, - local.channel, local.unsigned_mem_val_nonce, local.mem_value_is_neg_not_x0, ); diff --git a/crates/core/machine/src/cpu/air/mod.rs b/crates/core/machine/src/cpu/air/mod.rs index 880e76e36c..bc925b30ac 100644 --- a/crates/core/machine/src/cpu/air/mod.rs +++ b/crates/core/machine/src/cpu/air/mod.rs @@ -23,7 +23,7 @@ use crate::{ }; use sp1_core_executor::Opcode; -use super::columns::{eval_channel_selectors, OPCODE_SELECTORS_COL_MAP}; +use super::columns::OPCODE_SELECTORS_COL_MAP; impl Air for CpuChip where @@ -63,16 +63,6 @@ where self.eval_memory_load::(builder, local); self.eval_memory_store::(builder, local); - // Channel constraints. - eval_channel_selectors( - builder, - &local.channel_selectors, - &next.channel_selectors, - local.channel, - local.is_real, - next.is_real, - ); - // ALU instructions. builder.send_alu( local.instruction.opcode, @@ -80,7 +70,6 @@ where local.op_b_val(), local.op_c_val(), local.shard, - local.channel, local.nonce, is_alu_instruction, ); @@ -207,7 +196,6 @@ impl CpuChip { jump_columns.pc, local.op_b_val(), local.shard, - local.channel, jump_columns.jal_nonce, local.selectors.is_jal, ); @@ -219,7 +207,6 @@ impl CpuChip { local.op_b_val(), local.op_c_val(), local.shard, - local.channel, jump_columns.jalr_nonce, local.selectors.is_jalr, ); @@ -248,7 +235,6 @@ impl CpuChip { auipc_columns.pc, local.op_b_val(), local.shard, - local.channel, auipc_columns.auipc_nonce, local.selectors.is_auipc, ); @@ -276,8 +262,6 @@ impl CpuChip { local.shard, AB::Expr::zero(), AB::Expr::zero(), - local.shard, - local.channel, local.is_real, ); @@ -300,8 +284,6 @@ impl CpuChip { local.clk, local.clk_16bit_limb, local.clk_8bit_limb, - local.shard, - local.channel, local.is_real, ); } diff --git a/crates/core/machine/src/cpu/air/register.rs b/crates/core/machine/src/cpu/air/register.rs index 8ffa86248c..7be28c6099 100644 --- a/crates/core/machine/src/cpu/air/register.rs +++ b/crates/core/machine/src/cpu/air/register.rs @@ -27,7 +27,6 @@ impl CpuChip { // If they are not immediates, read `b` and `c` from memory. builder.eval_memory_access( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(MemoryAccessPosition::B as u32), local.instruction.op_b[0], &local.op_b_access, @@ -36,7 +35,6 @@ impl CpuChip { builder.eval_memory_access( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(MemoryAccessPosition::C as u32), local.instruction.op_c[0], &local.op_c_access, @@ -50,7 +48,6 @@ impl CpuChip { // we are performing a branch or a store. builder.eval_memory_access( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(MemoryAccessPosition::A as u32), local.instruction.op_a[0], &local.op_a_access, @@ -59,12 +56,7 @@ impl CpuChip { // Always range check the word value in `op_a`, as JUMP instructions may witness // an invalid word and write it to memory. - builder.slice_range_check_u8( - &local.op_a_access.access.value.0, - local.shard, - local.channel, - local.is_real, - ); + builder.slice_range_check_u8(&local.op_a_access.access.value.0, local.is_real); // If we are performing a branch or a store, then the value of `a` is the previous value. builder diff --git a/crates/core/machine/src/cpu/columns/channel.rs b/crates/core/machine/src/cpu/columns/channel.rs deleted file mode 100644 index 1f1d6ec535..0000000000 --- a/crates/core/machine/src/cpu/columns/channel.rs +++ /dev/null @@ -1,59 +0,0 @@ -use p3_air::AirBuilder; -use p3_field::{AbstractField, Field}; -use sp1_derive::AlignedBorrow; -use sp1_stark::air::SP1AirBuilder; - -use crate::bytes::NUM_BYTE_LOOKUP_CHANNELS; - -#[derive(AlignedBorrow, Default, Debug, Clone, Copy)] -#[repr(C)] -pub struct ChannelSelectorCols { - pub channel_selectors: [T; NUM_BYTE_LOOKUP_CHANNELS as usize], -} - -impl ChannelSelectorCols { - #[inline(always)] - pub fn populate(&mut self, channel: u8) { - self.channel_selectors = [F::zero(); NUM_BYTE_LOOKUP_CHANNELS as usize]; - self.channel_selectors[channel as usize] = F::one(); - } -} - -pub fn eval_channel_selectors( - builder: &mut AB, - local: &ChannelSelectorCols, - next: &ChannelSelectorCols, - channel: impl Into + Clone, - local_is_real: impl Into + Clone, - next_is_real: impl Into + Clone, -) { - // Constrain: - // - the value of the channel is given by the channel selectors. - // - all selectors are boolean and disjoint. - let mut sum = AB::Expr::zero(); - let mut reconstruct_channel = AB::Expr::zero(); - for (i, selector) in local.channel_selectors.into_iter().enumerate() { - // Constrain that the selector is boolean. - builder.assert_bool(selector); - // Accumulate the sum of the selectors. - sum += selector.into(); - // Accumulate the reconstructed channel. - reconstruct_channel += selector.into() * AB::Expr::from_canonical_u32(i as u32); - } - // Assert that the reconstructed channel is the same as the channel. - builder.assert_eq(reconstruct_channel, channel.clone()); - // For disjointness, assert the sum of the selectors is 1. - builder.when(local_is_real.clone()).assert_eq(sum, AB::Expr::one()); - - // Constrain the first row by asserting that the first selector on the first line is true. - builder.when_first_row().assert_one(local.channel_selectors[0]); - - // Constrain the transition by asserting that the selectors satisfy the recursion relation: - // selectors_next[(i + 1) % NUM_BYTE_LOOKUP_CHANNELS] = selectors[i] - for i in 0..NUM_BYTE_LOOKUP_CHANNELS as usize { - builder.when_transition().when(next_is_real.clone()).assert_eq( - local.channel_selectors[i], - next.channel_selectors[(i + 1) % NUM_BYTE_LOOKUP_CHANNELS as usize], - ); - } -} diff --git a/crates/core/machine/src/cpu/columns/mod.rs b/crates/core/machine/src/cpu/columns/mod.rs index 3f382677ee..7a32b03db5 100644 --- a/crates/core/machine/src/cpu/columns/mod.rs +++ b/crates/core/machine/src/cpu/columns/mod.rs @@ -1,6 +1,5 @@ mod auipc; mod branch; -mod channel; mod ecall; mod instruction; mod jump; @@ -10,7 +9,6 @@ mod opcode_specific; pub use auipc::*; pub use branch::*; -pub use channel::*; pub use ecall::*; pub use instruction::*; pub use jump::*; @@ -35,8 +33,6 @@ pub const CPU_COL_MAP: CpuCols = make_col_map(); pub struct CpuCols { /// The current shard. pub shard: T, - /// The channel value, used for byte lookup multiplicity. - pub channel: T, pub nonce: T, @@ -56,9 +52,6 @@ pub struct CpuCols { /// Columns related to the instruction. pub instruction: InstructionCols, - /// Columns related to the byte lookup channel. - pub channel_selectors: ChannelSelectorCols, - /// Selectors for the opcode. pub selectors: OpcodeSelectorCols, diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index 790c8368b2..ce0eba1cfe 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -1,10 +1,7 @@ use hashbrown::HashMap; use itertools::Itertools; use sp1_core_executor::{ - events::{ - create_alu_lookups, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, LookupId, - MemoryRecordEnum, - }, + events::{ByteLookupEvent, ByteRecord, CpuEvent, LookupId, MemoryRecordEnum}, syscalls::SyscallCode, ByteOpcode::{self, U16Range}, CoreShape, ExecutionRecord, Opcode, Program, @@ -74,28 +71,20 @@ impl MachineAir for CpuChip { // Generate the trace rows for each event. let chunk_size = std::cmp::max(input.cpu_events.len() / num_cpus::get(), 1); - let (alu_events, blu_events): (Vec<_>, Vec<_>) = input + let blu_events: Vec<_> = input .cpu_events .par_chunks(chunk_size) .map(|ops: &[CpuEvent]| { - let mut alu = HashMap::new(); // The blu map stores shard -> map(byte lookup event -> multiplicity). let mut blu: HashMap> = HashMap::new(); ops.iter().for_each(|op| { let mut row = [F::zero(); NUM_CPU_COLS]; let cols: &mut CpuCols = row.as_mut_slice().borrow_mut(); - let alu_events = self.event_to_row::(op, &HashMap::new(), cols, &mut blu); - alu_events.into_iter().for_each(|(key, value)| { - alu.entry(key).or_insert(Vec::default()).extend(value); - }); + self.event_to_row::(op, &HashMap::new(), cols, &mut blu); }); - (alu, blu) + blu }) - .unzip(); - - for alu_events_chunk in alu_events.into_iter() { - output.add_alu_events(alu_events_chunk); - } + .collect::>(); output.add_sharded_byte_lookup_events(blu_events.iter().collect_vec()); } @@ -113,9 +102,7 @@ impl CpuChip { nonce_lookup: &HashMap, cols: &mut CpuCols, blu_events: &mut impl ByteRecord, - ) -> HashMap> { - let mut new_alu_events = HashMap::new(); - + ) { // Populate shard and clk columns. self.populate_shard_clk(cols, event, blu_events); @@ -135,13 +122,13 @@ impl CpuChip { // Populate memory accesses for a, b, and c. if let Some(record) = event.a_record { - cols.op_a_access.populate(event.channel, record, blu_events); + cols.op_a_access.populate(record, blu_events); } if let Some(MemoryRecordEnum::Read(record)) = event.b_record { - cols.op_b_access.populate(event.channel, record, blu_events); + cols.op_b_access.populate(record, blu_events); } if let Some(MemoryRecordEnum::Read(record)) = event.c_record { - cols.op_c_access.populate(event.channel, record, blu_events); + cols.op_c_access.populate(record, blu_events); } // Populate range checks for a. @@ -155,7 +142,6 @@ impl CpuChip { .collect::>(); blu_events.add_byte_lookup_event(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::U8Range, a1: 0, a2: 0, @@ -164,7 +150,6 @@ impl CpuChip { }); blu_events.add_byte_lookup_event(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::U8Range, a1: 0, a2: 0, @@ -176,14 +161,14 @@ impl CpuChip { assert_eq!(event.memory_record.is_some(), event.memory.is_some()); let memory_columns = cols.opcode_specific_columns.memory_mut(); if let Some(record) = event.memory_record { - memory_columns.memory_access.populate(event.channel, record, blu_events) + memory_columns.memory_access.populate(record, blu_events) } // Populate memory, branch, jump, and auipc specific fields. - self.populate_memory(cols, event, &mut new_alu_events, blu_events, nonce_lookup); - self.populate_branch(cols, event, &mut new_alu_events, nonce_lookup); - self.populate_jump(cols, event, &mut new_alu_events, nonce_lookup); - self.populate_auipc(cols, event, &mut new_alu_events, nonce_lookup); + self.populate_memory(cols, event, blu_events, nonce_lookup); + self.populate_branch(cols, event, nonce_lookup); + self.populate_jump(cols, event, nonce_lookup); + self.populate_auipc(cols, event, nonce_lookup); let is_halt = self.populate_ecall(cols, event, nonce_lookup); cols.is_sequential_instr = F::from_bool( @@ -194,11 +179,9 @@ impl CpuChip { // Assert that the instruction is not a no-op. cols.is_real = F::one(); - - new_alu_events } - /// Populates the shard, channel, and clk related rows. + /// Populates the shard and clk related rows. fn populate_shard_clk( &self, cols: &mut CpuCols, @@ -206,7 +189,6 @@ impl CpuChip { blu_events: &mut impl ByteRecord, ) { cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); let clk_16bit_limb = (event.clk & 0xffff) as u16; @@ -214,11 +196,8 @@ impl CpuChip { cols.clk_16bit_limb = F::from_canonical_u16(clk_16bit_limb); cols.clk_8bit_limb = F::from_canonical_u8(clk_8bit_limb); - cols.channel_selectors.populate(event.channel); - blu_events.add_byte_lookup_event(ByteLookupEvent::new( event.shard, - event.channel, U16Range, event.shard as u16, 0, @@ -227,7 +206,6 @@ impl CpuChip { )); blu_events.add_byte_lookup_event(ByteLookupEvent::new( event.shard, - event.channel, U16Range, clk_16bit_limb, 0, @@ -236,7 +214,6 @@ impl CpuChip { )); blu_events.add_byte_lookup_event(ByteLookupEvent::new( event.shard, - event.channel, ByteOpcode::U8Range, 0, 0, @@ -250,7 +227,6 @@ impl CpuChip { &self, cols: &mut CpuCols, event: &CpuEvent, - new_alu_events: &mut HashMap>, blu_events: &mut impl ByteRecord, nonce_lookup: &HashMap, ) { @@ -281,23 +257,6 @@ impl CpuChip { let aligned_addr_ls_byte = (aligned_addr & 0x000000FF) as u8; let bits: [bool; 8] = array::from_fn(|i| aligned_addr_ls_byte & (1 << i) != 0); memory_columns.aa_least_sig_byte_decomp = array::from_fn(|i| F::from_bool(bits[i + 2])); - - // Add event to ALU check to check that addr == b + c - let add_event = AluEvent { - lookup_id: event.memory_add_lookup_id, - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::ADD, - a: memory_addr, - b: event.b, - c: event.c, - sub_lookups: create_alu_lookups(), - }; - new_alu_events - .entry(Opcode::ADD) - .and_modify(|op_new_events| op_new_events.push(add_event)) - .or_insert(vec![add_event]); memory_columns.addr_word_nonce = F::from_canonical_u32( nonce_lookup.get(&event.memory_add_lookup_id).copied().unwrap_or_default(), ); @@ -336,15 +295,10 @@ impl CpuChip { // For the signed load instructions, we need to check if the loaded value is negative. if matches!(event.instruction.opcode, Opcode::LB | Opcode::LH) { - let most_sig_mem_value_byte: u8; - let sign_value: u32; - if matches!(event.instruction.opcode, Opcode::LB) { - sign_value = 256; - most_sig_mem_value_byte = cols.unsigned_mem_val.to_u32().to_le_bytes()[0]; + let most_sig_mem_value_byte = if matches!(event.instruction.opcode, Opcode::LB) { + cols.unsigned_mem_val.to_u32().to_le_bytes()[0] } else { - // LHU case - sign_value = 65536; - most_sig_mem_value_byte = cols.unsigned_mem_val.to_u32().to_le_bytes()[1]; + cols.unsigned_mem_val.to_u32().to_le_bytes()[1] }; for i in (0..8).rev() { @@ -354,25 +308,9 @@ impl CpuChip { if memory_columns.most_sig_byte_decomp[7] == F::one() { cols.mem_value_is_neg_not_x0 = F::from_bool(event.instruction.op_a != (X0 as u32)); - let sub_event = AluEvent { - lookup_id: event.memory_sub_lookup_id, - channel: event.channel, - shard: event.shard, - clk: event.clk, - opcode: Opcode::SUB, - a: event.a, - b: cols.unsigned_mem_val.to_u32(), - c: sign_value, - sub_lookups: create_alu_lookups(), - }; cols.unsigned_mem_val_nonce = F::from_canonical_u32( nonce_lookup.get(&event.memory_sub_lookup_id).copied().unwrap_or_default(), ); - - new_alu_events - .entry(Opcode::SUB) - .and_modify(|op_new_events| op_new_events.push(sub_event)) - .or_insert(vec![sub_event]); } } @@ -390,7 +328,6 @@ impl CpuChip { for byte_pair in addr_bytes.chunks_exact(2) { blu_events.add_byte_lookup_event(ByteLookupEvent { shard: event.shard, - channel: event.channel, opcode: ByteOpcode::U8Range, a1: 0, a2: 0, @@ -405,7 +342,6 @@ impl CpuChip { &self, cols: &mut CpuCols, event: &CpuEvent, - alu_events: &mut HashMap>, nonce_lookup: &HashMap, ) { if event.instruction.is_branch_instruction() { @@ -427,49 +363,14 @@ impl CpuChip { event.a > event.b }; - let alu_op_code = if use_signed_comparison { Opcode::SLT } else { Opcode::SLTU }; - - // Add the ALU events for the comparisons - let lt_comp_event = AluEvent { - lookup_id: event.branch_lt_lookup_id, - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: alu_op_code, - a: a_lt_b as u32, - b: event.a, - c: event.b, - sub_lookups: create_alu_lookups(), - }; branch_columns.a_lt_b_nonce = F::from_canonical_u32( nonce_lookup.get(&event.branch_lt_lookup_id).copied().unwrap_or_default(), ); - alu_events - .entry(alu_op_code) - .and_modify(|op_new_events| op_new_events.push(lt_comp_event)) - .or_insert(vec![lt_comp_event]); - - let gt_comp_event = AluEvent { - lookup_id: event.branch_gt_lookup_id, - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: alu_op_code, - a: a_gt_b as u32, - b: event.b, - c: event.a, - sub_lookups: create_alu_lookups(), - }; branch_columns.a_gt_b_nonce = F::from_canonical_u32( nonce_lookup.get(&event.branch_gt_lookup_id).copied().unwrap_or_default(), ); - alu_events - .entry(alu_op_code) - .and_modify(|op_new_events| op_new_events.push(gt_comp_event)) - .or_insert(vec![gt_comp_event]); - branch_columns.a_eq_b = F::from_bool(a_eq_b); branch_columns.a_lt_b = F::from_bool(a_lt_b); branch_columns.a_gt_b = F::from_bool(a_gt_b); @@ -490,26 +391,9 @@ impl CpuChip { if branching { cols.branching = F::one(); - - let add_event = AluEvent { - lookup_id: event.branch_add_lookup_id, - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::ADD, - a: next_pc, - b: event.pc, - c: event.c, - sub_lookups: create_alu_lookups(), - }; branch_columns.next_pc_nonce = F::from_canonical_u32( nonce_lookup.get(&event.branch_add_lookup_id).copied().unwrap_or_default(), ); - - alu_events - .entry(Opcode::ADD) - .and_modify(|op_new_events| op_new_events.push(add_event)) - .or_insert(vec![add_event]); } else { cols.not_branching = F::one(); } @@ -521,7 +405,6 @@ impl CpuChip { &self, cols: &mut CpuCols, event: &CpuEvent, - alu_events: &mut HashMap>, nonce_lookup: &HashMap, ) { if event.instruction.is_jump_instruction() { @@ -535,52 +418,18 @@ impl CpuChip { jump_columns.pc_range_checker.populate(event.pc); jump_columns.next_pc = Word::from(next_pc); jump_columns.next_pc_range_checker.populate(next_pc); - - let add_event = AluEvent { - lookup_id: event.jump_jal_lookup_id, - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::ADD, - a: next_pc, - b: event.pc, - c: event.b, - sub_lookups: create_alu_lookups(), - }; jump_columns.jal_nonce = F::from_canonical_u32( nonce_lookup.get(&event.jump_jal_lookup_id).copied().unwrap_or_default(), ); - - alu_events - .entry(Opcode::ADD) - .and_modify(|op_new_events| op_new_events.push(add_event)) - .or_insert(vec![add_event]); } Opcode::JALR => { let next_pc = event.b.wrapping_add(event.c); jump_columns.op_a_range_checker.populate(event.a); jump_columns.next_pc = Word::from(next_pc); jump_columns.next_pc_range_checker.populate(next_pc); - - let add_event = AluEvent { - lookup_id: event.jump_jalr_lookup_id, - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::ADD, - a: next_pc, - b: event.b, - c: event.c, - sub_lookups: create_alu_lookups(), - }; jump_columns.jalr_nonce = F::from_canonical_u32( nonce_lookup.get(&event.jump_jalr_lookup_id).copied().unwrap_or_default(), ); - - alu_events - .entry(Opcode::ADD) - .and_modify(|op_new_events| op_new_events.push(add_event)) - .or_insert(vec![add_event]); } _ => unreachable!(), } @@ -592,7 +441,6 @@ impl CpuChip { &self, cols: &mut CpuCols, event: &CpuEvent, - alu_events: &mut HashMap>, nonce_lookup: &HashMap, ) { if matches!(event.instruction.opcode, Opcode::AUIPC) { @@ -600,26 +448,9 @@ impl CpuChip { auipc_columns.pc = Word::from(event.pc); auipc_columns.pc_range_checker.populate(event.pc); - - let add_event = AluEvent { - lookup_id: event.auipc_lookup_id, - shard: event.shard, - channel: event.channel, - clk: event.clk, - opcode: Opcode::ADD, - a: event.a, - b: event.pc, - c: event.b, - sub_lookups: create_alu_lookups(), - }; auipc_columns.auipc_nonce = F::from_canonical_u32( nonce_lookup.get(&event.auipc_lookup_id).copied().unwrap_or_default(), ); - - alu_events - .entry(Opcode::ADD) - .and_modify(|op_new_events| op_new_events.push(add_event)) - .or_insert(vec![add_event]); } } diff --git a/crates/core/machine/src/memory/global.rs b/crates/core/machine/src/memory/global.rs index a382d9855a..d59acbecb5 100644 --- a/crates/core/machine/src/memory/global.rs +++ b/crates/core/machine/src/memory/global.rs @@ -11,7 +11,7 @@ use sp1_core_executor::{events::MemoryInitializeFinalizeEvent, ExecutionRecord, use sp1_derive::AlignedBorrow; use sp1_stark::{ air::{ - AirInteraction, BaseAirBuilder, MachineAir, PublicValues, SP1AirBuilder, + AirInteraction, BaseAirBuilder, InteractionScope, MachineAir, PublicValues, SP1AirBuilder, SP1_PROOF_NUM_PV_ELTS, }, InteractionKind, Word, @@ -22,40 +22,35 @@ use crate::{ utils::pad_rows_fixed, }; -/// The type of memory chip that is being initialized. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum MemoryChipType { - Initialize, - Finalize, -} +use super::MemoryChipType; /// A memory chip that can initialize or finalize values in memory. -pub struct MemoryChip { +pub struct MemoryGlobalChip { pub kind: MemoryChipType, } -impl MemoryChip { +impl MemoryGlobalChip { /// Creates a new memory chip with a certain type. pub const fn new(kind: MemoryChipType) -> Self { Self { kind } } } -impl BaseAir for MemoryChip { +impl BaseAir for MemoryGlobalChip { fn width(&self) -> usize { NUM_MEMORY_INIT_COLS } } -impl MachineAir for MemoryChip { +impl MachineAir for MemoryGlobalChip { type Record = ExecutionRecord; type Program = Program; fn name(&self) -> String { match self.kind { - MemoryChipType::Initialize => "MemoryInit".to_string(), - MemoryChipType::Finalize => "MemoryFinalize".to_string(), + MemoryChipType::Initialize => "MemoryGlobalInit".to_string(), + MemoryChipType::Finalize => "MemoryGlobalFinalize".to_string(), } } @@ -69,8 +64,8 @@ impl MachineAir for MemoryChip { _output: &mut ExecutionRecord, ) -> RowMajorMatrix { let mut memory_events = match self.kind { - MemoryChipType::Initialize => input.memory_initialize_events.clone(), - MemoryChipType::Finalize => input.memory_finalize_events.clone(), + MemoryChipType::Initialize => input.global_memory_initialize_events.clone(), + MemoryChipType::Finalize => input.global_memory_finalize_events.clone(), }; let previous_addr_bits = match self.kind { @@ -139,10 +134,14 @@ impl MachineAir for MemoryChip { fn included(&self, shard: &Self::Record) -> bool { match self.kind { - MemoryChipType::Initialize => !shard.memory_initialize_events.is_empty(), - MemoryChipType::Finalize => !shard.memory_finalize_events.is_empty(), + MemoryChipType::Initialize => !shard.global_memory_initialize_events.is_empty(), + MemoryChipType::Finalize => !shard.global_memory_finalize_events.is_empty(), } } + + fn commit_scope(&self) -> InteractionScope { + InteractionScope::Global + } } #[derive(AlignedBorrow, Debug, Clone, Copy)] @@ -184,7 +183,7 @@ pub struct MemoryInitCols { pub(crate) const NUM_MEMORY_INIT_COLS: usize = size_of::>(); -impl Air for MemoryChip +impl Air for MemoryGlobalChip where AB: SP1AirBuilder, { @@ -215,19 +214,17 @@ where if self.kind == MemoryChipType::Initialize { let mut values = vec![AB::Expr::zero(), AB::Expr::zero(), local.addr.into()]; values.extend(value.map(Into::into)); - builder.receive(AirInteraction::new( - values, - local.is_real.into(), - InteractionKind::Memory, - )); + builder.send( + AirInteraction::new(values, local.is_real.into(), InteractionKind::Memory), + InteractionScope::Global, + ); } else { let mut values = vec![local.shard.into(), local.timestamp.into(), local.addr.into()]; values.extend(value); - builder.send(AirInteraction::new( - values, - local.is_real.into(), - InteractionKind::Memory, - )); + builder.receive( + AirInteraction::new(values, local.is_real.into(), InteractionKind::Memory), + InteractionScope::Global, + ); } // Canonically decompose the address into bits so we can do comparisons. @@ -380,18 +377,18 @@ mod tests { runtime.run().unwrap(); let shard = runtime.record.clone(); - let chip: MemoryChip = MemoryChip::new(MemoryChipType::Initialize); + let chip: MemoryGlobalChip = MemoryGlobalChip::new(MemoryChipType::Initialize); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); println!("{:?}", trace.values); - let chip: MemoryChip = MemoryChip::new(MemoryChipType::Finalize); + let chip: MemoryGlobalChip = MemoryGlobalChip::new(MemoryChipType::Finalize); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); println!("{:?}", trace.values); - for mem_event in shard.memory_finalize_events { + for mem_event in shard.global_memory_finalize_events { println!("{:?}", mem_event); } } @@ -407,14 +404,24 @@ mod tests { RiscvAir::machine(BabyBearPoseidon2::new()); let (pkey, _) = machine.setup(&program_clone); let opts = SP1CoreOpts::default(); - machine.generate_dependencies(&mut runtime.records, &opts); + machine.generate_dependencies(&mut runtime.records, &opts, None); let shards = runtime.records; + for shard in shards.clone() { + debug_interactions_with_all_chips::>( + &machine, + &pkey, + &[shard], + vec![InteractionKind::Memory], + InteractionScope::Local, + ); + } debug_interactions_with_all_chips::>( &machine, &pkey, &shards, vec![InteractionKind::Memory], + InteractionScope::Global, ); } @@ -428,7 +435,7 @@ mod tests { let machine = RiscvAir::machine(BabyBearPoseidon2::new()); let (pkey, _) = machine.setup(&program_clone); let opts = SP1CoreOpts::default(); - machine.generate_dependencies(&mut runtime.records, &opts); + machine.generate_dependencies(&mut runtime.records, &opts, None); let shards = runtime.records; debug_interactions_with_all_chips::>( @@ -436,6 +443,7 @@ mod tests { &pkey, &shards, vec![InteractionKind::Byte], + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/memory/local.rs b/crates/core/machine/src/memory/local.rs new file mode 100644 index 0000000000..bc272d8cac --- /dev/null +++ b/crates/core/machine/src/memory/local.rs @@ -0,0 +1,269 @@ +use std::{ + borrow::{Borrow, BorrowMut}, + mem::size_of, +}; + +use crate::utils::pad_to_power_of_two; +use itertools::Itertools; +use p3_air::{Air, BaseAir}; +use p3_field::PrimeField32; +use p3_matrix::{dense::RowMajorMatrix, Matrix}; +use sp1_core_executor::{ExecutionRecord, Program}; +use sp1_derive::AlignedBorrow; +use sp1_stark::{ + air::{AirInteraction, InteractionScope, MachineAir, SP1AirBuilder}, + InteractionKind, Word, +}; + +const NUM_LOCAL_MEMORY_ENTRIES_PER_ROW: usize = 2; + +pub(crate) const NUM_MEMORY_LOCAL_INIT_COLS: usize = size_of::>(); + +#[derive(AlignedBorrow, Debug, Clone, Copy)] +#[repr(C)] +struct SingleMemoryLocal { + /// The address of the memory access. + pub addr: T, + + /// The initial shard of the memory access. + pub initial_shard: T, + + /// The final shard of the memory access. + pub final_shard: T, + + /// The initial clk of the memory access. + pub initial_clk: T, + + /// The final clk of the memory access. + pub final_clk: T, + + /// The initial value of the memory access. + pub initial_value: Word, + + /// The final value of the memory access. + pub final_value: Word, + + /// Whether the memory access is a real access. + pub is_real: T, +} + +#[derive(AlignedBorrow, Debug, Clone, Copy)] +#[repr(C)] +pub struct MemoryLocalCols { + memory_local_entries: [SingleMemoryLocal; NUM_LOCAL_MEMORY_ENTRIES_PER_ROW], +} + +pub struct MemoryLocalChip {} + +impl MemoryLocalChip { + /// Creates a new memory chip with a certain type. + pub const fn new() -> Self { + Self {} + } +} + +impl BaseAir for MemoryLocalChip { + fn width(&self) -> usize { + NUM_MEMORY_LOCAL_INIT_COLS + } +} + +impl MachineAir for MemoryLocalChip { + type Record = ExecutionRecord; + + type Program = Program; + + fn name(&self) -> String { + "MemoryLocal".to_string() + } + + fn generate_dependencies(&self, _input: &ExecutionRecord, _output: &mut ExecutionRecord) { + // Do nothing since this chip has no dependencies. + } + + fn generate_trace( + &self, + input: &ExecutionRecord, + _output: &mut ExecutionRecord, + ) -> RowMajorMatrix { + let mut rows = Vec::<[F; NUM_MEMORY_LOCAL_INIT_COLS]>::new(); + + for local_mem_events in + &input.get_local_mem_events().chunks(NUM_LOCAL_MEMORY_ENTRIES_PER_ROW) + { + let mut row = [F::zero(); NUM_MEMORY_LOCAL_INIT_COLS]; + let cols: &mut MemoryLocalCols = row.as_mut_slice().borrow_mut(); + + for (cols, event) in cols.memory_local_entries.iter_mut().zip(local_mem_events) { + cols.addr = F::from_canonical_u32(event.addr); + cols.initial_shard = F::from_canonical_u32(event.initial_mem_access.shard); + cols.final_shard = F::from_canonical_u32(event.final_mem_access.shard); + cols.initial_clk = F::from_canonical_u32(event.initial_mem_access.timestamp); + cols.final_clk = F::from_canonical_u32(event.final_mem_access.timestamp); + cols.initial_value = event.initial_mem_access.value.into(); + cols.final_value = event.final_mem_access.value.into(); + cols.is_real = F::one(); + } + + rows.push(row); + } + let mut trace = RowMajorMatrix::new( + rows.into_iter().flatten().collect::>(), + NUM_MEMORY_LOCAL_INIT_COLS, + ); + + pad_to_power_of_two::(&mut trace.values); + + trace + } + + fn included(&self, shard: &Self::Record) -> bool { + shard.get_local_mem_events().nth(0).is_some() + } + + fn commit_scope(&self) -> InteractionScope { + InteractionScope::Global + } +} + +impl Air for MemoryLocalChip +where + AB: SP1AirBuilder, +{ + fn eval(&self, builder: &mut AB) { + let main = builder.main(); + let local = main.row_slice(0); + let local: &MemoryLocalCols = (*local).borrow(); + + for local in local.memory_local_entries.iter() { + builder.assert_eq( + local.is_real * local.is_real * local.is_real, + local.is_real * local.is_real * local.is_real, + ); + + for scope in [InteractionScope::Global, InteractionScope::Local] { + let mut values = + vec![local.initial_shard.into(), local.initial_clk.into(), local.addr.into()]; + values.extend(local.initial_value.map(Into::into)); + builder.receive( + AirInteraction::new( + values.clone(), + local.is_real.into(), + InteractionKind::Memory, + ), + scope, + ); + + let mut values = + vec![local.final_shard.into(), local.final_clk.into(), local.addr.into()]; + values.extend(local.final_value.map(Into::into)); + builder.send( + AirInteraction::new( + values.clone(), + local.is_real.into(), + InteractionKind::Memory, + ), + scope, + ); + } + } + } +} + +#[cfg(test)] +mod tests { + use p3_baby_bear::BabyBear; + use p3_matrix::dense::RowMajorMatrix; + use sp1_core_executor::{programs::tests::simple_program, ExecutionRecord, Executor}; + use sp1_stark::{ + air::{InteractionScope, MachineAir}, + baby_bear_poseidon2::BabyBearPoseidon2, + debug_interactions_with_all_chips, InteractionKind, SP1CoreOpts, StarkMachine, + }; + + use crate::{ + memory::MemoryLocalChip, riscv::RiscvAir, + syscall::precompiles::sha256::extend_tests::sha_extend_program, utils::setup_logger, + }; + + #[test] + fn test_local_memory_generate_trace() { + let program = simple_program(); + let mut runtime = Executor::new(program, SP1CoreOpts::default()); + runtime.run().unwrap(); + let shard = runtime.records[0].clone(); + + let chip: MemoryLocalChip = MemoryLocalChip::new(); + + let trace: RowMajorMatrix = + chip.generate_trace(&shard, &mut ExecutionRecord::default()); + println!("{:?}", trace.values); + + for mem_event in shard.global_memory_finalize_events { + println!("{:?}", mem_event); + } + } + + #[test] + fn test_memory_lookup_interactions() { + setup_logger(); + let program = sha_extend_program(); + let program_clone = program.clone(); + let mut runtime = Executor::new(program, SP1CoreOpts::default()); + runtime.run().unwrap(); + let machine: StarkMachine> = + RiscvAir::machine(BabyBearPoseidon2::new()); + let (pkey, _) = machine.setup(&program_clone); + let opts = SP1CoreOpts::default(); + machine.generate_dependencies(&mut runtime.records, &opts, None); + + let shards = runtime.records; + for shard in shards.clone() { + debug_interactions_with_all_chips::>( + &machine, + &pkey, + &[shard], + vec![InteractionKind::Memory], + InteractionScope::Local, + ); + } + debug_interactions_with_all_chips::>( + &machine, + &pkey, + &shards, + vec![InteractionKind::Memory], + InteractionScope::Global, + ); + } + + #[test] + fn test_byte_lookup_interactions() { + setup_logger(); + let program = sha_extend_program(); + let program_clone = program.clone(); + let mut runtime = Executor::new(program, SP1CoreOpts::default()); + runtime.run().unwrap(); + let machine = RiscvAir::machine(BabyBearPoseidon2::new()); + let (pkey, _) = machine.setup(&program_clone); + let opts = SP1CoreOpts::default(); + machine.generate_dependencies(&mut runtime.records, &opts, None); + + let shards = runtime.records; + for shard in shards.clone() { + debug_interactions_with_all_chips::>( + &machine, + &pkey, + &[shard], + vec![InteractionKind::Memory], + InteractionScope::Local, + ); + } + debug_interactions_with_all_chips::>( + &machine, + &pkey, + &shards, + vec![InteractionKind::Byte], + InteractionScope::Global, + ); + } +} diff --git a/crates/core/machine/src/memory/mod.rs b/crates/core/machine/src/memory/mod.rs index 13f9050f31..ba4a7a650a 100644 --- a/crates/core/machine/src/memory/mod.rs +++ b/crates/core/machine/src/memory/mod.rs @@ -1,8 +1,17 @@ mod columns; mod global; +mod local; mod program; mod trace; pub use columns::*; pub use global::*; +pub use local::*; pub use program::*; + +/// The type of memory chip that is being initialized. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MemoryChipType { + Initialize, + Finalize, +} diff --git a/crates/core/machine/src/memory/program.rs b/crates/core/machine/src/memory/program.rs index c69e7e575b..65a3b836ed 100644 --- a/crates/core/machine/src/memory/program.rs +++ b/crates/core/machine/src/memory/program.rs @@ -9,7 +9,10 @@ use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ExecutionRecord, Program}; use sp1_derive::AlignedBorrow; use sp1_stark::{ - air::{AirInteraction, MachineAir, PublicValues, SP1AirBuilder, SP1_PROOF_NUM_PV_ELTS}, + air::{ + AirInteraction, InteractionScope, MachineAir, PublicValues, SP1AirBuilder, + SP1_PROOF_NUM_PV_ELTS, + }, InteractionKind, Word, }; @@ -140,6 +143,10 @@ impl MachineAir for MemoryProgramChip { fn included(&self, _: &Self::Record) -> bool { true } + + fn commit_scope(&self) -> InteractionScope { + InteractionScope::Global + } } impl BaseAir for MemoryProgramChip { @@ -189,10 +196,9 @@ where let mut values = vec![AB::Expr::zero(), AB::Expr::zero(), prep_local.addr.into()]; values.extend(prep_local.value.map(Into::into)); - builder.receive(AirInteraction::new( - values, - mult_local.multiplicity.into(), - InteractionKind::Memory, - )); + builder.send( + AirInteraction::new(values, mult_local.multiplicity.into(), InteractionKind::Memory), + InteractionScope::Global, + ); } } diff --git a/crates/core/machine/src/memory/trace.rs b/crates/core/machine/src/memory/trace.rs index 7dd5b12586..3b451ad241 100644 --- a/crates/core/machine/src/memory/trace.rs +++ b/crates/core/machine/src/memory/trace.rs @@ -6,12 +6,7 @@ use sp1_core_executor::events::{ use super::{MemoryAccessCols, MemoryReadCols, MemoryReadWriteCols, MemoryWriteCols}; impl MemoryWriteCols { - pub fn populate( - &mut self, - channel: u8, - record: MemoryWriteRecord, - output: &mut impl ByteRecord, - ) { + pub fn populate(&mut self, record: MemoryWriteRecord, output: &mut impl ByteRecord) { let current_record = MemoryRecord { value: record.value, shard: record.shard, timestamp: record.timestamp }; let prev_record = MemoryRecord { @@ -20,17 +15,12 @@ impl MemoryWriteCols { timestamp: record.prev_timestamp, }; self.prev_value = prev_record.value.into(); - self.access.populate_access(channel, current_record, prev_record, output); + self.access.populate_access(current_record, prev_record, output); } } impl MemoryReadCols { - pub fn populate( - &mut self, - channel: u8, - record: MemoryReadRecord, - output: &mut impl ByteRecord, - ) { + pub fn populate(&mut self, record: MemoryReadRecord, output: &mut impl ByteRecord) { let current_record = MemoryRecord { value: record.value, shard: record.shard, timestamp: record.timestamp }; let prev_record = MemoryRecord { @@ -38,31 +28,19 @@ impl MemoryReadCols { shard: record.prev_shard, timestamp: record.prev_timestamp, }; - self.access.populate_access(channel, current_record, prev_record, output); + self.access.populate_access(current_record, prev_record, output); } } impl MemoryReadWriteCols { - pub fn populate( - &mut self, - channel: u8, - record: MemoryRecordEnum, - output: &mut impl ByteRecord, - ) { + pub fn populate(&mut self, record: MemoryRecordEnum, output: &mut impl ByteRecord) { match record { - MemoryRecordEnum::Read(read_record) => self.populate_read(channel, read_record, output), - MemoryRecordEnum::Write(write_record) => { - self.populate_write(channel, write_record, output) - } + MemoryRecordEnum::Read(read_record) => self.populate_read(read_record, output), + MemoryRecordEnum::Write(write_record) => self.populate_write(write_record, output), } } - pub fn populate_write( - &mut self, - channel: u8, - record: MemoryWriteRecord, - output: &mut impl ByteRecord, - ) { + pub fn populate_write(&mut self, record: MemoryWriteRecord, output: &mut impl ByteRecord) { let current_record = MemoryRecord { value: record.value, shard: record.shard, timestamp: record.timestamp }; let prev_record = MemoryRecord { @@ -71,15 +49,10 @@ impl MemoryReadWriteCols { timestamp: record.prev_timestamp, }; self.prev_value = prev_record.value.into(); - self.access.populate_access(channel, current_record, prev_record, output); + self.access.populate_access(current_record, prev_record, output); } - pub fn populate_read( - &mut self, - channel: u8, - record: MemoryReadRecord, - output: &mut impl ByteRecord, - ) { + pub fn populate_read(&mut self, record: MemoryReadRecord, output: &mut impl ByteRecord) { let current_record = MemoryRecord { value: record.value, shard: record.shard, timestamp: record.timestamp }; let prev_record = MemoryRecord { @@ -88,14 +61,13 @@ impl MemoryReadWriteCols { timestamp: record.prev_timestamp, }; self.prev_value = prev_record.value.into(); - self.access.populate_access(channel, current_record, prev_record, output); + self.access.populate_access(current_record, prev_record, output); } } impl MemoryAccessCols { pub(crate) fn populate_access( &mut self, - channel: u8, current_record: MemoryRecord, prev_record: MemoryRecord, output: &mut impl ByteRecord, @@ -123,9 +95,9 @@ impl MemoryAccessCols { let shard = current_record.shard; // Add a byte table lookup with the 16Range op. - output.add_u16_range_check(shard, channel, diff_16bit_limb); + output.add_u16_range_check(shard, diff_16bit_limb); // Add a byte table lookup with the U8Range op. - output.add_u8_range_check(shard, channel, 0, diff_8bit_limb as u8); + output.add_u8_range_check(shard, 0, diff_8bit_limb as u8); } } diff --git a/crates/core/machine/src/operations/add.rs b/crates/core/machine/src/operations/add.rs index 5e1172b487..1ba8eb127f 100644 --- a/crates/core/machine/src/operations/add.rs +++ b/crates/core/machine/src/operations/add.rs @@ -23,7 +23,6 @@ impl AddOperation { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a_u32: u32, b_u32: u32, ) -> u32 { @@ -52,9 +51,9 @@ impl AddOperation { // Range check { - record.add_u8_range_checks(shard, channel, &a); - record.add_u8_range_checks(shard, channel, &b); - record.add_u8_range_checks(shard, channel, &expected.to_le_bytes()); + record.add_u8_range_checks(shard, &a); + record.add_u8_range_checks(shard, &b); + record.add_u8_range_checks(shard, &expected.to_le_bytes()); } expected } @@ -64,8 +63,6 @@ impl AddOperation { a: Word, b: Word, cols: AddOperation, - shard: AB::Var, - channel: impl Into + Clone, is_real: AB::Expr, ) { let one = AB::Expr::one(); @@ -102,9 +99,9 @@ impl AddOperation { // Range check each byte. { - builder.slice_range_check_u8(&a.0, shard, channel.clone(), is_real.clone()); - builder.slice_range_check_u8(&b.0, shard, channel.clone(), is_real.clone()); - builder.slice_range_check_u8(&cols.value.0, shard, channel.clone(), is_real); + builder.slice_range_check_u8(&a.0, is_real.clone()); + builder.slice_range_check_u8(&b.0, is_real.clone()); + builder.slice_range_check_u8(&cols.value.0, is_real); } } } diff --git a/crates/core/machine/src/operations/add4.rs b/crates/core/machine/src/operations/add4.rs index 5fe5ec0fd1..fc010e9ab1 100644 --- a/crates/core/machine/src/operations/add4.rs +++ b/crates/core/machine/src/operations/add4.rs @@ -38,7 +38,6 @@ impl Add4Operation { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a_u32: u32, b_u32: u32, c_u32: u32, @@ -70,11 +69,11 @@ impl Add4Operation { // Range check. { - record.add_u8_range_checks(shard, channel, &a); - record.add_u8_range_checks(shard, channel, &b); - record.add_u8_range_checks(shard, channel, &c); - record.add_u8_range_checks(shard, channel, &d); - record.add_u8_range_checks(shard, channel, &expected.to_le_bytes()); + record.add_u8_range_checks(shard, &a); + record.add_u8_range_checks(shard, &b); + record.add_u8_range_checks(shard, &c); + record.add_u8_range_checks(shard, &d); + record.add_u8_range_checks(shard, &expected.to_le_bytes()); } expected } @@ -86,18 +85,16 @@ impl Add4Operation { b: Word, c: Word, d: Word, - shard: AB::Var, - channel: impl Into + Copy, is_real: AB::Var, cols: Add4Operation, ) { // Range check each byte. { - builder.slice_range_check_u8(&a.0, shard, channel, is_real); - builder.slice_range_check_u8(&b.0, shard, channel, is_real); - builder.slice_range_check_u8(&c.0, shard, channel, is_real); - builder.slice_range_check_u8(&d.0, shard, channel, is_real); - builder.slice_range_check_u8(&cols.value.0, shard, channel, is_real); + builder.slice_range_check_u8(&a.0, is_real); + builder.slice_range_check_u8(&b.0, is_real); + builder.slice_range_check_u8(&c.0, is_real); + builder.slice_range_check_u8(&d.0, is_real); + builder.slice_range_check_u8(&cols.value.0, is_real); } builder.assert_bool(is_real); diff --git a/crates/core/machine/src/operations/add5.rs b/crates/core/machine/src/operations/add5.rs index 959d06dd10..dcd011f7f8 100644 --- a/crates/core/machine/src/operations/add5.rs +++ b/crates/core/machine/src/operations/add5.rs @@ -40,7 +40,6 @@ impl Add5Operation { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a_u32: u32, b_u32: u32, c_u32: u32, @@ -78,12 +77,12 @@ impl Add5Operation { // Range check. { - record.add_u8_range_checks(shard, channel, &a); - record.add_u8_range_checks(shard, channel, &b); - record.add_u8_range_checks(shard, channel, &c); - record.add_u8_range_checks(shard, channel, &d); - record.add_u8_range_checks(shard, channel, &e); - record.add_u8_range_checks(shard, channel, &expected.to_le_bytes()); + record.add_u8_range_checks(shard, &a); + record.add_u8_range_checks(shard, &b); + record.add_u8_range_checks(shard, &c); + record.add_u8_range_checks(shard, &d); + record.add_u8_range_checks(shard, &e); + record.add_u8_range_checks(shard, &expected.to_le_bytes()); } expected @@ -92,18 +91,14 @@ impl Add5Operation { pub fn eval( builder: &mut AB, words: &[Word; 5], - shard: AB::Var, - channel: impl Into + Copy, is_real: AB::Var, cols: Add5Operation, ) { builder.assert_bool(is_real); // Range check each byte. { - words - .iter() - .for_each(|word| builder.slice_range_check_u8(&word.0, shard, channel, is_real)); - builder.slice_range_check_u8(&cols.value.0, shard, channel, is_real); + words.iter().for_each(|word| builder.slice_range_check_u8(&word.0, is_real)); + builder.slice_range_check_u8(&cols.value.0, is_real); } let mut builder_is_real = builder.when(is_real); diff --git a/crates/core/machine/src/operations/and.rs b/crates/core/machine/src/operations/and.rs index 5aaae62013..6f3dfd788a 100644 --- a/crates/core/machine/src/operations/and.rs +++ b/crates/core/machine/src/operations/and.rs @@ -17,14 +17,7 @@ pub struct AndOperation { } impl AndOperation { - pub fn populate( - &mut self, - record: &mut impl ByteRecord, - shard: u32, - channel: u8, - x: u32, - y: u32, - ) -> u32 { + pub fn populate(&mut self, record: &mut impl ByteRecord, shard: u32, x: u32, y: u32) -> u32 { let expected = x & y; let x_bytes = x.to_le_bytes(); let y_bytes = y.to_le_bytes(); @@ -34,7 +27,6 @@ impl AndOperation { let byte_event = ByteLookupEvent { shard, - channel, opcode: ByteOpcode::AND, a1: and as u16, a2: 0, @@ -52,8 +44,6 @@ impl AndOperation { a: Word, b: Word, cols: AndOperation, - shard: AB::Var, - channel: impl Into + Copy, is_real: AB::Var, ) { for i in 0..WORD_SIZE { @@ -62,8 +52,6 @@ impl AndOperation { cols.value[i], a[i], b[i], - shard, - channel, is_real, ); } diff --git a/crates/core/machine/src/operations/field/field_den.rs b/crates/core/machine/src/operations/field/field_den.rs index 610cbf66af..3c61a08e1d 100644 --- a/crates/core/machine/src/operations/field/field_den.rs +++ b/crates/core/machine/src/operations/field/field_den.rs @@ -35,7 +35,6 @@ impl FieldDenCols { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a: &BigUint, b: &BigUint, sign: bool, @@ -83,10 +82,10 @@ impl FieldDenCols { self.witness_high = Limbs(p_witness_high.try_into().unwrap()); // Range checks - record.add_u8_range_checks_field(shard, channel, &self.result.0); - record.add_u8_range_checks_field(shard, channel, &self.carry.0); - record.add_u8_range_checks_field(shard, channel, &self.witness_low.0); - record.add_u8_range_checks_field(shard, channel, &self.witness_high.0); + record.add_u8_range_checks_field(shard, &self.result.0); + record.add_u8_range_checks_field(shard, &self.carry.0); + record.add_u8_range_checks_field(shard, &self.witness_low.0); + record.add_u8_range_checks_field(shard, &self.witness_high.0); result } @@ -103,8 +102,6 @@ where a: &Limbs, b: &Limbs, sign: bool, - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -133,25 +130,10 @@ where eval_field_operation::(builder, &p_vanishing, &p_witness_low, &p_witness_high); // Range checks for the result, carry, and witness columns. - builder.slice_range_check_u8( - &self.result.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8( - &self.carry.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8( - &self.witness_low.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8(&self.witness_high.0, shard, channel.clone(), is_real); + builder.slice_range_check_u8(&self.result.0, is_real.clone()); + builder.slice_range_check_u8(&self.carry.0, is_real.clone()); + builder.slice_range_check_u8(&self.witness_low.0, is_real.clone()); + builder.slice_range_check_u8(&self.witness_high.0, is_real); } } @@ -245,7 +227,7 @@ mod tests { let cols: &mut TestCols = row.as_mut_slice().borrow_mut(); cols.a = P::to_limbs_field::(a); cols.b = P::to_limbs_field::(b); - cols.a_den_b.populate(output, 1, 0, a, b, self.sign); + cols.a_den_b.populate(output, 0, a, b, self.sign); row }) .collect::>(); @@ -276,15 +258,7 @@ mod tests { let main = builder.main(); let local = main.row_slice(0); let local: &TestCols = (*local).borrow(); - local.a_den_b.eval( - builder, - &local.a, - &local.b, - self.sign, - AB::F::one(), - AB::F::zero(), - AB::F::one(), - ); + local.a_den_b.eval(builder, &local.a, &local.b, self.sign, AB::F::zero()); } } diff --git a/crates/core/machine/src/operations/field/field_inner_product.rs b/crates/core/machine/src/operations/field/field_inner_product.rs index c90bf035d8..6d2e7cb1db 100644 --- a/crates/core/machine/src/operations/field/field_inner_product.rs +++ b/crates/core/machine/src/operations/field/field_inner_product.rs @@ -34,7 +34,6 @@ impl FieldInnerProductCols { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a: &[BigUint], b: &[BigUint], ) -> BigUint { @@ -78,10 +77,10 @@ impl FieldInnerProductCols { self.witness_high = Limbs(p_witness_high.try_into().unwrap()); // Range checks - record.add_u8_range_checks_field(shard, channel, &self.result.0); - record.add_u8_range_checks_field(shard, channel, &self.carry.0); - record.add_u8_range_checks_field(shard, channel, &self.witness_low.0); - record.add_u8_range_checks_field(shard, channel, &self.witness_high.0); + record.add_u8_range_checks_field(shard, &self.result.0); + record.add_u8_range_checks_field(shard, &self.carry.0); + record.add_u8_range_checks_field(shard, &self.witness_low.0); + record.add_u8_range_checks_field(shard, &self.witness_high.0); result.clone() } @@ -96,8 +95,6 @@ where builder: &mut AB, a: &[Limbs], b: &[Limbs], - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -127,25 +124,10 @@ where eval_field_operation::(builder, &p_vanishing, &p_witness_low, &p_witness_high); // Range checks for the result, carry, and witness columns. - builder.slice_range_check_u8( - &self.result.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8( - &self.carry.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8( - &self.witness_low.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8(&self.witness_high.0, shard, channel.clone(), is_real); + builder.slice_range_check_u8(&self.result.0, is_real.clone()); + builder.slice_range_check_u8(&self.carry.0, is_real.clone()); + builder.slice_range_check_u8(&self.witness_low.0, is_real.clone()); + builder.slice_range_check_u8(&self.witness_high.0, is_real); } } @@ -231,7 +213,7 @@ mod tests { let cols: &mut TestCols = row.as_mut_slice().borrow_mut(); cols.a[0] = P::to_limbs_field::(&a[0]); cols.b[0] = P::to_limbs_field::(&b[0]); - cols.a_ip_b.populate(output, 1, 0, a, b); + cols.a_ip_b.populate(output, 1, a, b); row }) .collect::>(); @@ -265,14 +247,7 @@ mod tests { let main = builder.main(); let local = main.row_slice(0); let local: &TestCols = (*local).borrow(); - local.a_ip_b.eval( - builder, - &local.a, - &local.b, - AB::F::one(), - AB::F::zero(), - AB::F::one(), - ); + local.a_ip_b.eval(builder, &local.a, &local.b, AB::F::one()); } } diff --git a/crates/core/machine/src/operations/field/field_op.rs b/crates/core/machine/src/operations/field/field_op.rs index b2120dad99..a69223fc5b 100644 --- a/crates/core/machine/src/operations/field/field_op.rs +++ b/crates/core/machine/src/operations/field/field_op.rs @@ -107,7 +107,6 @@ impl FieldOpCols { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a: &BigUint, b: &BigUint, modulus: &BigUint, @@ -152,10 +151,10 @@ impl FieldOpCols { }; // Range checks - record.add_u8_range_checks_field(shard, channel, &self.result.0); - record.add_u8_range_checks_field(shard, channel, &self.carry.0); - record.add_u8_range_checks_field(shard, channel, &self.witness_low.0); - record.add_u8_range_checks_field(shard, channel, &self.witness_high.0); + record.add_u8_range_checks_field(shard, &self.result.0); + record.add_u8_range_checks_field(shard, &self.carry.0); + record.add_u8_range_checks_field(shard, &self.witness_low.0); + record.add_u8_range_checks_field(shard, &self.witness_high.0); result } @@ -166,12 +165,11 @@ impl FieldOpCols { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a: &BigUint, b: &BigUint, op: FieldOperation, ) -> BigUint { - self.populate_with_modulus(record, shard, channel, a, b, &P::modulus(), op) + self.populate_with_modulus(record, shard, a, b, &P::modulus(), op) } } @@ -188,8 +186,6 @@ impl FieldOpCols { is_sub: impl Into + Clone, is_mul: impl Into + Clone, is_div: impl Into + Clone, - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -213,15 +209,7 @@ impl FieldOpCols { let p_div = p_res_param * p_b.clone(); let p_op = p_add * is_add + p_sub * is_sub + p_mul * is_mul + p_div * is_div; - self.eval_with_polynomials( - builder, - p_op, - modulus.clone(), - p_result, - shard, - channel, - is_real, - ); + self.eval_with_polynomials(builder, p_op, modulus.clone(), p_result, is_real); } #[allow(clippy::too_many_arguments)] @@ -232,8 +220,6 @@ impl FieldOpCols { b: &(impl Into> + Clone), modulus: &(impl Into> + Clone), op: FieldOperation, - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -250,15 +236,7 @@ impl FieldOpCols { FieldOperation::Add | FieldOperation::Sub => p_a + p_b, FieldOperation::Mul | FieldOperation::Div => p_a * p_b, }; - self.eval_with_polynomials( - builder, - p_op, - modulus.clone(), - p_result, - shard, - channel, - is_real, - ); + self.eval_with_polynomials(builder, p_op, modulus.clone(), p_result, is_real); } #[allow(clippy::too_many_arguments)] @@ -268,8 +246,6 @@ impl FieldOpCols { op: impl Into>, modulus: impl Into>, result: impl Into>, - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -286,30 +262,10 @@ impl FieldOpCols { eval_field_operation::(builder, &p_vanishing, &p_witness_low, &p_witness_high); // Range checks for the result, carry, and witness columns. - builder.slice_range_check_u8( - &self.result.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8( - &self.carry.0, - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8( - p_witness_low.coefficients(), - shard.clone(), - channel.clone(), - is_real.clone(), - ); - builder.slice_range_check_u8( - p_witness_high.coefficients(), - shard.clone(), - channel.clone(), - is_real, - ); + builder.slice_range_check_u8(&self.result.0, is_real.clone()); + builder.slice_range_check_u8(&self.carry.0, is_real.clone()); + builder.slice_range_check_u8(p_witness_low.coefficients(), is_real.clone()); + builder.slice_range_check_u8(p_witness_high.coefficients(), is_real); } #[allow(clippy::too_many_arguments)] @@ -319,15 +275,13 @@ impl FieldOpCols { a: &(impl Into> + Clone), b: &(impl Into> + Clone), op: FieldOperation, - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, Limbs: Copy, { let p_limbs = Polynomial::from_iter(P::modulus_field_iter::().map(AB::Expr::from)); - self.eval_with_modulus::(builder, a, b, &p_limbs, op, shard, channel, is_real); + self.eval_with_modulus::(builder, a, b, &p_limbs, op, is_real); } } @@ -423,7 +377,7 @@ mod tests { let cols: &mut TestCols = row.as_mut_slice().borrow_mut(); cols.a = P::to_limbs_field::(a); cols.b = P::to_limbs_field::(b); - cols.a_op_b.populate(&mut blu_events, 1, 0, a, b, self.operation); + cols.a_op_b.populate(&mut blu_events, 1, a, b, self.operation); output.add_byte_lookup_events(blu_events); row }) @@ -458,15 +412,7 @@ mod tests { let main = builder.main(); let local = main.row_slice(0); let local: &TestCols = (*local).borrow(); - local.a_op_b.eval( - builder, - &local.a, - &local.b, - self.operation, - AB::F::one(), - AB::F::zero(), - AB::F::one(), - ); + local.a_op_b.eval(builder, &local.a, &local.b, self.operation, AB::F::one()); } } diff --git a/crates/core/machine/src/operations/field/field_sqrt.rs b/crates/core/machine/src/operations/field/field_sqrt.rs index 50d2cc4729..a0f40c6a48 100644 --- a/crates/core/machine/src/operations/field/field_sqrt.rs +++ b/crates/core/machine/src/operations/field/field_sqrt.rs @@ -43,7 +43,6 @@ impl FieldSqrtCols { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, a: &BigUint, sqrt_fn: impl Fn(&BigUint) -> BigUint, ) -> BigUint { @@ -53,7 +52,7 @@ impl FieldSqrtCols { // Use FieldOpCols to compute result * result. let sqrt_squared = - self.multiplication.populate(record, shard, channel, &sqrt, &sqrt, FieldOperation::Mul); + self.multiplication.populate(record, shard, &sqrt, &sqrt, FieldOperation::Mul); // If the result is indeed the square root of a, then result * result = a. assert_eq!(sqrt_squared, a.clone()); @@ -63,14 +62,13 @@ impl FieldSqrtCols { self.multiplication.result = P::to_limbs_field::(&sqrt); // Populate the range columns. - self.range.populate(record, shard, channel, &sqrt, &modulus); + self.range.populate(record, shard, &sqrt, &modulus); let sqrt_bytes = P::to_limbs(&sqrt); self.lsb = F::from_canonical_u8(sqrt_bytes[0] & 1); let and_event = ByteLookupEvent { shard, - channel, opcode: ByteOpcode::AND, a1: self.lsb.as_canonical_u32() as u16, a2: 0, @@ -82,7 +80,6 @@ impl FieldSqrtCols { // Add the byte range check for `sqrt`. record.add_u8_range_checks( shard, - channel, self.multiplication .result .0 @@ -107,8 +104,6 @@ where builder: &mut AB, a: &Limbs, is_odd: impl Into, - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -121,33 +116,18 @@ where multiplication.result = *a; // Compute sqrt * sqrt. We pass in P since we want its BaseField to be the mod. - multiplication.eval( - builder, - &sqrt, - &sqrt, - FieldOperation::Mul, - shard.clone(), - channel.clone(), - is_real.clone(), - ); + multiplication.eval(builder, &sqrt, &sqrt, FieldOperation::Mul, is_real.clone()); let modulus_limbs = P::to_limbs_field_vec(&P::modulus()); self.range.eval( builder, &sqrt, &limbs_from_vec::(modulus_limbs), - shard.clone(), - channel.clone(), is_real.clone(), ); // Range check that `sqrt` limbs are bytes. - builder.slice_range_check_u8( - sqrt.0.as_slice(), - shard.clone(), - channel.clone(), - is_real.clone(), - ); + builder.slice_range_check_u8(sqrt.0.as_slice(), is_real.clone()); // Assert that the square root is the positive one, i.e., with least significant bit 0. // This is done by computing LSB = least_significant_byte & 1. @@ -158,8 +138,6 @@ where self.lsb, sqrt[0], AB::F::one(), - shard, - channel, is_real, ); } @@ -246,7 +224,7 @@ mod tests { let mut row = [F::zero(); NUM_TEST_COLS]; let cols: &mut TestCols = row.as_mut_slice().borrow_mut(); cols.a = P::to_limbs_field::(a); - cols.sqrt.populate(&mut blu_events, 1, 0, a, ed25519_sqrt); + cols.sqrt.populate(&mut blu_events, 1, a, ed25519_sqrt); output.add_byte_lookup_events(blu_events); row }) @@ -283,14 +261,7 @@ mod tests { let local: &TestCols = (*local).borrow(); // eval verifies that local.sqrt.result is indeed the square root of local.a. - local.sqrt.eval( - builder, - &local.a, - AB::F::zero(), - AB::F::one(), - AB::F::zero(), - AB::F::one(), - ); + local.sqrt.eval(builder, &local.a, AB::F::zero(), AB::F::one()); } } diff --git a/crates/core/machine/src/operations/field/range.rs b/crates/core/machine/src/operations/field/range.rs index 0f6dce4144..b7490c584b 100644 --- a/crates/core/machine/src/operations/field/range.rs +++ b/crates/core/machine/src/operations/field/range.rs @@ -31,7 +31,6 @@ impl FieldLtCols { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, lhs: &BigUint, rhs: &BigUint, ) { @@ -53,7 +52,6 @@ impl FieldLtCols { record.add_byte_lookup_event(ByteLookupEvent { opcode: ByteOpcode::LTU, shard, - channel, a1: 1, a2: 0, b: *byte, @@ -79,8 +77,6 @@ impl FieldLtCols { builder: &mut AB, lhs: &E1, rhs: &E2, - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -145,8 +141,6 @@ impl FieldLtCols { AB::F::one(), self.lhs_comparison_byte, self.rhs_comparison_byte, - shard, - channel, is_real, ) } diff --git a/crates/core/machine/src/operations/fixed_rotate_right.rs b/crates/core/machine/src/operations/fixed_rotate_right.rs index 5f97ec2923..03a4454fdd 100644 --- a/crates/core/machine/src/operations/fixed_rotate_right.rs +++ b/crates/core/machine/src/operations/fixed_rotate_right.rs @@ -43,7 +43,6 @@ impl FixedRotateRightOperation { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, input: u32, rotation: usize, ) -> u32 { @@ -75,7 +74,6 @@ impl FixedRotateRightOperation { let byte_event = ByteLookupEvent { shard, - channel, opcode: ByteOpcode::ShrCarry, a1: shift as u16, a2: carry, @@ -110,8 +108,6 @@ impl FixedRotateRightOperation { input: Word, rotation: usize, cols: FixedRotateRightOperation, - shard: AB::Var, - channel: impl Into + Clone, is_real: AB::Var, ) { // Compute some constants with respect to the rotation needed for the rotation. @@ -138,8 +134,6 @@ impl FixedRotateRightOperation { cols.carry[i], input_bytes_rotated[i], AB::F::from_canonical_usize(nb_bits_to_shift), - shard, - channel.clone(), is_real, ); diff --git a/crates/core/machine/src/operations/fixed_shift_right.rs b/crates/core/machine/src/operations/fixed_shift_right.rs index d77acb9b42..50aa896205 100644 --- a/crates/core/machine/src/operations/fixed_shift_right.rs +++ b/crates/core/machine/src/operations/fixed_shift_right.rs @@ -43,7 +43,6 @@ impl FixedShiftRightOperation { &mut self, record: &mut impl ByteRecord, shard: u32, - channel: u8, input: u32, rotation: usize, ) -> u32 { @@ -74,7 +73,6 @@ impl FixedShiftRightOperation { let (shift, carry) = shr_carry(b, c); let byte_event = ByteLookupEvent { shard, - channel, opcode: ByteOpcode::ShrCarry, a1: shift as u16, a2: carry, @@ -109,8 +107,6 @@ impl FixedShiftRightOperation { input: Word, rotation: usize, cols: FixedShiftRightOperation, - shard: impl Into + Copy, - channel: impl Into + Copy, is_real: AB::Var, ) { // Compute some constants with respect to the rotation needed for the rotation. @@ -138,8 +134,6 @@ impl FixedShiftRightOperation { cols.carry[i], input_bytes_rotated[i].clone(), AB::F::from_canonical_usize(nb_bits_to_shift), - shard, - channel, is_real, ); diff --git a/crates/core/machine/src/operations/lt.rs b/crates/core/machine/src/operations/lt.rs index 2f531f18c8..5d9f000983 100644 --- a/crates/core/machine/src/operations/lt.rs +++ b/crates/core/machine/src/operations/lt.rs @@ -22,14 +22,7 @@ pub struct AssertLtColsBytes { } impl AssertLtColsBytes { - pub fn populate( - &mut self, - record: &mut impl ByteRecord, - shard: u32, - channel: u8, - a: &[u8], - b: &[u8], - ) { + pub fn populate(&mut self, record: &mut impl ByteRecord, shard: u32, a: &[u8], b: &[u8]) { let mut byte_flags = vec![0u8; N]; for (a_byte, b_byte, flag) in @@ -43,7 +36,6 @@ impl AssertLtColsBytes { record.add_byte_lookup_event(ByteLookupEvent { opcode: ByteOpcode::LTU, shard, - channel, a1: 1, a2: 0, b: *a_byte, @@ -69,8 +61,6 @@ impl AssertLtColsBytes { builder: &mut AB, a: &[Ea], b: &[Eb], - shard: impl Into + Clone, - channel: impl Into + Clone, is_real: impl Into + Clone, ) where V: Into, @@ -134,8 +124,6 @@ impl AssertLtColsBytes { AB::F::one(), self.a_comparison_byte, self.b_comparison_byte, - shard, - channel, is_real, ) } diff --git a/crates/core/machine/src/operations/not.rs b/crates/core/machine/src/operations/not.rs index bb09ff58e4..e9d32e5adf 100644 --- a/crates/core/machine/src/operations/not.rs +++ b/crates/core/machine/src/operations/not.rs @@ -14,19 +14,13 @@ pub struct NotOperation { } impl NotOperation { - pub fn populate( - &mut self, - record: &mut impl ByteRecord, - shard: u32, - channel: u8, - x: u32, - ) -> u32 { + pub fn populate(&mut self, record: &mut impl ByteRecord, shard: u32, x: u32) -> u32 { let expected = !x; let x_bytes = x.to_le_bytes(); for i in 0..WORD_SIZE { self.value[i] = F::from_canonical_u8(!x_bytes[i]); } - record.add_u8_range_checks(shard, channel, &x_bytes); + record.add_u8_range_checks(shard, &x_bytes); expected } @@ -35,8 +29,6 @@ impl NotOperation { builder: &mut AB, a: Word, cols: NotOperation, - shard: impl Into + Copy, - channel: impl Into + Copy, is_real: impl Into + Copy, ) { for i in (0..WORD_SIZE).step_by(2) { @@ -46,8 +38,6 @@ impl NotOperation { AB::F::zero(), a[i], a[i + 1], - shard, - channel, is_real, ); } diff --git a/crates/core/machine/src/operations/or.rs b/crates/core/machine/src/operations/or.rs index fb4a675820..2eaa3aadea 100644 --- a/crates/core/machine/src/operations/or.rs +++ b/crates/core/machine/src/operations/or.rs @@ -13,20 +13,13 @@ pub struct OrOperation { } impl OrOperation { - pub fn populate( - &mut self, - record: &mut ExecutionRecord, - shard: u32, - channel: u8, - x: u32, - y: u32, - ) -> u32 { + pub fn populate(&mut self, record: &mut ExecutionRecord, shard: u32, x: u32, y: u32) -> u32 { let expected = x | y; let x_bytes = x.to_le_bytes(); let y_bytes = y.to_le_bytes(); for i in 0..WORD_SIZE { self.value[i] = F::from_canonical_u8(x_bytes[i] | y_bytes[i]); - record.lookup_or(shard, channel, x_bytes[i], y_bytes[i]); + record.lookup_or(shard, x_bytes[i], y_bytes[i]); } expected } @@ -36,8 +29,6 @@ impl OrOperation { a: Word, b: Word, cols: OrOperation, - shard: impl Into + Copy, - channel: impl Into + Copy, is_real: AB::Var, ) { for i in 0..WORD_SIZE { @@ -46,8 +37,6 @@ impl OrOperation { cols.value[i], a[i], b[i], - shard, - channel, is_real, ); } diff --git a/crates/core/machine/src/operations/xor.rs b/crates/core/machine/src/operations/xor.rs index 93fa41ac44..c69113988c 100644 --- a/crates/core/machine/src/operations/xor.rs +++ b/crates/core/machine/src/operations/xor.rs @@ -16,14 +16,7 @@ pub struct XorOperation { } impl XorOperation { - pub fn populate( - &mut self, - record: &mut impl ByteRecord, - shard: u32, - channel: u8, - x: u32, - y: u32, - ) -> u32 { + pub fn populate(&mut self, record: &mut impl ByteRecord, shard: u32, x: u32, y: u32) -> u32 { let expected = x ^ y; let x_bytes = x.to_le_bytes(); let y_bytes = y.to_le_bytes(); @@ -33,7 +26,6 @@ impl XorOperation { let byte_event = ByteLookupEvent { shard, - channel, opcode: ByteOpcode::XOR, a1: xor as u16, a2: 0, @@ -51,8 +43,6 @@ impl XorOperation { a: Word, b: Word, cols: XorOperation, - shard: AB::Var, - channel: impl Into + Clone, is_real: AB::Var, ) { for i in 0..WORD_SIZE { @@ -61,8 +51,6 @@ impl XorOperation { cols.value[i], a[i], b[i], - shard, - channel.clone(), is_real, ); } diff --git a/crates/core/machine/src/riscv/cost.rs b/crates/core/machine/src/riscv/cost.rs index 0da65a34cc..6f81ce9255 100644 --- a/crates/core/machine/src/riscv/cost.rs +++ b/crates/core/machine/src/riscv/cost.rs @@ -127,6 +127,10 @@ impl CostEstimator for ExecutionReport { (bls12381_decompress_events as u64) * costs[&RiscvAirDiscriminants::Bls12381Decompress]; total_chips += 1; + let syscall_events = self.syscall_counts.values().sum::(); + total_area += (syscall_events as u64) * costs[&RiscvAirDiscriminants::Syscall]; + total_chips += 1; + let divrem_events = self.opcode_counts[Opcode::DIV] + self.opcode_counts[Opcode::REM] + self.opcode_counts[Opcode::DIVU] @@ -163,12 +167,19 @@ impl CostEstimator for ExecutionReport { total_area += (lt_events as u64) * costs[&RiscvAirDiscriminants::Lt]; total_chips += 1; - let memory_initialize_events = self.touched_memory_addresses; - total_area += (memory_initialize_events as u64) * costs[&RiscvAirDiscriminants::MemoryInit]; + let memory_global_initialize_events = self.touched_memory_addresses; + total_area += (memory_global_initialize_events as u64) + * costs[&RiscvAirDiscriminants::MemoryGlobalInit]; total_chips += 1; - let memory_finalize_events = self.touched_memory_addresses; - total_area += (memory_finalize_events as u64) * costs[&RiscvAirDiscriminants::MemoryFinal]; + let memory_global_finalize_events = self.touched_memory_addresses; + total_area += (memory_global_finalize_events as u64) + * costs[&RiscvAirDiscriminants::MemoryGlobalFinal]; + total_chips += 1; + + let memory_local_initialize_events = self.touched_memory_addresses; + total_area += + (memory_local_initialize_events as u64) * costs[&RiscvAirDiscriminants::MemoryLocal]; total_chips += 1; assert_eq!(total_chips, chips.len(), "chip count mismatch"); diff --git a/crates/core/machine/src/riscv/mod.rs b/crates/core/machine/src/riscv/mod.rs index 25b3258388..fe023ca739 100644 --- a/crates/core/machine/src/riscv/mod.rs +++ b/crates/core/machine/src/riscv/mod.rs @@ -6,7 +6,8 @@ pub use shape::*; use sp1_core_executor::{ExecutionRecord, Program}; use crate::{ - memory::{MemoryChipType, MemoryProgramChip}, + memory::{MemoryChipType, MemoryLocalChip, MemoryProgramChip}, + riscv::MemoryChipType::{Finalize, Initialize}, syscall::precompiles::fptower::{Fp2AddSubAssignChip, Fp2MulAssignChip, FpOpChip}, }; use hashbrown::{HashMap, HashSet}; @@ -14,7 +15,7 @@ use p3_field::PrimeField32; pub use riscv_chips::*; use sp1_curves::weierstrass::{bls12_381::Bls12381BaseField, bn254::Bn254BaseField}; use sp1_stark::{ - air::{MachineAir, SP1_PROOF_NUM_PV_ELTS}, + air::{InteractionScope, MachineAir, SP1_PROOF_NUM_PV_ELTS}, Chip, StarkGenericConfig, StarkMachine, }; use strum_macros::{EnumDiscriminants, EnumIter}; @@ -29,15 +30,19 @@ pub(crate) mod riscv_chips { alu::{AddSubChip, BitwiseChip, DivRemChip, LtChip, MulChip, ShiftLeft, ShiftRightChip}, bytes::ByteChip, cpu::CpuChip, - memory::MemoryChip, + memory::MemoryGlobalChip, program::ProgramChip, - syscall::precompiles::{ - edwards::{EdAddAssignChip, EdDecompressChip}, - keccak256::KeccakPermuteChip, - sha256::{ShaCompressChip, ShaExtendChip}, - uint256::Uint256MulChip, - weierstrass::{ - WeierstrassAddAssignChip, WeierstrassDecompressChip, WeierstrassDoubleAssignChip, + syscall::{ + chip::SyscallChip, + precompiles::{ + edwards::{EdAddAssignChip, EdDecompressChip}, + keccak256::KeccakPermuteChip, + sha256::{ShaCompressChip, ShaExtendChip}, + uint256::Uint256MulChip, + weierstrass::{ + WeierstrassAddAssignChip, WeierstrassDecompressChip, + WeierstrassDoubleAssignChip, + }, }, }, }; @@ -78,12 +83,16 @@ pub enum RiscvAir { ShiftRight(ShiftRightChip), /// A lookup table for byte operations. ByteLookup(ByteChip), - /// A table for initializing the memory state. - MemoryInit(MemoryChip), - /// A table for finalizing the memory state. - MemoryFinal(MemoryChip), + /// A table for initializing the global memory state. + MemoryGlobalInit(MemoryGlobalChip), + /// A table for finalizing the global memory state. + MemoryGlobalFinal(MemoryGlobalChip), + /// A table for the local memory state. + MemoryLocal(MemoryLocalChip), /// A table for initializing the program memory. ProgramMemory(MemoryProgramChip), + /// A table for all the syscall invocations. + Syscall(SyscallChip), /// A precompile for sha256 extend. Sha256Extend(ShaExtendChip), /// A precompile for sha256 compress. @@ -130,7 +139,7 @@ impl RiscvAir { #[instrument("construct RiscvAir machine", level = "debug", skip_all)] pub fn machine>(config: SC) -> StarkMachine { let chips = Self::chips(); - StarkMachine::new(config, chips, SP1_PROOF_NUM_PV_ELTS) + StarkMachine::new(config, chips, SP1_PROOF_NUM_PV_ELTS, true) } /// Get all the different RISC-V AIRs. @@ -269,6 +278,10 @@ impl RiscvAir { costs.insert(RiscvAirDiscriminants::Bls12381Decompress, bls12381_decompress.cost()); chips.push(bls12381_decompress); + let syscall = Chip::new(RiscvAir::Syscall(SyscallChip::default())); + costs.insert(RiscvAirDiscriminants::Syscall, syscall.cost()); + chips.push(syscall); + let div_rem = Chip::new(RiscvAir::DivRem(DivRemChip::default())); costs.insert(RiscvAirDiscriminants::DivRem, div_rem.cost()); chips.push(div_rem); @@ -297,15 +310,20 @@ impl RiscvAir { costs.insert(RiscvAirDiscriminants::Lt, lt.cost()); chips.push(lt); - let memory_init = - Chip::new(RiscvAir::MemoryInit(MemoryChip::new(MemoryChipType::Initialize))); - costs.insert(RiscvAirDiscriminants::MemoryInit, memory_init.cost()); - chips.push(memory_init); + let memory_global_init = Chip::new(RiscvAir::MemoryGlobalInit(MemoryGlobalChip::new( + MemoryChipType::Initialize, + ))); + costs.insert(RiscvAirDiscriminants::MemoryGlobalInit, memory_global_init.cost()); + chips.push(memory_global_init); + + let memory_global_finalize = + Chip::new(RiscvAir::MemoryGlobalFinal(MemoryGlobalChip::new(MemoryChipType::Finalize))); + costs.insert(RiscvAirDiscriminants::MemoryGlobalFinal, memory_global_finalize.cost()); + chips.push(memory_global_finalize); - let memory_finalize = - Chip::new(RiscvAir::MemoryFinal(MemoryChip::new(MemoryChipType::Finalize))); - costs.insert(RiscvAirDiscriminants::MemoryFinal, memory_finalize.cost()); - chips.push(memory_finalize); + let memory_local = Chip::new(RiscvAir::MemoryLocal(MemoryLocalChip::new())); + costs.insert(RiscvAirDiscriminants::MemoryLocal, memory_local.cost()); + chips.push(memory_local); let memory_program = Chip::new(RiscvAir::ProgramMemory(MemoryProgramChip::default())); costs.insert(RiscvAirDiscriminants::ProgramMemory, memory_program.cost()); @@ -360,20 +378,20 @@ impl RiscvAir { pub(crate) fn memory_init_final_airs() -> Vec { vec![ - RiscvAir::MemoryInit(MemoryChip::new(MemoryChipType::Initialize)), - RiscvAir::MemoryFinal(MemoryChip::new(MemoryChipType::Finalize)), + RiscvAir::MemoryGlobalInit(MemoryGlobalChip::new(MemoryChipType::Initialize)), + RiscvAir::MemoryGlobalFinal(MemoryGlobalChip::new(MemoryChipType::Finalize)), ] } pub(crate) fn get_memory_init_final_heights(record: &ExecutionRecord) -> Vec<(Self, usize)> { vec![ ( - RiscvAir::MemoryInit(MemoryChip::new(MemoryChipType::Initialize)), - record.memory_initialize_events.len(), + RiscvAir::MemoryGlobalInit(MemoryGlobalChip::new(Initialize)), + record.global_memory_initialize_events.len(), ), ( - RiscvAir::MemoryFinal(MemoryChip::new(MemoryChipType::Finalize)), - record.memory_finalize_events.len(), + RiscvAir::MemoryGlobalFinal(MemoryGlobalChip::new(Finalize)), + record.global_memory_finalize_events.len(), ), ] } diff --git a/crates/core/machine/src/riscv/shape.rs b/crates/core/machine/src/riscv/shape.rs index 5ccbb8af2a..c20dfbb7e9 100644 --- a/crates/core/machine/src/riscv/shape.rs +++ b/crates/core/machine/src/riscv/shape.rs @@ -6,10 +6,13 @@ use sp1_core_executor::{CoreShape, ExecutionRecord, Program}; use sp1_stark::{air::MachineAir, ProofShape}; use thiserror::Error; -use crate::memory::{MemoryChipType, MemoryProgramChip}; +use crate::{ + memory::MemoryProgramChip, + riscv::MemoryChipType::{Finalize, Initialize}, +}; use super::{ - AddSubChip, BitwiseChip, CpuChip, DivRemChip, LtChip, MemoryChip, MulChip, ProgramChip, + AddSubChip, BitwiseChip, CpuChip, DivRemChip, LtChip, MemoryGlobalChip, MulChip, ProgramChip, RiscvAir, ShiftLeft, ShiftRightChip, }; @@ -132,7 +135,8 @@ impl CoreShapeConfig { } // If the record is a global memory init/finalize record, try to fix the shape as such. - if !record.memory_initialize_events.is_empty() || !record.memory_finalize_events.is_empty() + if !record.global_memory_initialize_events.is_empty() + || !record.global_memory_finalize_events.is_empty() { let heights = RiscvAir::::get_memory_init_final_heights(record); let shape = @@ -372,14 +376,8 @@ impl Default for CoreShapeConfig { let memory_finalize_heights = vec![Some(10), Some(16), Some(18), Some(19), Some(20), Some(21), Some(22)]; let memory_allowed_log_heights = HashMap::from([ - ( - RiscvAir::MemoryInit(MemoryChip::new(MemoryChipType::Initialize)), - memory_init_heights, - ), - ( - RiscvAir::MemoryFinal(MemoryChip::new(MemoryChipType::Finalize)), - memory_finalize_heights, - ), + (RiscvAir::MemoryGlobalInit(MemoryGlobalChip::new(Initialize)), memory_init_heights), + (RiscvAir::MemoryGlobalFinal(MemoryGlobalChip::new(Finalize)), memory_finalize_heights), ]); let mut precompile_allowed_log_heights: Vec> = vec![]; diff --git a/crates/core/machine/src/syscall/chip.rs b/crates/core/machine/src/syscall/chip.rs new file mode 100644 index 0000000000..b4e00cf9e3 --- /dev/null +++ b/crates/core/machine/src/syscall/chip.rs @@ -0,0 +1,143 @@ +use std::{ + borrow::{Borrow, BorrowMut}, + mem::size_of, +}; + +use p3_air::{Air, BaseAir}; +use p3_field::PrimeField32; +use p3_matrix::{dense::RowMajorMatrix, Matrix}; +use sp1_core_executor::{ExecutionRecord, Program}; +use sp1_derive::AlignedBorrow; +use sp1_stark::air::{InteractionScope, MachineAir, SP1AirBuilder}; + +use crate::utils::pad_to_power_of_two; + +/// The number of main trace columns for `SyscallChip`. +pub const NUM_SYSCALL_COLS: usize = size_of::>(); + +/// A chip that stores the syscall invocations. +#[derive(Default)] +pub struct SyscallChip; + +/// The column layout for the chip. +#[derive(AlignedBorrow, Default, Clone, Copy)] +#[repr(C)] +pub struct SyscallCols { + /// The shard number of the syscall. + pub shard: T, + + /// The clk of the syscall. + pub clk: T, + + pub nonce: T, + + /// The syscall_id of the syscall. + pub syscall_id: T, + + /// The arg1. + pub arg1: T, + + /// The arg2. + pub arg2: T, + + pub is_real: T, +} + +impl MachineAir for SyscallChip { + type Record = ExecutionRecord; + + type Program = Program; + + fn name(&self) -> String { + "Syscall".to_string() + } + + fn generate_dependencies(&self, _input: &ExecutionRecord, _output: &mut ExecutionRecord) { + // Do nothing since this chip has no dependencies. + } + + fn generate_trace( + &self, + input: &ExecutionRecord, + _output: &mut ExecutionRecord, + ) -> RowMajorMatrix { + let mut rows = Vec::new(); + + for syscall_event in input.syscall_events.iter() { + let mut row = [F::zero(); NUM_SYSCALL_COLS]; + let cols: &mut SyscallCols = row.as_mut_slice().borrow_mut(); + + cols.shard = F::from_canonical_u32(syscall_event.shard); + cols.clk = F::from_canonical_u32(syscall_event.clk); + cols.syscall_id = F::from_canonical_u32(syscall_event.syscall_id); + cols.nonce = F::from_canonical_u32( + input.nonce_lookup.get(&syscall_event.lookup_id).copied().unwrap_or_default(), + ); + cols.arg1 = F::from_canonical_u32(syscall_event.arg1); + cols.arg2 = F::from_canonical_u32(syscall_event.arg2); + cols.is_real = F::one(); + + rows.push(row); + } + let mut trace = + RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_SYSCALL_COLS); + + pad_to_power_of_two::(&mut trace.values); + + trace + } + + fn included(&self, shard: &Self::Record) -> bool { + !shard.syscall_events.is_empty() + } + + fn commit_scope(&self) -> InteractionScope { + InteractionScope::Global + } +} + +impl Air for SyscallChip +where + AB: SP1AirBuilder, +{ + fn eval(&self, builder: &mut AB) { + let main = builder.main(); + let local = main.row_slice(0); + let local: &SyscallCols = (*local).borrow(); + + builder.assert_eq( + local.is_real * local.is_real * local.is_real, + local.is_real * local.is_real * local.is_real, + ); + + // Receive the calls from the local bus from the CPU. + builder.receive_syscall( + local.shard, + local.clk, + local.nonce, + local.syscall_id, + local.arg1, + local.arg2, + local.is_real, + InteractionScope::Local, + ); + + // Send the call to the global bus to the precompile chips. + builder.send_syscall( + local.shard, + local.clk, + local.nonce, + local.syscall_id, + local.arg1, + local.arg2, + local.is_real, + InteractionScope::Global, + ); + } +} + +impl BaseAir for SyscallChip { + fn width(&self) -> usize { + NUM_SYSCALL_COLS + } +} diff --git a/crates/core/machine/src/syscall/mod.rs b/crates/core/machine/src/syscall/mod.rs index c0363937e7..ab4b7db7fc 100644 --- a/crates/core/machine/src/syscall/mod.rs +++ b/crates/core/machine/src/syscall/mod.rs @@ -1 +1,2 @@ +pub mod chip; pub mod precompiles; diff --git a/crates/core/machine/src/syscall/precompiles/README.md b/crates/core/machine/src/syscall/precompiles/README.md index 6ddd0e1e1c..1b7c645dd5 100644 --- a/crates/core/machine/src/syscall/precompiles/README.md +++ b/crates/core/machine/src/syscall/precompiles/README.md @@ -27,7 +27,6 @@ Define the necessary data structures that your chip will use. This might include #[repr(C)] pub struct CustomOpCols { pub shard: T, - pub channel: T, pub clk: T, pub x_ptr: T, pub y_ptr: T, @@ -47,7 +46,7 @@ impl Syscall for Uint256MulChip { 1 } - fn execute(&self, rt: &mut SyscallContext, arg1: u32, arg2: u32) -> Option { + fn execute(&self, rt: &mut SyscallContext, syscall: SyscallCode, arg1: u32, arg2: u32) -> Option { // Your execution logic here // Parse input pointers, perform the multiplication, and write the result } @@ -80,76 +79,40 @@ impl MachineAir for CustomOpChip { } } ``` -You will also have to update `core/src/runtime/record.rs` accordingly to handle these new events. +You will also have to update `core/executor/src/events/precompiles/mod.rs` accordingly to register the new precompile op. #### Add a new field for your chip's events -In the `ExecutionRecord` struct, add a new field to track events specific to your chip. This field will store all events generated by your chip during execution. +In the `PrecompileEvent` enum, add a new variant for you precompile op. ```rust -#[derive(Default, Clone, Debug, Serialize, Deserialize)] -pub struct ExecutionRecord { - // Other existing fields... +#[derive(Clone, Debug, Serialize, Deserialize, EnumIter)] +/// Precompile event. There should be one variant for every precompile syscall. +pub enum PrecompileEvent { + // Other existing variants... - /// A trace of the events for your custom operation. - pub custom_op_events: Vec, + /// A variant for your custom operation. + pub CustomOp(CustomOpEvent), } ``` -#### Update the `stats` method -In the `stats` method, add an entry to track the number of events associated with your chip. +#### Update the `get_local_mem_events` method +In the `get_local_mem_events` method, add your variant to the match statement to add an iterator of the op's local +memory events (if it has local memory events). ```rust -fn stats(&self) -> HashMap { - let mut stats = HashMap::new(); - // Other existing entries... +fn get_local_mem_events(&self) -> impl IntoIterator { + let mut iterators = Vec::new(); - stats.insert("custom_op_events".to_string(), self.custom_op_events.len()); - // Add other stats as necessary - stats -} -``` -#### Update the `append` method -In the append method, ensure that events from your chip are correctly appended when merging two `ExecutionRecord` instances. - -```rust -fn append(&mut self, other: &mut ExecutionRecord) { - // Other existing append operations... - - self.custom_op_events.append(&mut other.custom_op_events); -} -``` - -#### Update the `defer` method -Modify the `defer` method to handle the deferring of events specific to your chip. - -```rust -pub fn defer(&mut self) -> ExecutionRecord { - ExecutionRecord { - // Other deferred events... + for event in self.iter() { + match event { + // Other existing variants... - custom_op_events: std::mem::take(&mut self.custom_op_events), - ..Default::default() + PrecompileEvent::CustomOp(e) => { + iterators.push(e.local_mem_access.iter()); + } + } } -} -``` - -#### Update the `split` method -In the `split` method, ensure that events associated with your chip are properly split when distributing deferred events across shards. - -```rust -pub fn split(&mut self, last: bool, opts: SplitOpts) -> Vec { - let mut shards = Vec::new(); - - split_events!( - self, - custom_op_events, - shards, - opts.deferred_shift_threshold, - last - ); - - // Other event splits... - shards + iterators.into_iter().flatten() } ``` diff --git a/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs b/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs index 1c80bdd119..9299f68bfd 100644 --- a/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs +++ b/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs @@ -14,7 +14,7 @@ use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::{IntoParallelRefIterator, ParallelIterator, ParallelSlice}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, EllipticCurveAddEvent, FieldOperation}, + events::{ByteLookupEvent, ByteRecord, EllipticCurveAddEvent, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -24,7 +24,7 @@ use sp1_curves::{ AffinePoint, EllipticCurve, }; use sp1_derive::AlignedBorrow; -use sp1_stark::air::{BaseAirBuilder, MachineAir, SP1AirBuilder}; +use sp1_stark::air::{BaseAirBuilder, InteractionScope, MachineAir, SP1AirBuilder}; use crate::{ memory::{value_as_limbs, MemoryReadCols, MemoryWriteCols}, @@ -44,7 +44,6 @@ pub const NUM_ED_ADD_COLS: usize = size_of::>(); pub struct EdAddAssignCols { pub is_real: T, pub shard: T, - pub channel: T, pub clk: T, pub nonce: T, pub p_ptr: T, @@ -75,7 +74,6 @@ impl EdAddAssignChip { fn populate_field_ops( record: &mut impl ByteRecord, shard: u32, - channel: u8, cols: &mut EdAddAssignCols, p_x: BigUint, p_y: BigUint, @@ -85,29 +83,24 @@ impl EdAddAssignChip { let x3_numerator = cols.x3_numerator.populate( record, shard, - channel, &[p_x.clone(), q_x.clone()], &[q_y.clone(), p_y.clone()], ); let y3_numerator = cols.y3_numerator.populate( record, shard, - channel, &[p_y.clone(), p_x.clone()], &[q_y.clone(), q_x.clone()], ); - let x1_mul_y1 = - cols.x1_mul_y1.populate(record, shard, channel, &p_x, &p_y, FieldOperation::Mul); - let x2_mul_y2 = - cols.x2_mul_y2.populate(record, shard, channel, &q_x, &q_y, FieldOperation::Mul); - let f = - cols.f.populate(record, shard, channel, &x1_mul_y1, &x2_mul_y2, FieldOperation::Mul); + let x1_mul_y1 = cols.x1_mul_y1.populate(record, shard, &p_x, &p_y, FieldOperation::Mul); + let x2_mul_y2 = cols.x2_mul_y2.populate(record, shard, &q_x, &q_y, FieldOperation::Mul); + let f = cols.f.populate(record, shard, &x1_mul_y1, &x2_mul_y2, FieldOperation::Mul); let d = E::d_biguint(); - let d_mul_f = cols.d_mul_f.populate(record, shard, channel, &f, &d, FieldOperation::Mul); + let d_mul_f = cols.d_mul_f.populate(record, shard, &f, &d, FieldOperation::Mul); - cols.x3_ins.populate(record, shard, channel, &x3_numerator, &d_mul_f, true); - cols.y3_ins.populate(record, shard, channel, &y3_numerator, &d_mul_f, false); + cols.x3_ins.populate(record, shard, &x3_numerator, &d_mul_f, true); + cols.y3_ins.populate(record, shard, &y3_numerator, &d_mul_f, false); } } @@ -125,10 +118,17 @@ impl MachineAir for Ed input: &ExecutionRecord, _: &mut ExecutionRecord, ) -> RowMajorMatrix { - let mut rows = input - .ed_add_events + let events = input.get_precompile_events(SyscallCode::ED_ADD); + + let mut rows = events .par_iter() .map(|event| { + let event = if let PrecompileEvent::EdAdd(event) = event { + event + } else { + unreachable!(); + }; + let mut row = [F::zero(); NUM_ED_ADD_COLS]; let cols: &mut EdAddAssignCols = row.as_mut_slice().borrow_mut(); let mut blu = Vec::new(); @@ -146,7 +146,6 @@ impl MachineAir for Ed Self::populate_field_ops( &mut vec![], 0, - 0, cols, zero.clone(), zero.clone(), @@ -173,14 +172,20 @@ impl MachineAir for Ed } fn generate_dependencies(&self, input: &Self::Record, output: &mut Self::Record) { - let chunk_size = std::cmp::max(input.ed_add_events.len() / num_cpus::get(), 1); + let events = input.get_precompile_events(SyscallCode::ED_ADD); + let chunk_size = std::cmp::max(events.len() / num_cpus::get(), 1); - let blu_batches = input - .ed_add_events + let blu_batches = events .par_chunks(chunk_size) .map(|events| { let mut blu: HashMap> = HashMap::new(); events.iter().for_each(|event| { + let event = if let PrecompileEvent::EdAdd(event) = event { + event + } else { + unreachable!(); + }; + let mut row = [F::zero(); NUM_ED_ADD_COLS]; let cols: &mut EdAddAssignCols = row.as_mut_slice().borrow_mut(); self.event_to_row(event, cols, &mut blu); @@ -193,7 +198,7 @@ impl MachineAir for Ed } fn included(&self, shard: &Self::Record) -> bool { - !shard.ed_add_events.is_empty() + !shard.get_precompile_events(SyscallCode::ED_ADD).is_empty() } } @@ -216,19 +221,18 @@ impl EdAddAssignChip { // Populate basic columns. cols.is_real = F::one(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.p_ptr = F::from_canonical_u32(event.p_ptr); cols.q_ptr = F::from_canonical_u32(event.q_ptr); - Self::populate_field_ops(blu, event.shard, event.channel, cols, p_x, p_y, q_x, q_y); + Self::populate_field_ops(blu, event.shard, cols, p_x, p_y, q_x, q_y); // Populate the memory access columns. for i in 0..WORDS_CURVE_POINT { - cols.q_access[i].populate(event.channel, event.q_memory_records[i], blu); + cols.q_access[i].populate(event.q_memory_records[i], blu); } for i in 0..WORDS_CURVE_POINT { - cols.p_access[i].populate(event.channel, event.p_memory_records[i], blu); + cols.p_access[i].populate(event.p_memory_records[i], blu); } } } @@ -260,94 +264,32 @@ where let y2 = limbs_from_prev_access(&local.q_access[8..16]); // x3_numerator = x1 * y2 + x2 * y1. - local.x3_numerator.eval( - builder, - &[x1, x2], - &[y2, y1], - local.shard, - local.channel, - local.is_real, - ); + local.x3_numerator.eval(builder, &[x1, x2], &[y2, y1], local.is_real); // y3_numerator = y1 * y2 + x1 * x2. - local.y3_numerator.eval( - builder, - &[y1, x1], - &[y2, x2], - local.shard, - local.channel, - local.is_real, - ); + local.y3_numerator.eval(builder, &[y1, x1], &[y2, x2], local.is_real); // f = x1 * x2 * y1 * y2. - local.x1_mul_y1.eval( - builder, - &x1, - &y1, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); - local.x2_mul_y2.eval( - builder, - &x2, - &y2, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); + local.x1_mul_y1.eval(builder, &x1, &y1, FieldOperation::Mul, local.is_real); + local.x2_mul_y2.eval(builder, &x2, &y2, FieldOperation::Mul, local.is_real); let x1_mul_y1 = local.x1_mul_y1.result; let x2_mul_y2 = local.x2_mul_y2.result; - local.f.eval( - builder, - &x1_mul_y1, - &x2_mul_y2, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); + local.f.eval(builder, &x1_mul_y1, &x2_mul_y2, FieldOperation::Mul, local.is_real); // d * f. let f = local.f.result; let d_biguint = E::d_biguint(); let d_const = E::BaseField::to_limbs_field::(&d_biguint); - local.d_mul_f.eval( - builder, - &f, - &d_const, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); + local.d_mul_f.eval(builder, &f, &d_const, FieldOperation::Mul, local.is_real); let d_mul_f = local.d_mul_f.result; // x3 = x3_numerator / (1 + d * f). - local.x3_ins.eval( - builder, - &local.x3_numerator.result, - &d_mul_f, - true, - local.shard, - local.channel, - local.is_real, - ); + local.x3_ins.eval(builder, &local.x3_numerator.result, &d_mul_f, true, local.is_real); // y3 = y3_numerator / (1 - d * f). - local.y3_ins.eval( - builder, - &local.y3_numerator.result, - &d_mul_f, - false, - local.shard, - local.channel, - local.is_real, - ); + local.y3_ins.eval(builder, &local.y3_numerator.result, &d_mul_f, false, local.is_real); // Constraint self.p_access.value = [self.x3_ins.result, self.y3_ins.result] // This is to ensure that p_access is updated with the new value. @@ -361,7 +303,6 @@ where builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into(), local.q_ptr, &local.q_access, @@ -370,7 +311,6 @@ where builder.eval_memory_access_slice( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(1), local.p_ptr, &local.p_access, @@ -379,13 +319,13 @@ where builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, AB::F::from_canonical_u32(SyscallCode::ED_ADD.syscall_id()), local.p_ptr, local.q_ptr, local.is_real, + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs b/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs index 0a2ee19f68..46c28f795c 100644 --- a/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs +++ b/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs @@ -11,7 +11,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, EdDecompressEvent, FieldOperation}, + events::{ByteLookupEvent, ByteRecord, EdDecompressEvent, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -23,7 +23,7 @@ use sp1_curves::{ params::{limbs_from_vec, FieldParameters, Limbs}, }; use sp1_derive::AlignedBorrow; -use sp1_stark::air::{BaseAirBuilder, MachineAir, SP1AirBuilder}; +use sp1_stark::air::{BaseAirBuilder, InteractionScope, MachineAir, SP1AirBuilder}; use typenum::U32; use crate::{ @@ -44,7 +44,6 @@ pub const NUM_ED_DECOMPRESS_COLS: usize = size_of::>(); pub struct EdDecompressCols { pub is_real: T, pub shard: T, - pub channel: T, pub clk: T, pub nonce: T, pub ptr: T, @@ -70,7 +69,6 @@ impl EdDecompressCols { let mut new_byte_lookup_events = Vec::new(); self.is_real = F::from_bool(true); self.shard = F::from_canonical_u32(event.shard); - self.channel = F::from_canonical_u8(event.channel); self.clk = F::from_canonical_u32(event.clk); self.ptr = F::from_canonical_u32(event.ptr); self.nonce = F::from_canonical_u32( @@ -78,20 +76,12 @@ impl EdDecompressCols { ); self.sign = F::from_bool(event.sign); for i in 0..8 { - self.x_access[i].populate( - event.channel, - event.x_memory_records[i], - &mut new_byte_lookup_events, - ); - self.y_access[i].populate( - event.channel, - event.y_memory_records[i], - &mut new_byte_lookup_events, - ); + self.x_access[i].populate(event.x_memory_records[i], &mut new_byte_lookup_events); + self.y_access[i].populate(event.y_memory_records[i], &mut new_byte_lookup_events); } let y = &BigUint::from_bytes_le(&event.y_bytes); - self.populate_field_ops::(&mut new_byte_lookup_events, event.shard, event.channel, y); + self.populate_field_ops::(&mut new_byte_lookup_events, event.shard, y); record.add_byte_lookup_events(new_byte_lookup_events); } @@ -100,26 +90,17 @@ impl EdDecompressCols { &mut self, blu_events: &mut Vec, shard: u32, - channel: u8, y: &BigUint, ) { let one = BigUint::one(); - self.y_range.populate(blu_events, shard, channel, y, &Ed25519BaseField::modulus()); - let yy = self.yy.populate(blu_events, shard, channel, y, y, FieldOperation::Mul); - let u = self.u.populate(blu_events, shard, channel, &yy, &one, FieldOperation::Sub); - let dyy = self.dyy.populate( - blu_events, - shard, - channel, - &E::d_biguint(), - &yy, - FieldOperation::Mul, - ); - let v = self.v.populate(blu_events, shard, channel, &one, &dyy, FieldOperation::Add); - let u_div_v = - self.u_div_v.populate(blu_events, shard, channel, &u, &v, FieldOperation::Div); - let x = self.x.populate(blu_events, shard, channel, &u_div_v, ed25519_sqrt); - self.neg_x.populate(blu_events, shard, channel, &BigUint::zero(), &x, FieldOperation::Sub); + self.y_range.populate(blu_events, shard, y, &Ed25519BaseField::modulus()); + let yy = self.yy.populate(blu_events, shard, y, y, FieldOperation::Mul); + let u = self.u.populate(blu_events, shard, &yy, &one, FieldOperation::Sub); + let dyy = self.dyy.populate(blu_events, shard, &E::d_biguint(), &yy, FieldOperation::Mul); + let v = self.v.populate(blu_events, shard, &one, &dyy, FieldOperation::Add); + let u_div_v = self.u_div_v.populate(blu_events, shard, &u, &v, FieldOperation::Div); + let x = self.x.populate(blu_events, shard, &u_div_v, ed25519_sqrt); + self.neg_x.populate(blu_events, shard, &BigUint::zero(), &x, FieldOperation::Sub); } } @@ -138,38 +119,24 @@ impl EdDecompressCols { builder, &y, &limbs_from_vec::(max_num_limbs), - self.shard, - self.channel, self.is_real, ); - self.yy.eval(builder, &y, &y, FieldOperation::Mul, self.shard, self.channel, self.is_real); + self.yy.eval(builder, &y, &y, FieldOperation::Mul, self.is_real); self.u.eval( builder, &self.yy.result, &[AB::Expr::one()].iter(), FieldOperation::Sub, - self.shard, - self.channel, self.is_real, ); let d_biguint = E::d_biguint(); let d_const = E::BaseField::to_limbs_field::(&d_biguint); - self.dyy.eval( - builder, - &d_const, - &self.yy.result, - FieldOperation::Mul, - self.shard, - self.channel, - self.is_real, - ); + self.dyy.eval(builder, &d_const, &self.yy.result, FieldOperation::Mul, self.is_real); self.v.eval( builder, &[AB::Expr::one()].iter(), &self.dyy.result, FieldOperation::Add, - self.shard, - self.channel, self.is_real, ); self.u_div_v.eval( @@ -177,31 +144,19 @@ impl EdDecompressCols { &self.u.result, &self.v.result, FieldOperation::Div, - self.shard, - self.channel, - self.is_real, - ); - self.x.eval( - builder, - &self.u_div_v.result, - AB::F::zero(), - self.shard, - self.channel, self.is_real, ); + self.x.eval(builder, &self.u_div_v.result, AB::F::zero(), self.is_real); self.neg_x.eval( builder, &[AB::Expr::zero()].iter(), &self.x.multiplication.result, FieldOperation::Sub, - self.shard, - self.channel, self.is_real, ); builder.eval_memory_access_slice( self.shard, - self.channel, self.clk, self.ptr, &self.x_access, @@ -209,7 +164,6 @@ impl EdDecompressCols { ); builder.eval_memory_access_slice( self.shard, - self.channel, self.clk, self.ptr.into() + AB::F::from_canonical_u32(32), &self.y_access, @@ -226,13 +180,13 @@ impl EdDecompressCols { builder.receive_syscall( self.shard, - self.channel, self.clk, self.nonce, AB::F::from_canonical_u32(SyscallCode::ED_DECOMPRESS.syscall_id()), self.ptr, self.sign, self.is_real, + InteractionScope::Global, ); } } @@ -263,9 +217,14 @@ impl MachineAir for EdDecompressChip RowMajorMatrix { let mut rows = Vec::new(); - - for i in 0..input.ed_decompress_events.len() { - let event = &input.ed_decompress_events[i]; + let events = input.get_precompile_events(SyscallCode::ED_DECOMPRESS); + + for event in events { + let event = if let PrecompileEvent::EdDecompress(event) = event { + event + } else { + unreachable!(); + }; let mut row = [F::zero(); NUM_ED_DECOMPRESS_COLS]; let cols: &mut EdDecompressCols = row.as_mut_slice().borrow_mut(); cols.populate::(event.clone(), output); @@ -279,7 +238,7 @@ impl MachineAir for EdDecompressChip = row.as_mut_slice().borrow_mut(); let zero = BigUint::zero(); - cols.populate_field_ops::(&mut vec![], 0, 0, &zero); + cols.populate_field_ops::(&mut vec![], 0, &zero); row }, input.fixed_log2_rows::(self), @@ -302,7 +261,7 @@ impl MachineAir for EdDecompressChip bool { - !shard.ed_decompress_events.is_empty() + !shard.get_precompile_events(SyscallCode::ED_DECOMPRESS).is_empty() } } diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs index b22518cce2..e15d784281 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs @@ -12,7 +12,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, FieldOperation}, + events::{ByteLookupEvent, ByteRecord, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -21,7 +21,7 @@ use sp1_curves::{ weierstrass::{FieldType, FpOpField}, }; use sp1_derive::AlignedBorrow; -use sp1_stark::air::{BaseAirBuilder, MachineAir, Polynomial, SP1AirBuilder}; +use sp1_stark::air::{BaseAirBuilder, InteractionScope, MachineAir, Polynomial, SP1AirBuilder}; use crate::{ memory::{value_as_limbs, MemoryReadCols, MemoryWriteCols}, @@ -43,7 +43,6 @@ pub struct FpOpChip

{ pub struct FpOpCols { pub is_real: T, pub shard: T, - pub channel: T, pub nonce: T, pub clk: T, pub is_add: T, @@ -65,7 +64,6 @@ impl FpOpChip

{ fn populate_field_ops( blu_events: &mut Vec, shard: u32, - channel: u8, cols: &mut FpOpCols, p: BigUint, q: BigUint, @@ -73,7 +71,7 @@ impl FpOpChip

{ ) { let modulus_bytes = P::MODULUS; let modulus = BigUint::from_bytes_le(modulus_bytes); - cols.output.populate_with_modulus(blu_events, shard, channel, &p, &q, &modulus, op); + cols.output.populate_with_modulus(blu_events, shard, &p, &q, &modulus, op); } } @@ -90,16 +88,24 @@ impl MachineAir for FpOpChip

{ } fn generate_trace(&self, input: &Self::Record, output: &mut Self::Record) -> RowMajorMatrix { + // All the fp events for a given curve are coalesce to the curve's Add operation. Only retrieve + // precompile events for that operation. + // TODO: Fix this. + let events = match P::FIELD_TYPE { - FieldType::Bn254 => &input.bn254_fp_events, - FieldType::Bls12381 => &input.bls12381_fp_events, + FieldType::Bn254 => input.get_precompile_events(SyscallCode::BN254_FP_ADD).iter(), + FieldType::Bls12381 => input.get_precompile_events(SyscallCode::BLS12381_FP_ADD).iter(), }; let mut rows = Vec::new(); let mut new_byte_lookup_events = Vec::new(); - for i in 0..events.len() { - let event = &events[i]; + for event in events { + let event = match (P::FIELD_TYPE, event) { + (FieldType::Bn254, PrecompileEvent::Bn254Fp(event)) => event, + (FieldType::Bls12381, PrecompileEvent::Bls12381Fp(event)) => event, + _ => unreachable!(), + }; let mut row = vec![F::zero(); num_fp_cols::

()]; let cols: &mut FpOpCols = row.as_mut_slice().borrow_mut(); @@ -113,7 +119,6 @@ impl MachineAir for FpOpChip

{ cols.is_mul = F::from_canonical_u8((event.op == FieldOperation::Mul) as u8); cols.is_real = F::one(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.x_ptr = F::from_canonical_u32(event.x_ptr); cols.y_ptr = F::from_canonical_u32(event.y_ptr); @@ -121,7 +126,6 @@ impl MachineAir for FpOpChip

{ Self::populate_field_ops( &mut new_byte_lookup_events, event.shard, - event.channel, cols, p, q, @@ -130,20 +134,12 @@ impl MachineAir for FpOpChip

{ // Populate the memory access columns. for i in 0..cols.y_access.len() { - cols.y_access[i].populate( - event.channel, - event.y_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.y_access[i].populate(event.y_memory_records[i], &mut new_byte_lookup_events); } for i in 0..cols.x_access.len() { - cols.x_access[i].populate( - event.channel, - event.x_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.x_access[i].populate(event.x_memory_records[i], &mut new_byte_lookup_events); } - rows.push(row) + rows.push(row); } output.add_byte_lookup_events(new_byte_lookup_events); @@ -158,7 +154,6 @@ impl MachineAir for FpOpChip

{ Self::populate_field_ops( &mut vec![], 0, - 0, cols, zero.clone(), zero, @@ -184,9 +179,22 @@ impl MachineAir for FpOpChip

{ } fn included(&self, shard: &Self::Record) -> bool { + // All the fp events for a given curve are coalesce to the curve's Add operation. Only check for + // that operation. + // TODO: Fix this. + + assert!( + shard.get_precompile_events(SyscallCode::BN254_FP_SUB).is_empty() + && shard.get_precompile_events(SyscallCode::BN254_FP_MUL).is_empty() + && shard.get_precompile_events(SyscallCode::BLS12381_FP_SUB).is_empty() + && shard.get_precompile_events(SyscallCode::BLS12381_FP_MUL).is_empty() + ); + match P::FIELD_TYPE { - FieldType::Bn254 => !shard.bn254_fp_events.is_empty(), - FieldType::Bls12381 => !shard.bls12381_fp_events.is_empty(), + FieldType::Bn254 => !shard.get_precompile_events(SyscallCode::BN254_FP_ADD).is_empty(), + FieldType::Bls12381 => { + !shard.get_precompile_events(SyscallCode::BLS12381_FP_ADD).is_empty() + } } } } @@ -237,8 +245,6 @@ where local.is_sub, local.is_mul, AB::F::zero(), - local.shard, - local.channel, local.is_real, ); @@ -248,7 +254,6 @@ where builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into(), local.y_ptr, &local.y_access, @@ -256,7 +261,6 @@ where ); builder.eval_memory_access_slice( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(1), /* We read p at +1 since p, q could be the * same. */ local.x_ptr, @@ -285,13 +289,13 @@ where builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, syscall_id_felt, local.x_ptr, local.y_ptr, local.is_real, + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs index 9f4e0ec919..6b32755034 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp2_addsub.rs @@ -12,7 +12,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, FieldOperation}, + events::{ByteLookupEvent, ByteRecord, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -21,7 +21,7 @@ use sp1_curves::{ weierstrass::{FieldType, FpOpField}, }; use sp1_derive::AlignedBorrow; -use sp1_stark::air::{BaseAirBuilder, MachineAir, Polynomial, SP1AirBuilder}; +use sp1_stark::air::{BaseAirBuilder, InteractionScope, MachineAir, Polynomial, SP1AirBuilder}; use typenum::Unsigned; use crate::{ @@ -40,7 +40,6 @@ pub const fn num_fp2_addsub_cols() -> usize { pub struct Fp2AddSubAssignCols { pub is_real: T, pub shard: T, - pub channel: T, pub nonce: T, pub clk: T, pub is_add: T, @@ -65,7 +64,6 @@ impl Fp2AddSubAssignChip

{ fn populate_field_ops( blu_events: &mut Vec, shard: u32, - channel: u8, cols: &mut Fp2AddSubAssignCols, p_x: BigUint, p_y: BigUint, @@ -75,8 +73,8 @@ impl Fp2AddSubAssignChip

{ ) { let modulus_bytes = P::MODULUS; let modulus = BigUint::from_bytes_le(modulus_bytes); - cols.c0.populate_with_modulus(blu_events, shard, channel, &p_x, &q_x, &modulus, op); - cols.c1.populate_with_modulus(blu_events, shard, channel, &p_y, &q_y, &modulus, op); + cols.c0.populate_with_modulus(blu_events, shard, &p_x, &q_x, &modulus, op); + cols.c1.populate_with_modulus(blu_events, shard, &p_y, &q_y, &modulus, op); } } @@ -93,16 +91,26 @@ impl MachineAir for Fp2AddSubAssignChip

{ } fn generate_trace(&self, input: &Self::Record, output: &mut Self::Record) -> RowMajorMatrix { + // All the fp2 sub and add events for a given curve are coalesce to the curve's Add operation. Only retrieve + // precompile events for that operation. + // TODO: Fix this. + let events = match P::FIELD_TYPE { - FieldType::Bn254 => &input.bn254_fp2_addsub_events, - FieldType::Bls12381 => &input.bls12381_fp2_addsub_events, + FieldType::Bn254 => input.get_precompile_events(SyscallCode::BN254_FP2_ADD).iter(), + FieldType::Bls12381 => { + input.get_precompile_events(SyscallCode::BLS12381_FP2_ADD).iter() + } }; let mut rows = Vec::new(); let mut new_byte_lookup_events = Vec::new(); - for i in 0..events.len() { - let event = &events[i]; + for event in events { + let event = match (P::FIELD_TYPE, event) { + (FieldType::Bn254, PrecompileEvent::Bn254Fp2AddSub(event)) => event, + (FieldType::Bls12381, PrecompileEvent::Bls12381Fp2AddSub(event)) => event, + _ => unreachable!(), + }; let mut row = vec![F::zero(); num_fp2_addsub_cols::

()]; let cols: &mut Fp2AddSubAssignCols = row.as_mut_slice().borrow_mut(); @@ -117,7 +125,6 @@ impl MachineAir for Fp2AddSubAssignChip

{ cols.is_real = F::one(); cols.is_add = F::from_bool(event.op == FieldOperation::Add); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.x_ptr = F::from_canonical_u32(event.x_ptr); cols.y_ptr = F::from_canonical_u32(event.y_ptr); @@ -125,7 +132,6 @@ impl MachineAir for Fp2AddSubAssignChip

{ Self::populate_field_ops( &mut new_byte_lookup_events, event.shard, - event.channel, cols, p_x, p_y, @@ -136,20 +142,12 @@ impl MachineAir for Fp2AddSubAssignChip

{ // Populate the memory access columns. for i in 0..cols.y_access.len() { - cols.y_access[i].populate( - event.channel, - event.y_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.y_access[i].populate(event.y_memory_records[i], &mut new_byte_lookup_events); } for i in 0..cols.x_access.len() { - cols.x_access[i].populate( - event.channel, - event.x_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.x_access[i].populate(event.x_memory_records[i], &mut new_byte_lookup_events); } - rows.push(row) + rows.push(row); } output.add_byte_lookup_events(new_byte_lookup_events); @@ -164,7 +162,6 @@ impl MachineAir for Fp2AddSubAssignChip

{ Self::populate_field_ops( &mut vec![], 0, - 0, cols, zero.clone(), zero.clone(), @@ -195,9 +192,20 @@ impl MachineAir for Fp2AddSubAssignChip

{ } fn included(&self, shard: &Self::Record) -> bool { + // All the fp2 sub and add events for a given curve are coalesce to the curve's Add operation. Only retrieve + // precompile events for that operation. + // TODO: Fix this. + + assert!( + shard.get_precompile_events(SyscallCode::BN254_FP_SUB).is_empty() + && shard.get_precompile_events(SyscallCode::BLS12381_FP_SUB).is_empty() + ); + match P::FIELD_TYPE { - FieldType::Bn254 => !shard.bn254_fp2_addsub_events.is_empty(), - FieldType::Bls12381 => !shard.bls12381_fp2_addsub_events.is_empty(), + FieldType::Bn254 => !shard.get_precompile_events(SyscallCode::BN254_FP2_ADD).is_empty(), + FieldType::Bls12381 => { + !shard.get_precompile_events(SyscallCode::BLS12381_FP2_ADD).is_empty() + } } } } @@ -247,8 +255,6 @@ where AB::Expr::one() - local.is_add, AB::F::zero(), AB::F::zero(), - local.shard, - local.channel, local.is_real, ); @@ -261,8 +267,6 @@ where AB::Expr::one() - local.is_add, AB::F::zero(), AB::F::zero(), - local.shard, - local.channel, local.is_real, ); } @@ -277,7 +281,6 @@ where ); builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into(), local.y_ptr, &local.y_access, @@ -285,7 +288,6 @@ where ); builder.eval_memory_access_slice( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(1), /* We read p at +1 since p, q could be the * same. */ local.x_ptr, @@ -309,13 +311,13 @@ where builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, syscall_id_felt, local.x_ptr, local.y_ptr, local.is_real, + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs index 802ff0656c..07fb9c3af7 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp2_mul.rs @@ -11,7 +11,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, FieldOperation}, + events::{ByteLookupEvent, ByteRecord, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -20,7 +20,7 @@ use sp1_curves::{ weierstrass::{FieldType, FpOpField}, }; use sp1_derive::AlignedBorrow; -use sp1_stark::air::{BaseAirBuilder, MachineAir, Polynomial, SP1AirBuilder}; +use sp1_stark::air::{BaseAirBuilder, InteractionScope, MachineAir, Polynomial, SP1AirBuilder}; use std::mem::size_of; use typenum::Unsigned; @@ -40,7 +40,6 @@ pub const fn num_fp2_mul_cols() -> usize { pub struct Fp2MulAssignCols { pub is_real: T, pub shard: T, - pub channel: T, pub nonce: T, pub clk: T, pub x_ptr: T, @@ -69,7 +68,6 @@ impl Fp2MulAssignChip

{ fn populate_field_ops( blu_events: &mut Vec, shard: u32, - channel: u8, cols: &mut Fp2MulAssignCols, p_x: BigUint, p_y: BigUint, @@ -81,7 +79,6 @@ impl Fp2MulAssignChip

{ let a0_mul_b0 = cols.a0_mul_b0.populate_with_modulus( blu_events, shard, - channel, &p_x, &q_x, &modulus, @@ -90,7 +87,6 @@ impl Fp2MulAssignChip

{ let a1_mul_b1 = cols.a1_mul_b1.populate_with_modulus( blu_events, shard, - channel, &p_y, &q_y, &modulus, @@ -99,7 +95,6 @@ impl Fp2MulAssignChip

{ let a0_mul_b1 = cols.a0_mul_b1.populate_with_modulus( blu_events, shard, - channel, &p_x, &q_y, &modulus, @@ -108,7 +103,6 @@ impl Fp2MulAssignChip

{ let a1_mul_b0 = cols.a1_mul_b0.populate_with_modulus( blu_events, shard, - channel, &p_y, &q_x, &modulus, @@ -117,7 +111,6 @@ impl Fp2MulAssignChip

{ cols.c0.populate_with_modulus( blu_events, shard, - channel, &a0_mul_b0, &a1_mul_b1, &modulus, @@ -126,7 +119,6 @@ impl Fp2MulAssignChip

{ cols.c1.populate_with_modulus( blu_events, shard, - channel, &a0_mul_b1, &a1_mul_b0, &modulus, @@ -149,15 +141,20 @@ impl MachineAir for Fp2MulAssignChip

{ fn generate_trace(&self, input: &Self::Record, output: &mut Self::Record) -> RowMajorMatrix { let events = match P::FIELD_TYPE { - FieldType::Bn254 => &input.bn254_fp2_mul_events, - FieldType::Bls12381 => &input.bls12381_fp2_mul_events, + FieldType::Bn254 => input.get_precompile_events(SyscallCode::BN254_FP2_MUL), + FieldType::Bls12381 => input.get_precompile_events(SyscallCode::BLS12381_FP2_MUL), }; let mut rows = Vec::new(); let mut new_byte_lookup_events = Vec::new(); - for i in 0..events.len() { - let event = &events[i]; + for event in events { + let event = match (P::FIELD_TYPE, event) { + (FieldType::Bn254, PrecompileEvent::Bn254Fp2Mul(event)) => event, + (FieldType::Bls12381, PrecompileEvent::Bls12381Fp2Mul(event)) => event, + _ => unreachable!(), + }; + let mut row = vec![F::zero(); num_fp2_mul_cols::

()]; let cols: &mut Fp2MulAssignCols = row.as_mut_slice().borrow_mut(); @@ -170,7 +167,6 @@ impl MachineAir for Fp2MulAssignChip

{ cols.is_real = F::one(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.x_ptr = F::from_canonical_u32(event.x_ptr); cols.y_ptr = F::from_canonical_u32(event.y_ptr); @@ -178,7 +174,6 @@ impl MachineAir for Fp2MulAssignChip

{ Self::populate_field_ops( &mut new_byte_lookup_events, event.shard, - event.channel, cols, p_x, p_y, @@ -188,20 +183,12 @@ impl MachineAir for Fp2MulAssignChip

{ // Populate the memory access columns. for i in 0..cols.y_access.len() { - cols.y_access[i].populate( - event.channel, - event.y_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.y_access[i].populate(event.y_memory_records[i], &mut new_byte_lookup_events); } for i in 0..cols.x_access.len() { - cols.x_access[i].populate( - event.channel, - event.x_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.x_access[i].populate(event.x_memory_records[i], &mut new_byte_lookup_events); } - rows.push(row) + rows.push(row); } output.add_byte_lookup_events(new_byte_lookup_events); @@ -215,7 +202,6 @@ impl MachineAir for Fp2MulAssignChip

{ Self::populate_field_ops( &mut vec![], 0, - 0, cols, zero.clone(), zero.clone(), @@ -246,8 +232,10 @@ impl MachineAir for Fp2MulAssignChip

{ fn included(&self, shard: &Self::Record) -> bool { match P::FIELD_TYPE { - FieldType::Bn254 => !shard.bn254_fp2_mul_events.is_empty(), - FieldType::Bls12381 => !shard.bls12381_fp2_mul_events.is_empty(), + FieldType::Bn254 => !shard.get_precompile_events(SyscallCode::BN254_FP2_MUL).is_empty(), + FieldType::Bls12381 => { + !shard.get_precompile_events(SyscallCode::BLS12381_FP2_MUL).is_empty() + } } } } @@ -291,8 +279,6 @@ where &q_x, &p_modulus, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -302,8 +288,6 @@ where &q_y, &p_modulus, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -313,8 +297,6 @@ where &local.a1_mul_b1.result, &p_modulus, FieldOperation::Sub, - local.shard, - local.channel, local.is_real, ); } @@ -326,8 +308,6 @@ where &q_y, &p_modulus, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -337,8 +317,6 @@ where &q_x, &p_modulus, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -348,8 +326,6 @@ where &local.a1_mul_b0.result, &p_modulus, FieldOperation::Add, - local.shard, - local.channel, local.is_real, ); } @@ -365,7 +341,6 @@ where builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into(), local.y_ptr, &local.y_access, @@ -373,7 +348,6 @@ where ); builder.eval_memory_access_slice( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(1), /* We read p at +1 since p, q could be the * same. */ local.x_ptr, @@ -390,13 +364,13 @@ where builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, syscall_id_felt, local.x_ptr, local.y_ptr, local.is_real, + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/syscall/precompiles/keccak256/air.rs b/crates/core/machine/src/syscall/precompiles/keccak256/air.rs index 4a17ea1b3c..75a9136b97 100644 --- a/crates/core/machine/src/syscall/precompiles/keccak256/air.rs +++ b/crates/core/machine/src/syscall/precompiles/keccak256/air.rs @@ -5,7 +5,7 @@ use p3_field::AbstractField; use p3_keccak_air::{KeccakAir, NUM_KECCAK_COLS, NUM_ROUNDS, U64_LIMBS}; use p3_matrix::Matrix; use sp1_core_executor::syscalls::SyscallCode; -use sp1_stark::air::{SP1AirBuilder, SubAirBuilder}; +use sp1_stark::air::{InteractionScope, SP1AirBuilder, SubAirBuilder}; use super::{ columns::{KeccakMemCols, NUM_KECCAK_MEM_COLS}, @@ -54,7 +54,6 @@ where builder.eval_memory_access( local.shard, - local.channel, local.clk + final_step, // The clk increments by 1 after a final step local.state_addr + AB::Expr::from_canonical_u32(i * 4), &local.state_mem[i as usize], @@ -66,13 +65,13 @@ where builder.assert_eq(local.receive_ecall, first_step * local.is_real); builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, AB::F::from_canonical_u32(SyscallCode::KECCAK_PERMUTE.syscall_id()), local.state_addr, AB::Expr::zero(), local.receive_ecall, + InteractionScope::Global, ); // Constrain that the inputs stay the same throughout the 24 rows of each cycle @@ -80,7 +79,6 @@ where let mut transition_not_final_builder = transition_builder.when(not_final_step); transition_not_final_builder.assert_eq(local.shard, next.shard); transition_not_final_builder.assert_eq(local.clk, next.clk); - transition_not_final_builder.assert_eq(local.channel, next.channel); transition_not_final_builder.assert_eq(local.state_addr, next.state_addr); transition_not_final_builder.assert_eq(local.is_real, next.is_real); @@ -126,12 +124,7 @@ where // Range check all the values in `state_mem` to be bytes. for i in 0..STATE_NUM_WORDS { - builder.slice_range_check_u8( - &local.state_mem[i].value().0, - local.shard, - local.channel, - local.do_memory_check, - ); + builder.slice_range_check_u8(&local.state_mem[i].value().0, local.do_memory_check); } let mut sub_builder = diff --git a/crates/core/machine/src/syscall/precompiles/keccak256/columns.rs b/crates/core/machine/src/syscall/precompiles/keccak256/columns.rs index ad3aa5f099..7b622b3bc1 100644 --- a/crates/core/machine/src/syscall/precompiles/keccak256/columns.rs +++ b/crates/core/machine/src/syscall/precompiles/keccak256/columns.rs @@ -18,7 +18,6 @@ pub(crate) struct KeccakMemCols { pub keccak: KeccakCols, pub shard: T, - pub channel: T, pub clk: T, pub nonce: T, pub state_addr: T, diff --git a/crates/core/machine/src/syscall/precompiles/keccak256/trace.rs b/crates/core/machine/src/syscall/precompiles/keccak256/trace.rs index bca7080734..757c7c9c32 100644 --- a/crates/core/machine/src/syscall/precompiles/keccak256/trace.rs +++ b/crates/core/machine/src/syscall/precompiles/keccak256/trace.rs @@ -4,8 +4,12 @@ use p3_field::PrimeField32; use p3_keccak_air::{generate_trace_rows, NUM_KECCAK_COLS, NUM_ROUNDS}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::{ParallelIterator, ParallelSlice}; -use sp1_core_executor::{ExecutionRecord, Program}; -use sp1_stark::{air::MachineAir, MachineRecord}; +use sp1_core_executor::{ + events::{KeccakPermuteEvent, PrecompileEvent}, + syscalls::SyscallCode, + ExecutionRecord, Program, +}; +use sp1_stark::air::MachineAir; use super::{ columns::{KeccakMemCols, NUM_KECCAK_MEM_COLS}, @@ -26,21 +30,29 @@ impl MachineAir for KeccakPermuteChip { input: &ExecutionRecord, output: &mut ExecutionRecord, ) -> RowMajorMatrix { - let num_events = input.keccak_permute_events.len(); + let events = input.get_precompile_events(SyscallCode::KECCAK_PERMUTE); + let num_events = events.len(); let chunk_size = std::cmp::max(num_events / num_cpus::get(), 1); + fn event_transform(event: &PrecompileEvent) -> &KeccakPermuteEvent { + if let PrecompileEvent::KeccakPermute(event) = event { + event + } else { + unreachable!() + } + } + // Use par_chunks to generate the trace in parallel. - let rows_and_records = (0..num_events) + let rows_and_blu_events = (0..num_events) .collect::>() .par_chunks(chunk_size) .map(|chunk| { - let mut record = ExecutionRecord::default(); let mut new_byte_lookup_events = Vec::new(); // First generate all the p3_keccak_air traces at once. let perm_inputs = chunk .iter() - .map(|event_index| input.keccak_permute_events[*event_index].pre_state) + .map(|event_index| event_transform(&events[*event_index]).pre_state) .collect::>(); let p3_keccak_trace = generate_trace_rows::(perm_inputs); @@ -50,10 +62,9 @@ impl MachineAir for KeccakPermuteChip { .flat_map(|(index_in_chunk, event_index)| { let mut rows = Vec::new(); - let event = &input.keccak_permute_events[*event_index]; + let event = event_transform(&events[*event_index]); let start_clk = event.clk; let shard = event.shard; - let channel = event.channel; // Create all the rows for the permutation. for i in 0..NUM_ROUNDS { @@ -66,7 +77,6 @@ impl MachineAir for KeccakPermuteChip { let cols: &mut KeccakMemCols = row.as_mut_slice().borrow_mut(); cols.shard = F::from_canonical_u32(shard); - cols.channel = F::from_canonical_u8(channel); cols.clk = F::from_canonical_u32(start_clk); cols.state_addr = F::from_canonical_u32(event.state_addr); cols.is_real = F::one(); @@ -75,14 +85,10 @@ impl MachineAir for KeccakPermuteChip { if i == 0 { for (j, read_record) in event.state_read_records.iter().enumerate() { - cols.state_mem[j].populate_read( - channel, - *read_record, - &mut new_byte_lookup_events, - ); + cols.state_mem[j] + .populate_read(*read_record, &mut new_byte_lookup_events); new_byte_lookup_events.add_u8_range_checks( shard, - channel, &read_record.value.to_le_bytes(), ); } @@ -95,14 +101,10 @@ impl MachineAir for KeccakPermuteChip { for (j, write_record) in event.state_write_records.iter().enumerate() { - cols.state_mem[j].populate_write( - channel, - *write_record, - &mut new_byte_lookup_events, - ); + cols.state_mem[j] + .populate_write(*write_record, &mut new_byte_lookup_events); new_byte_lookup_events.add_u8_range_checks( shard, - channel, &write_record.value.to_le_bytes(), ); } @@ -114,16 +116,15 @@ impl MachineAir for KeccakPermuteChip { rows }) .collect::>(); - record.add_byte_lookup_events(new_byte_lookup_events); - (rows, record) + (rows, new_byte_lookup_events) }) .collect::>(); // Generate the trace rows for each event. let mut rows: Vec<[F; NUM_KECCAK_MEM_COLS]> = vec![]; - for (mut row, mut record) in rows_and_records { + for (mut row, blu_events) in rows_and_blu_events { rows.append(&mut row); - output.append(&mut record); + output.add_byte_lookup_events(blu_events); } let nb_rows = rows.len(); @@ -167,6 +168,6 @@ impl MachineAir for KeccakPermuteChip { } fn included(&self, shard: &Self::Record) -> bool { - !shard.keccak_permute_events.is_empty() + !shard.get_precompile_events(SyscallCode::KECCAK_PERMUTE).is_empty() } } diff --git a/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs b/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs index db1a58a7f0..d804933942 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/compress/air.rs @@ -4,7 +4,10 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::AbstractField; use p3_matrix::Matrix; use sp1_core_executor::syscalls::SyscallCode; -use sp1_stark::{air::SP1AirBuilder, Word}; +use sp1_stark::{ + air::{InteractionScope, SP1AirBuilder}, + Word, +}; use super::{ columns::{ShaCompressCols, NUM_SHA_COMPRESS_COLS}, @@ -51,13 +54,13 @@ where builder.assert_eq(local.start, local.is_real * local.octet[0] * local.octet_num[0]); builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, AB::F::from_canonical_u32(SyscallCode::SHA_COMPRESS.syscall_id()), local.w_ptr, local.h_ptr, local.start, + InteractionScope::Global, ); } } @@ -172,10 +175,6 @@ impl ShaCompressChip { .when(local.is_real) .when_not(local.is_last_row) .assert_eq(local.clk, next.clk); - builder - .when_transition() - .when_not(local.is_last_row) - .assert_eq(local.channel, next.channel); builder .when_transition() .when(local.is_real) @@ -209,7 +208,6 @@ impl ShaCompressChip { fn eval_memory(&self, builder: &mut AB, local: &ShaCompressCols) { builder.eval_memory_access( local.shard, - local.channel, local.clk + local.is_finalize, local.mem_addr, &local.mem, @@ -296,8 +294,6 @@ impl ShaCompressChip { local.e, 6, local.e_rr_6, - local.shard, - local.channel, local.is_compression, ); // Calculate e rightrotate 11. @@ -306,8 +302,6 @@ impl ShaCompressChip { local.e, 11, local.e_rr_11, - local.shard, - local.channel, local.is_compression, ); // Calculate e rightrotate 25. @@ -316,8 +310,6 @@ impl ShaCompressChip { local.e, 25, local.e_rr_25, - local.shard, - local.channel, local.is_compression, ); // Calculate (e rightrotate 6) xor (e rightrotate 11). @@ -326,8 +318,6 @@ impl ShaCompressChip { local.e_rr_6.value, local.e_rr_11.value, local.s1_intermediate, - local.shard, - local.channel, local.is_compression, ); // Calculate S1 := ((e rightrotate 6) xor (e rightrotate 11)) xor (e rightrotate 25). @@ -336,39 +326,20 @@ impl ShaCompressChip { local.s1_intermediate.value, local.e_rr_25.value, local.s1, - local.shard, - local.channel, local.is_compression, ); // Calculate ch := (e and f) xor ((not e) and g). // Calculate e and f. - AndOperation::::eval( - builder, - local.e, - local.f, - local.e_and_f, - local.shard, - local.channel, - local.is_compression, - ); + AndOperation::::eval(builder, local.e, local.f, local.e_and_f, local.is_compression); // Calculate not e. - NotOperation::::eval( - builder, - local.e, - local.e_not, - local.shard, - local.channel, - local.is_compression, - ); + NotOperation::::eval(builder, local.e, local.e_not, local.is_compression); // Calculate (not e) and g. AndOperation::::eval( builder, local.e_not.value, local.g, local.e_not_and_g, - local.shard, - local.channel, local.is_compression, ); // Calculate ch := (e and f) xor ((not e) and g). @@ -377,8 +348,6 @@ impl ShaCompressChip { local.e_and_f.value, local.e_not_and_g.value, local.ch, - local.shard, - local.channel, local.is_compression, ); @@ -386,8 +355,6 @@ impl ShaCompressChip { Add5Operation::::eval( builder, &[local.h, local.s1.value, local.ch.value, local.k, local.mem.access.value], - local.shard, - local.channel, local.is_compression, local.temp1, ); @@ -399,8 +366,6 @@ impl ShaCompressChip { local.a, 2, local.a_rr_2, - local.shard, - local.channel, local.is_compression, ); // Calculate a rightrotate 13. @@ -409,8 +374,6 @@ impl ShaCompressChip { local.a, 13, local.a_rr_13, - local.shard, - local.channel, local.is_compression, ); // Calculate a rightrotate 22. @@ -419,8 +382,6 @@ impl ShaCompressChip { local.a, 22, local.a_rr_22, - local.shard, - local.channel, local.is_compression, ); // Calculate (a rightrotate 2) xor (a rightrotate 13). @@ -429,8 +390,6 @@ impl ShaCompressChip { local.a_rr_2.value, local.a_rr_13.value, local.s0_intermediate, - local.shard, - local.channel, local.is_compression, ); // Calculate S0 := ((a rightrotate 2) xor (a rightrotate 13)) xor (a rightrotate 22). @@ -439,50 +398,22 @@ impl ShaCompressChip { local.s0_intermediate.value, local.a_rr_22.value, local.s0, - local.shard, - local.channel, local.is_compression, ); // Calculate maj := (a and b) xor (a and c) xor (b and c). // Calculate a and b. - AndOperation::::eval( - builder, - local.a, - local.b, - local.a_and_b, - local.shard, - local.channel, - local.is_compression, - ); + AndOperation::::eval(builder, local.a, local.b, local.a_and_b, local.is_compression); // Calculate a and c. - AndOperation::::eval( - builder, - local.a, - local.c, - local.a_and_c, - local.shard, - local.channel, - local.is_compression, - ); + AndOperation::::eval(builder, local.a, local.c, local.a_and_c, local.is_compression); // Calculate b and c. - AndOperation::::eval( - builder, - local.b, - local.c, - local.b_and_c, - local.shard, - local.channel, - local.is_compression, - ); + AndOperation::::eval(builder, local.b, local.c, local.b_and_c, local.is_compression); // Calculate (a and b) xor (a and c). XorOperation::::eval( builder, local.a_and_b.value, local.a_and_c.value, local.maj_intermediate, - local.shard, - local.channel, local.is_compression, ); // Calculate maj := ((a and b) xor (a and c)) xor (b and c). @@ -491,8 +422,6 @@ impl ShaCompressChip { local.maj_intermediate.value, local.b_and_c.value, local.maj, - local.shard, - local.channel, local.is_compression, ); @@ -502,8 +431,6 @@ impl ShaCompressChip { local.s0.value, local.maj.value, local.temp2, - local.shard, - local.channel, local.is_compression.into(), ); @@ -513,8 +440,6 @@ impl ShaCompressChip { local.d, local.temp1.value, local.d_add_temp1, - local.shard, - local.channel, local.is_compression.into(), ); @@ -524,8 +449,6 @@ impl ShaCompressChip { local.temp1.value, local.temp2.value, local.temp1_add_temp2, - local.shard, - local.channel, local.is_compression.into(), ); @@ -581,8 +504,6 @@ impl ShaCompressChip { local.mem.prev_value, local.finalized_operand, local.finalize_add, - local.shard, - local.channel, local.is_finalize.into(), ); diff --git a/crates/core/machine/src/syscall/precompiles/sha256/compress/columns.rs b/crates/core/machine/src/syscall/precompiles/sha256/compress/columns.rs index d45b03ac7c..5d48b9edcc 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/compress/columns.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/compress/columns.rs @@ -25,7 +25,6 @@ pub const NUM_SHA_COMPRESS_COLS: usize = size_of::>(); pub struct ShaCompressCols { /// Inputs. pub shard: T, - pub channel: T, pub nonce: T, pub clk: T, pub w_ptr: T, diff --git a/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs b/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs index 8d327d9820..9d9015f78d 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/compress/trace.rs @@ -6,7 +6,8 @@ use p3_field::PrimeField32; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::{ParallelIterator, ParallelSlice}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, ShaCompressEvent}, + events::{ByteLookupEvent, ByteRecord, PrecompileEvent, ShaCompressEvent}, + syscalls::SyscallCode, ExecutionRecord, Program, }; use sp1_stark::{air::MachineAir, Word}; @@ -34,9 +35,13 @@ impl MachineAir for ShaCompressChip { let rows = Vec::new(); let mut wrapped_rows = Some(rows); - for i in 0..input.sha_compress_events.len() { - let event = input.sha_compress_events[i].clone(); - self.event_to_rows(&event, &mut wrapped_rows, &mut Vec::new()); + for event in input.get_precompile_events(SyscallCode::SHA_COMPRESS) { + let event = if let PrecompileEvent::ShaCompress(event) = event { + event + } else { + unreachable!() + }; + self.event_to_rows(event, &mut wrapped_rows, &mut Vec::new()); } let mut rows = wrapped_rows.unwrap(); @@ -89,14 +94,19 @@ impl MachineAir for ShaCompressChip { } fn generate_dependencies(&self, input: &Self::Record, output: &mut Self::Record) { - let chunk_size = std::cmp::max(input.sha_compress_events.len() / num_cpus::get(), 1); + let events = input.get_precompile_events(SyscallCode::SHA_COMPRESS); + let chunk_size = std::cmp::max(events.len() / num_cpus::get(), 1); - let blu_batches = input - .sha_compress_events + let blu_batches = events .par_chunks(chunk_size) .map(|events| { let mut blu: HashMap> = HashMap::new(); events.iter().for_each(|event| { + let event = if let PrecompileEvent::ShaCompress(event) = event { + event + } else { + unreachable!() + }; self.event_to_rows::(event, &mut None, &mut blu); }); blu @@ -107,7 +117,7 @@ impl MachineAir for ShaCompressChip { } fn included(&self, shard: &Self::Record) -> bool { - !shard.sha_compress_events.is_empty() + !shard.get_precompile_events(SyscallCode::SHA_COMPRESS).is_empty() } } @@ -119,7 +129,6 @@ impl ShaCompressChip { blu: &mut impl ByteRecord, ) { let shard = event.shard; - let channel = event.channel; let og_h = event.h; @@ -131,7 +140,6 @@ impl ShaCompressChip { let cols: &mut ShaCompressCols = row.as_mut_slice().borrow_mut(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.w_ptr = F::from_canonical_u32(event.w_ptr); cols.h_ptr = F::from_canonical_u32(event.h_ptr); @@ -140,7 +148,7 @@ impl ShaCompressChip { cols.octet_num[octet_num_idx] = F::one(); cols.is_initialize = F::one(); - cols.mem.populate_read(channel, event.h_read_records[j], blu); + cols.mem.populate_read(event.h_read_records[j], blu); cols.mem_addr = F::from_canonical_u32(event.h_ptr + (j * 4) as u32); cols.a = Word::from(event.h_read_records[0].value); @@ -174,11 +182,10 @@ impl ShaCompressChip { cols.octet_num[octet_num_idx] = F::one(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.w_ptr = F::from_canonical_u32(event.w_ptr); cols.h_ptr = F::from_canonical_u32(event.h_ptr); - cols.mem.populate_read(channel, event.w_i_read_records[j], blu); + cols.mem.populate_read(event.w_i_read_records[j], blu); cols.mem_addr = F::from_canonical_u32(event.w_ptr + (j * 4) as u32); let a = h_array[0]; @@ -198,39 +205,35 @@ impl ShaCompressChip { cols.g = Word::from(g); cols.h = Word::from(h); - let e_rr_6 = cols.e_rr_6.populate(blu, shard, channel, e, 6); - let e_rr_11 = cols.e_rr_11.populate(blu, shard, channel, e, 11); - let e_rr_25 = cols.e_rr_25.populate(blu, shard, channel, e, 25); - let s1_intermediate = - cols.s1_intermediate.populate(blu, shard, channel, e_rr_6, e_rr_11); - let s1 = cols.s1.populate(blu, shard, channel, s1_intermediate, e_rr_25); + let e_rr_6 = cols.e_rr_6.populate(blu, shard, e, 6); + let e_rr_11 = cols.e_rr_11.populate(blu, shard, e, 11); + let e_rr_25 = cols.e_rr_25.populate(blu, shard, e, 25); + let s1_intermediate = cols.s1_intermediate.populate(blu, shard, e_rr_6, e_rr_11); + let s1 = cols.s1.populate(blu, shard, s1_intermediate, e_rr_25); - let e_and_f = cols.e_and_f.populate(blu, shard, channel, e, f); - let e_not = cols.e_not.populate(blu, shard, channel, e); - let e_not_and_g = cols.e_not_and_g.populate(blu, shard, channel, e_not, g); - let ch = cols.ch.populate(blu, shard, channel, e_and_f, e_not_and_g); + let e_and_f = cols.e_and_f.populate(blu, shard, e, f); + let e_not = cols.e_not.populate(blu, shard, e); + let e_not_and_g = cols.e_not_and_g.populate(blu, shard, e_not, g); + let ch = cols.ch.populate(blu, shard, e_and_f, e_not_and_g); - let temp1 = - cols.temp1.populate(blu, shard, channel, h, s1, ch, event.w[j], SHA_COMPRESS_K[j]); + let temp1 = cols.temp1.populate(blu, shard, h, s1, ch, event.w[j], SHA_COMPRESS_K[j]); - let a_rr_2 = cols.a_rr_2.populate(blu, shard, channel, a, 2); - let a_rr_13 = cols.a_rr_13.populate(blu, shard, channel, a, 13); - let a_rr_22 = cols.a_rr_22.populate(blu, shard, channel, a, 22); - let s0_intermediate = - cols.s0_intermediate.populate(blu, shard, channel, a_rr_2, a_rr_13); - let s0 = cols.s0.populate(blu, shard, channel, s0_intermediate, a_rr_22); + let a_rr_2 = cols.a_rr_2.populate(blu, shard, a, 2); + let a_rr_13 = cols.a_rr_13.populate(blu, shard, a, 13); + let a_rr_22 = cols.a_rr_22.populate(blu, shard, a, 22); + let s0_intermediate = cols.s0_intermediate.populate(blu, shard, a_rr_2, a_rr_13); + let s0 = cols.s0.populate(blu, shard, s0_intermediate, a_rr_22); - let a_and_b = cols.a_and_b.populate(blu, shard, channel, a, b); - let a_and_c = cols.a_and_c.populate(blu, shard, channel, a, c); - let b_and_c = cols.b_and_c.populate(blu, shard, channel, b, c); - let maj_intermediate = - cols.maj_intermediate.populate(blu, shard, channel, a_and_b, a_and_c); - let maj = cols.maj.populate(blu, shard, channel, maj_intermediate, b_and_c); + let a_and_b = cols.a_and_b.populate(blu, shard, a, b); + let a_and_c = cols.a_and_c.populate(blu, shard, a, c); + let b_and_c = cols.b_and_c.populate(blu, shard, b, c); + let maj_intermediate = cols.maj_intermediate.populate(blu, shard, a_and_b, a_and_c); + let maj = cols.maj.populate(blu, shard, maj_intermediate, b_and_c); - let temp2 = cols.temp2.populate(blu, shard, channel, s0, maj); + let temp2 = cols.temp2.populate(blu, shard, s0, maj); - let d_add_temp1 = cols.d_add_temp1.populate(blu, shard, channel, d, temp1); - let temp1_add_temp2 = cols.temp1_add_temp2.populate(blu, shard, channel, temp1, temp2); + let d_add_temp1 = cols.d_add_temp1.populate(blu, shard, d, temp1); + let temp1_add_temp2 = cols.temp1_add_temp2.populate(blu, shard, temp1, temp2); h_array[7] = g; h_array[6] = f; @@ -258,7 +261,6 @@ impl ShaCompressChip { let cols: &mut ShaCompressCols = row.as_mut_slice().borrow_mut(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.w_ptr = F::from_canonical_u32(event.w_ptr); cols.h_ptr = F::from_canonical_u32(event.h_ptr); @@ -267,8 +269,8 @@ impl ShaCompressChip { cols.octet_num[octet_num_idx] = F::one(); cols.is_finalize = F::one(); - cols.finalize_add.populate(blu, shard, channel, og_h[j], h_array[j]); - cols.mem.populate_write(channel, event.h_write_records[j], blu); + cols.finalize_add.populate(blu, shard, og_h[j], h_array[j]); + cols.mem.populate_write(event.h_write_records[j], blu); cols.mem_addr = F::from_canonical_u32(event.h_ptr + (j * 4) as u32); v[j] = h_array[j]; diff --git a/crates/core/machine/src/syscall/precompiles/sha256/extend/air.rs b/crates/core/machine/src/syscall/precompiles/sha256/extend/air.rs index 0344bf1b6c..cdfdfebdfd 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/extend/air.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/extend/air.rs @@ -2,7 +2,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::AbstractField; use p3_matrix::Matrix; use sp1_core_executor::syscalls::SyscallCode; -use sp1_stark::air::SP1AirBuilder; +use sp1_stark::air::{InteractionScope, SP1AirBuilder}; use super::{ShaExtendChip, ShaExtendCols, NUM_SHA_EXTEND_COLS}; use crate::{ @@ -52,10 +52,6 @@ where .when_transition() .when_not(local.cycle_16_end.result * local.cycle_48[2]) .assert_eq(local.clk, next.clk); - builder - .when_transition() - .when_not(local.cycle_16_end.result * local.cycle_48[2]) - .assert_eq(local.channel, next.channel); builder .when_transition() .when_not(local.cycle_16_end.result * local.cycle_48[2]) @@ -64,7 +60,6 @@ where // Read w[i-15]. builder.eval_memory_access( local.shard, - local.channel, local.clk + (local.i - i_start), local.w_ptr + (local.i - AB::F::from_canonical_u32(15)) * nb_bytes_in_word, &local.w_i_minus_15, @@ -74,7 +69,6 @@ where // Read w[i-2]. builder.eval_memory_access( local.shard, - local.channel, local.clk + (local.i - i_start), local.w_ptr + (local.i - AB::F::from_canonical_u32(2)) * nb_bytes_in_word, &local.w_i_minus_2, @@ -84,7 +78,6 @@ where // Read w[i-16]. builder.eval_memory_access( local.shard, - local.channel, local.clk + (local.i - i_start), local.w_ptr + (local.i - AB::F::from_canonical_u32(16)) * nb_bytes_in_word, &local.w_i_minus_16, @@ -94,7 +87,6 @@ where // Read w[i-7]. builder.eval_memory_access( local.shard, - local.channel, local.clk + (local.i - i_start), local.w_ptr + (local.i - AB::F::from_canonical_u32(7)) * nb_bytes_in_word, &local.w_i_minus_7, @@ -108,8 +100,6 @@ where *local.w_i_minus_15.value(), 7, local.w_i_minus_15_rr_7, - local.shard, - local.channel, local.is_real, ); // w[i-15] rightrotate 18. @@ -118,8 +108,6 @@ where *local.w_i_minus_15.value(), 18, local.w_i_minus_15_rr_18, - local.shard, - local.channel, local.is_real, ); // w[i-15] rightshift 3. @@ -128,8 +116,6 @@ where *local.w_i_minus_15.value(), 3, local.w_i_minus_15_rs_3, - local.shard, - local.channel, local.is_real, ); // (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) @@ -138,8 +124,6 @@ where local.w_i_minus_15_rr_7.value, local.w_i_minus_15_rr_18.value, local.s0_intermediate, - local.shard, - local.channel, local.is_real, ); // s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3) @@ -148,8 +132,6 @@ where local.s0_intermediate.value, local.w_i_minus_15_rs_3.value, local.s0, - local.shard, - local.channel, local.is_real, ); @@ -160,8 +142,6 @@ where *local.w_i_minus_2.value(), 17, local.w_i_minus_2_rr_17, - local.shard, - local.channel, local.is_real, ); // w[i-2] rightrotate 19. @@ -170,8 +150,6 @@ where *local.w_i_minus_2.value(), 19, local.w_i_minus_2_rr_19, - local.shard, - local.channel, local.is_real, ); // w[i-2] rightshift 10. @@ -180,8 +158,6 @@ where *local.w_i_minus_2.value(), 10, local.w_i_minus_2_rs_10, - local.shard, - local.channel, local.is_real, ); // (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) @@ -190,8 +166,6 @@ where local.w_i_minus_2_rr_17.value, local.w_i_minus_2_rr_19.value, local.s1_intermediate, - local.shard, - local.channel, local.is_real, ); // s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10) @@ -200,8 +174,6 @@ where local.s1_intermediate.value, local.w_i_minus_2_rs_10.value, local.s1, - local.shard, - local.channel, local.is_real, ); @@ -212,8 +184,6 @@ where local.s0.value, *local.w_i_minus_7.value(), local.s1.value, - local.shard, - local.channel, local.is_real, local.s2, ); @@ -221,7 +191,6 @@ where // Write `s2` to `w[i]`. builder.eval_memory_access( local.shard, - local.channel, local.clk + (local.i - i_start), local.w_ptr + local.i * nb_bytes_in_word, &local.w_i, @@ -233,13 +202,13 @@ where // Receive syscall event in first row of 48-cycle. builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, AB::F::from_canonical_u32(SyscallCode::SHA_EXTEND.syscall_id()), local.w_ptr, AB::Expr::zero(), local.cycle_48_start, + InteractionScope::Global, ); // Assert that is_real is a bool. diff --git a/crates/core/machine/src/syscall/precompiles/sha256/extend/columns.rs b/crates/core/machine/src/syscall/precompiles/sha256/extend/columns.rs index 2bb4f11afc..ff7a5f5f7c 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/extend/columns.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/extend/columns.rs @@ -17,7 +17,6 @@ pub const NUM_SHA_EXTEND_COLS: usize = size_of::>(); pub struct ShaExtendCols { /// Inputs. pub shard: T, - pub channel: T, pub nonce: T, pub clk: T, pub w_ptr: T, diff --git a/crates/core/machine/src/syscall/precompiles/sha256/extend/mod.rs b/crates/core/machine/src/syscall/precompiles/sha256/extend/mod.rs index 998ef38663..cb3aea1bbb 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/extend/mod.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/extend/mod.rs @@ -66,7 +66,7 @@ pub mod extend_tests { #[test] fn generate_trace() { let mut shard = ExecutionRecord::default(); - shard.add_events = vec![AluEvent::new(0, 0, 0, Opcode::ADD, 14, 8, 6)]; + shard.add_events = vec![AluEvent::new(0, 0, Opcode::ADD, 14, 8, 6)]; let chip = ShaExtendChip::new(); let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); diff --git a/crates/core/machine/src/syscall/precompiles/sha256/extend/trace.rs b/crates/core/machine/src/syscall/precompiles/sha256/extend/trace.rs index d38b32d85b..7a3ecaac76 100644 --- a/crates/core/machine/src/syscall/precompiles/sha256/extend/trace.rs +++ b/crates/core/machine/src/syscall/precompiles/sha256/extend/trace.rs @@ -4,7 +4,8 @@ use p3_field::PrimeField32; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::{ParallelIterator, ParallelSlice}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, ShaExtendEvent}, + events::{ByteLookupEvent, ByteRecord, PrecompileEvent, ShaExtendEvent}, + syscalls::SyscallCode, ExecutionRecord, Program, }; use sp1_stark::air::MachineAir; @@ -30,12 +31,10 @@ impl MachineAir for ShaExtendChip { let mut new_byte_lookup_events = Vec::new(); let mut wrapped_rows = Some(rows); - for i in 0..input.sha_extend_events.len() { - self.event_to_rows( - &input.sha_extend_events[i], - &mut wrapped_rows, - &mut new_byte_lookup_events, - ); + for event in input.get_precompile_events(SyscallCode::SHA_EXTEND).iter() { + let event = + if let PrecompileEvent::ShaExtend(event) = event { event } else { unreachable!() }; + self.event_to_rows(event, &mut wrapped_rows, &mut new_byte_lookup_events); } let mut rows = wrapped_rows.unwrap(); @@ -68,14 +67,19 @@ impl MachineAir for ShaExtendChip { } fn generate_dependencies(&self, input: &Self::Record, output: &mut Self::Record) { - let chunk_size = std::cmp::max(input.sha_extend_events.len() / num_cpus::get(), 1); + let events = input.get_precompile_events(SyscallCode::SHA_EXTEND); + let chunk_size = std::cmp::max(events.len() / num_cpus::get(), 1); - let blu_batches = input - .sha_extend_events + let blu_batches = events .par_chunks(chunk_size) .map(|events| { let mut blu: HashMap> = HashMap::new(); events.iter().for_each(|event| { + let event = if let PrecompileEvent::ShaExtend(event) = event { + event + } else { + unreachable!() + }; self.event_to_rows::(event, &mut None, &mut blu); }); blu @@ -86,7 +90,7 @@ impl MachineAir for ShaExtendChip { } fn included(&self, shard: &Self::Record) -> bool { - !shard.sha_extend_events.is_empty() + !shard.get_precompile_events(SyscallCode::SHA_EXTEND).is_empty() } } @@ -104,59 +108,40 @@ impl ShaExtendChip { cols.is_real = F::one(); cols.populate_flags(j); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.w_ptr = F::from_canonical_u32(event.w_ptr); - cols.w_i_minus_15.populate(event.channel, event.w_i_minus_15_reads[j], blu); - cols.w_i_minus_2.populate(event.channel, event.w_i_minus_2_reads[j], blu); - cols.w_i_minus_16.populate(event.channel, event.w_i_minus_16_reads[j], blu); - cols.w_i_minus_7.populate(event.channel, event.w_i_minus_7_reads[j], blu); + cols.w_i_minus_15.populate(event.w_i_minus_15_reads[j], blu); + cols.w_i_minus_2.populate(event.w_i_minus_2_reads[j], blu); + cols.w_i_minus_16.populate(event.w_i_minus_16_reads[j], blu); + cols.w_i_minus_7.populate(event.w_i_minus_7_reads[j], blu); // `s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift // 3)`. let w_i_minus_15 = event.w_i_minus_15_reads[j].value; - let w_i_minus_15_rr_7 = - cols.w_i_minus_15_rr_7.populate(blu, shard, event.channel, w_i_minus_15, 7); - let w_i_minus_15_rr_18 = - cols.w_i_minus_15_rr_18.populate(blu, shard, event.channel, w_i_minus_15, 18); - let w_i_minus_15_rs_3 = - cols.w_i_minus_15_rs_3.populate(blu, shard, event.channel, w_i_minus_15, 3); - let s0_intermediate = cols.s0_intermediate.populate( - blu, - shard, - event.channel, - w_i_minus_15_rr_7, - w_i_minus_15_rr_18, - ); - let s0 = - cols.s0.populate(blu, shard, event.channel, s0_intermediate, w_i_minus_15_rs_3); + let w_i_minus_15_rr_7 = cols.w_i_minus_15_rr_7.populate(blu, shard, w_i_minus_15, 7); + let w_i_minus_15_rr_18 = cols.w_i_minus_15_rr_18.populate(blu, shard, w_i_minus_15, 18); + let w_i_minus_15_rs_3 = cols.w_i_minus_15_rs_3.populate(blu, shard, w_i_minus_15, 3); + let s0_intermediate = + cols.s0_intermediate.populate(blu, shard, w_i_minus_15_rr_7, w_i_minus_15_rr_18); + let s0 = cols.s0.populate(blu, shard, s0_intermediate, w_i_minus_15_rs_3); // `s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift // 10)`. let w_i_minus_2 = event.w_i_minus_2_reads[j].value; - let w_i_minus_2_rr_17 = - cols.w_i_minus_2_rr_17.populate(blu, shard, event.channel, w_i_minus_2, 17); - let w_i_minus_2_rr_19 = - cols.w_i_minus_2_rr_19.populate(blu, shard, event.channel, w_i_minus_2, 19); - let w_i_minus_2_rs_10 = - cols.w_i_minus_2_rs_10.populate(blu, shard, event.channel, w_i_minus_2, 10); - let s1_intermediate = cols.s1_intermediate.populate( - blu, - shard, - event.channel, - w_i_minus_2_rr_17, - w_i_minus_2_rr_19, - ); - let s1 = - cols.s1.populate(blu, shard, event.channel, s1_intermediate, w_i_minus_2_rs_10); + let w_i_minus_2_rr_17 = cols.w_i_minus_2_rr_17.populate(blu, shard, w_i_minus_2, 17); + let w_i_minus_2_rr_19 = cols.w_i_minus_2_rr_19.populate(blu, shard, w_i_minus_2, 19); + let w_i_minus_2_rs_10 = cols.w_i_minus_2_rs_10.populate(blu, shard, w_i_minus_2, 10); + let s1_intermediate = + cols.s1_intermediate.populate(blu, shard, w_i_minus_2_rr_17, w_i_minus_2_rr_19); + let s1 = cols.s1.populate(blu, shard, s1_intermediate, w_i_minus_2_rs_10); // Compute `s2`. let w_i_minus_7 = event.w_i_minus_7_reads[j].value; let w_i_minus_16 = event.w_i_minus_16_reads[j].value; - cols.s2.populate(blu, shard, event.channel, w_i_minus_16, s0, w_i_minus_7, s1); + cols.s2.populate(blu, shard, w_i_minus_16, s0, w_i_minus_7, s1); - cols.w_i.populate(event.channel, event.w_i_writes[j], blu); + cols.w_i.populate(event.w_i_writes[j], blu); if rows.as_ref().is_some() { rows.as_mut().unwrap().push(row); diff --git a/crates/core/machine/src/syscall/precompiles/uint256/air.rs b/crates/core/machine/src/syscall/precompiles/uint256/air.rs index 3cc4f803b1..80cd98a52c 100644 --- a/crates/core/machine/src/syscall/precompiles/uint256/air.rs +++ b/crates/core/machine/src/syscall/precompiles/uint256/air.rs @@ -18,7 +18,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{ByteRecord, FieldOperation}, + events::{ByteRecord, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -28,7 +28,7 @@ use sp1_curves::{ }; use sp1_derive::AlignedBorrow; use sp1_stark::{ - air::{BaseAirBuilder, MachineAir, Polynomial, SP1AirBuilder}, + air::{BaseAirBuilder, InteractionScope, MachineAir, Polynomial, SP1AirBuilder}, MachineRecord, }; use std::{ @@ -59,9 +59,6 @@ pub struct Uint256MulCols { /// The shard number of the syscall. pub shard: T, - /// The byte lookup channel. - pub channel: T, - /// The clock cycle of the syscall. pub clk: T, @@ -110,7 +107,7 @@ impl MachineAir for Uint256MulChip { ) -> RowMajorMatrix { // Generate the trace rows & corresponding records for each chunk of events concurrently. let rows_and_records = input - .uint256_mul_events + .get_precompile_events(SyscallCode::UINT256_MUL) .chunks(1) .map(|events| { let mut records = ExecutionRecord::default(); @@ -119,6 +116,11 @@ impl MachineAir for Uint256MulChip { let rows = events .iter() .map(|event| { + let event = if let PrecompileEvent::Uint256Mul(event) = event { + event + } else { + unreachable!() + }; let mut row: [F; NUM_COLS] = [F::zero(); NUM_COLS]; let cols: &mut Uint256MulCols = row.as_mut_slice().borrow_mut(); @@ -131,25 +133,17 @@ impl MachineAir for Uint256MulChip { // Assign basic values to the columns. cols.is_real = F::one(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.x_ptr = F::from_canonical_u32(event.x_ptr); cols.y_ptr = F::from_canonical_u32(event.y_ptr); // Populate memory columns. for i in 0..WORDS_FIELD_ELEMENT { - cols.x_memory[i].populate( - event.channel, - event.x_memory_records[i], - &mut new_byte_lookup_events, - ); - cols.y_memory[i].populate( - event.channel, - event.y_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.x_memory[i] + .populate(event.x_memory_records[i], &mut new_byte_lookup_events); + cols.y_memory[i] + .populate(event.y_memory_records[i], &mut new_byte_lookup_events); cols.modulus_memory[i].populate( - event.channel, event.modulus_memory_records[i], &mut new_byte_lookup_events, ); @@ -165,7 +159,6 @@ impl MachineAir for Uint256MulChip { let result = cols.output.populate_with_modulus( &mut new_byte_lookup_events, event.shard, - event.channel, &x, &y, &effective_modulus, @@ -178,7 +171,6 @@ impl MachineAir for Uint256MulChip { cols.output_range_check.populate( &mut new_byte_lookup_events, event.shard, - event.channel, &result, &effective_modulus, ); @@ -207,7 +199,7 @@ impl MachineAir for Uint256MulChip { let x = BigUint::zero(); let y = BigUint::zero(); - cols.output.populate(&mut vec![], 0, 0, &x, &y, FieldOperation::Mul); + cols.output.populate(&mut vec![], 0, &x, &y, FieldOperation::Mul); row }, @@ -229,7 +221,7 @@ impl MachineAir for Uint256MulChip { } fn included(&self, shard: &Self::Record) -> bool { - !shard.uint256_mul_events.is_empty() + !shard.get_precompile_events(SyscallCode::UINT256_MUL).is_empty() } } @@ -291,8 +283,6 @@ where &y_limbs, &p_modulus, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -302,8 +292,6 @@ where builder, &local.output.result, &modulus_limbs, - local.shard, - local.channel, local.modulus_is_not_zero, ); builder.assert_eq( @@ -319,7 +307,6 @@ where // Read and write x. builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into() + AB::Expr::one(), local.x_ptr, &local.x_memory, @@ -330,7 +317,6 @@ where // we read it contiguously from the y_ptr memory location. builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into(), local.y_ptr, &[local.y_memory, local.modulus_memory].concat(), @@ -340,13 +326,13 @@ where // Receive the arguments. builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, AB::F::from_canonical_u32(SyscallCode::UINT256_MUL.syscall_id()), local.x_ptr, local.y_ptr, local.is_real, + InteractionScope::Global, ); // Assert that is_real is a boolean. diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs index 26a0f87f93..e2d0c5e36f 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_add.rs @@ -11,7 +11,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, FieldOperation}, + events::{ByteLookupEvent, ByteRecord, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -21,7 +21,7 @@ use sp1_curves::{ AffinePoint, CurveType, EllipticCurve, }; use sp1_derive::AlignedBorrow; -use sp1_stark::air::{MachineAir, SP1AirBuilder}; +use sp1_stark::air::{InteractionScope, MachineAir, SP1AirBuilder}; use typenum::Unsigned; use crate::{ @@ -43,7 +43,6 @@ pub const fn num_weierstrass_add_cols() -> usize pub struct WeierstrassAddAssignCols { pub is_real: T, pub shard: T, - pub channel: T, pub nonce: T, pub clk: T, pub p_ptr: T, @@ -75,7 +74,6 @@ impl WeierstrassAddAssignChip { fn populate_field_ops( blu_events: &mut Vec, shard: u32, - channel: u8, cols: &mut WeierstrassAddAssignCols, p_x: BigUint, p_y: BigUint, @@ -87,28 +85,15 @@ impl WeierstrassAddAssignChip { // slope = (q.y - p.y) / (q.x - p.x). let slope = { - let slope_numerator = cols.slope_numerator.populate( - blu_events, - shard, - channel, - &q_y, - &p_y, - FieldOperation::Sub, - ); + let slope_numerator = + cols.slope_numerator.populate(blu_events, shard, &q_y, &p_y, FieldOperation::Sub); - let slope_denominator = cols.slope_denominator.populate( - blu_events, - shard, - channel, - &q_x, - &p_x, - FieldOperation::Sub, - ); + let slope_denominator = + cols.slope_denominator.populate(blu_events, shard, &q_x, &p_x, FieldOperation::Sub); cols.slope.populate( blu_events, shard, - channel, &slope_numerator, &slope_denominator, FieldOperation::Div, @@ -117,26 +102,13 @@ impl WeierstrassAddAssignChip { // x = slope * slope - (p.x + q.x). let x = { - let slope_squared = cols.slope_squared.populate( - blu_events, - shard, - channel, - &slope, - &slope, - FieldOperation::Mul, - ); - let p_x_plus_q_x = cols.p_x_plus_q_x.populate( - blu_events, - shard, - channel, - &p_x, - &q_x, - FieldOperation::Add, - ); + let slope_squared = + cols.slope_squared.populate(blu_events, shard, &slope, &slope, FieldOperation::Mul); + let p_x_plus_q_x = + cols.p_x_plus_q_x.populate(blu_events, shard, &p_x, &q_x, FieldOperation::Add); cols.x3_ins.populate( blu_events, shard, - channel, &slope_squared, &p_x_plus_q_x, FieldOperation::Sub, @@ -145,18 +117,11 @@ impl WeierstrassAddAssignChip { // y = slope * (p.x - x_3n) - p.y. { - let p_x_minus_x = cols.p_x_minus_x.populate( - blu_events, - shard, - channel, - &p_x, - &x, - FieldOperation::Sub, - ); + let p_x_minus_x = + cols.p_x_minus_x.populate(blu_events, shard, &p_x, &x, FieldOperation::Sub); let slope_times_p_x_minus_x = cols.slope_times_p_x_minus_x.populate( blu_events, shard, - channel, &slope, &p_x_minus_x, FieldOperation::Mul, @@ -164,7 +129,6 @@ impl WeierstrassAddAssignChip { cols.y3_ins.populate( blu_events, shard, - channel, &slope_times_p_x_minus_x, &p_y, FieldOperation::Sub, @@ -194,9 +158,9 @@ impl MachineAir output: &mut ExecutionRecord, ) -> RowMajorMatrix { let events = match E::CURVE_TYPE { - CurveType::Secp256k1 => &input.secp256k1_add_events, - CurveType::Bn254 => &input.bn254_add_events, - CurveType::Bls12381 => &input.bls12381_add_events, + CurveType::Secp256k1 => input.get_precompile_events(SyscallCode::SECP256K1_ADD), + CurveType::Bn254 => input.get_precompile_events(SyscallCode::BN254_ADD), + CurveType::Bls12381 => input.get_precompile_events(SyscallCode::BLS12381_ADD), _ => panic!("Unsupported curve"), }; @@ -204,8 +168,13 @@ impl MachineAir let mut new_byte_lookup_events = Vec::new(); - for i in 0..events.len() { - let event = &events[i]; + for event in events.iter() { + let event = match (E::CURVE_TYPE, event) { + (CurveType::Secp256k1, PrecompileEvent::Secp256k1Add(event)) => event, + (CurveType::Bn254, PrecompileEvent::Bn254Add(event)) => event, + (CurveType::Bls12381, PrecompileEvent::Bls12381Add(event)) => event, + _ => panic!("Unsupported curve"), + }; let mut row = vec![F::zero(); num_weierstrass_add_cols::()]; let cols: &mut WeierstrassAddAssignCols = row.as_mut_slice().borrow_mut(); @@ -221,7 +190,6 @@ impl MachineAir // Populate basic columns. cols.is_real = F::one(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.p_ptr = F::from_canonical_u32(event.p_ptr); cols.q_ptr = F::from_canonical_u32(event.q_ptr); @@ -229,7 +197,6 @@ impl MachineAir Self::populate_field_ops( &mut new_byte_lookup_events, event.shard, - event.channel, cols, p_x, p_y, @@ -239,18 +206,10 @@ impl MachineAir // Populate the memory access columns. for i in 0..cols.q_access.len() { - cols.q_access[i].populate( - event.channel, - event.q_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.q_access[i].populate(event.q_memory_records[i], &mut new_byte_lookup_events); } for i in 0..cols.p_access.len() { - cols.p_access[i].populate( - event.channel, - event.p_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.p_access[i].populate(event.p_memory_records[i], &mut new_byte_lookup_events); } rows.push(row); @@ -267,7 +226,6 @@ impl MachineAir Self::populate_field_ops( &mut vec![], 0, - 0, cols, zero.clone(), zero.clone(), @@ -299,9 +257,13 @@ impl MachineAir fn included(&self, shard: &Self::Record) -> bool { match E::CURVE_TYPE { - CurveType::Secp256k1 => !shard.secp256k1_add_events.is_empty(), - CurveType::Bn254 => !shard.bn254_add_events.is_empty(), - CurveType::Bls12381 => !shard.bls12381_add_events.is_empty(), + CurveType::Secp256k1 => { + !shard.get_precompile_events(SyscallCode::SECP256K1_ADD).is_empty() + } + CurveType::Bn254 => !shard.get_precompile_events(SyscallCode::BN254_ADD).is_empty(), + CurveType::Bls12381 => { + !shard.get_precompile_events(SyscallCode::BLS12381_ADD).is_empty() + } _ => panic!("Unsupported curve"), } } @@ -339,33 +301,15 @@ where // slope = (q.y - p.y) / (q.x - p.x). let slope = { - local.slope_numerator.eval( - builder, - &q_y, - &p_y, - FieldOperation::Sub, - local.shard, - local.channel, - local.is_real, - ); + local.slope_numerator.eval(builder, &q_y, &p_y, FieldOperation::Sub, local.is_real); - local.slope_denominator.eval( - builder, - &q_x, - &p_x, - FieldOperation::Sub, - local.shard, - local.channel, - local.is_real, - ); + local.slope_denominator.eval(builder, &q_x, &p_x, FieldOperation::Sub, local.is_real); local.slope.eval( builder, &local.slope_numerator.result, &local.slope_denominator.result, FieldOperation::Div, - local.shard, - local.channel, local.is_real, ); @@ -374,33 +318,15 @@ where // x = slope * slope - self.x - other.x. let x = { - local.slope_squared.eval( - builder, - slope, - slope, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); + local.slope_squared.eval(builder, slope, slope, FieldOperation::Mul, local.is_real); - local.p_x_plus_q_x.eval( - builder, - &p_x, - &q_x, - FieldOperation::Add, - local.shard, - local.channel, - local.is_real, - ); + local.p_x_plus_q_x.eval(builder, &p_x, &q_x, FieldOperation::Add, local.is_real); local.x3_ins.eval( builder, &local.slope_squared.result, &local.p_x_plus_q_x.result, FieldOperation::Sub, - local.shard, - local.channel, local.is_real, ); @@ -409,23 +335,13 @@ where // y = slope * (p.x - x_3n) - q.y. { - local.p_x_minus_x.eval( - builder, - &p_x, - x, - FieldOperation::Sub, - local.shard, - local.channel, - local.is_real, - ); + local.p_x_minus_x.eval(builder, &p_x, x, FieldOperation::Sub, local.is_real); local.slope_times_p_x_minus_x.eval( builder, slope, &local.p_x_minus_x.result, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -434,8 +350,6 @@ where &local.slope_times_p_x_minus_x.result, &p_y, FieldOperation::Sub, - local.shard, - local.channel, local.is_real, ); } @@ -454,7 +368,6 @@ where builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into(), local.q_ptr, &local.q_access, @@ -462,7 +375,6 @@ where ); builder.eval_memory_access_slice( local.shard, - local.channel, local.clk + AB::F::from_canonical_u32(1), /* We read p at +1 since p, q could be the * same. */ local.p_ptr, @@ -484,13 +396,13 @@ where builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, syscall_id_felt, local.p_ptr, local.q_ptr, local.is_real, + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs index 1ab3e1e97f..2ab3c70de4 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_decompress.rs @@ -11,7 +11,7 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_executor::{ - events::{ByteRecord, FieldOperation}, + events::{ByteRecord, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -21,7 +21,7 @@ use sp1_curves::{ CurveType, EllipticCurve, }; use sp1_derive::AlignedBorrow; -use sp1_stark::air::{BaseAirBuilder, MachineAir, SP1AirBuilder}; +use sp1_stark::air::{BaseAirBuilder, InteractionScope, MachineAir, SP1AirBuilder}; use std::marker::PhantomData; use typenum::Unsigned; @@ -42,7 +42,6 @@ pub const fn num_weierstrass_decompress_cols() -> pub struct WeierstrassDecompressCols { pub is_real: T, pub shard: T, - pub channel: T, pub clk: T, pub nonce: T, pub ptr: T, @@ -105,28 +104,25 @@ impl WeierstrassDecompressChip { fn populate_field_ops( record: &mut impl ByteRecord, shard: u32, - channel: u8, cols: &mut WeierstrassDecompressCols, x: BigUint, ) { // Y = sqrt(x^3 + b) - cols.range_x.populate(record, shard, channel, &x, &E::BaseField::modulus()); - let x_2 = - cols.x_2.populate(record, shard, channel, &x.clone(), &x.clone(), FieldOperation::Mul); - let x_3 = cols.x_3.populate(record, shard, channel, &x_2, &x, FieldOperation::Mul); + cols.range_x.populate(record, shard, &x, &E::BaseField::modulus()); + let x_2 = cols.x_2.populate(record, shard, &x.clone(), &x.clone(), FieldOperation::Mul); + let x_3 = cols.x_3.populate(record, shard, &x_2, &x, FieldOperation::Mul); let b = E::b_int(); - let x_3_plus_b = - cols.x_3_plus_b.populate(record, shard, channel, &x_3, &b, FieldOperation::Add); + let x_3_plus_b = cols.x_3_plus_b.populate(record, shard, &x_3, &b, FieldOperation::Add); let sqrt_fn = match E::CURVE_TYPE { CurveType::Secp256k1 => secp256k1_sqrt, CurveType::Bls12381 => bls12381_sqrt, _ => panic!("Unsupported curve"), }; - let y = cols.y.populate(record, shard, channel, &x_3_plus_b, sqrt_fn); + let y = cols.y.populate(record, shard, &x_3_plus_b, sqrt_fn); let zero = BigUint::zero(); - cols.neg_y.populate(record, shard, channel, &zero, &y, FieldOperation::Sub); + cols.neg_y.populate(record, shard, &zero, &y, FieldOperation::Sub); } } @@ -150,8 +146,8 @@ impl MachineAir output: &mut ExecutionRecord, ) -> RowMajorMatrix { let events = match E::CURVE_TYPE { - CurveType::Secp256k1 => &input.k256_decompress_events, - CurveType::Bls12381 => &input.bls12381_decompress_events, + CurveType::Secp256k1 => input.get_precompile_events(SyscallCode::SECP256K1_DECOMPRESS), + CurveType::Bls12381 => input.get_precompile_events(SyscallCode::BLS12381_DECOMPRESS), _ => panic!("Unsupported curve"), }; @@ -163,42 +159,32 @@ impl MachineAir let modulus = E::BaseField::modulus(); - for i in 0..events.len() { - let event = events[i].clone(); + for event in events { + let event = match (E::CURVE_TYPE, event) { + (CurveType::Secp256k1, PrecompileEvent::Secp256k1Decompress(event)) => event, + (CurveType::Bls12381, PrecompileEvent::Bls12381Decompress(event)) => event, + _ => panic!("Unsupported curve"), + }; + let mut row = vec![F::zero(); width]; let cols: &mut WeierstrassDecompressCols = row[0..weierstrass_width].borrow_mut(); cols.is_real = F::from_bool(true); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.ptr = F::from_canonical_u32(event.ptr); cols.sign_bit = F::from_bool(event.sign_bit); let x = BigUint::from_bytes_le(&event.x_bytes); - Self::populate_field_ops( - &mut new_byte_lookup_events, - event.shard, - event.channel, - cols, - x, - ); + Self::populate_field_ops(&mut new_byte_lookup_events, event.shard, cols, x); for i in 0..cols.x_access.len() { - cols.x_access[i].populate( - event.channel, - event.x_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.x_access[i].populate(event.x_memory_records[i], &mut new_byte_lookup_events); } for i in 0..cols.y_access.len() { - cols.y_access[i].populate_write( - event.channel, - event.y_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.y_access[i] + .populate_write(event.y_memory_records[i], &mut new_byte_lookup_events); } if matches!(self.sign_rule, SignChoiceRule::Lexicographic) { @@ -217,7 +203,6 @@ impl MachineAir choice_cols.neg_y_range_check.populate( &mut new_byte_lookup_events, event.shard, - event.channel, &neg_y, &modulus, ); @@ -225,7 +210,6 @@ impl MachineAir choice_cols.neg_y_range_check.populate( &mut new_byte_lookup_events, event.shard, - event.channel, &decompressed_y, &modulus, ); @@ -237,7 +221,6 @@ impl MachineAir choice_cols.comparison_lt_cols.populate( &mut new_byte_lookup_events, event.shard, - event.channel, &neg_y, &decompressed_y, ); @@ -248,7 +231,6 @@ impl MachineAir choice_cols.comparison_lt_cols.populate( &mut new_byte_lookup_events, event.shard, - event.channel, &decompressed_y, &neg_y, ); @@ -274,7 +256,7 @@ impl MachineAir cols.x_access[i].access.value = words[i].into(); } - Self::populate_field_ops(&mut vec![], 0, 0, cols, dummy_value); + Self::populate_field_ops(&mut vec![], 0, cols, dummy_value); row }, input.fixed_log2_rows::(self), @@ -294,8 +276,12 @@ impl MachineAir fn included(&self, shard: &Self::Record) -> bool { match E::CURVE_TYPE { - CurveType::Secp256k1 => !shard.k256_decompress_events.is_empty(), - CurveType::Bls12381 => !shard.bls12381_decompress_events.is_empty(), + CurveType::Secp256k1 => { + !shard.get_precompile_events(SyscallCode::SECP256K1_DECOMPRESS).is_empty() + } + CurveType::Bls12381 => { + !shard.get_precompile_events(SyscallCode::BLS12381_DECOMPRESS).is_empty() + } _ => panic!("Unsupported curve"), } } @@ -345,28 +331,10 @@ where builder, &x, &limbs_from_vec::::Limbs, AB::F>(max_num_limbs), - local.shard, - local.channel, - local.is_real, - ); - local.x_2.eval( - builder, - &x, - &x, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); - local.x_3.eval( - builder, - &local.x_2.result, - &x, - FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); + local.x_2.eval(builder, &x, &x, FieldOperation::Mul, local.is_real); + local.x_3.eval(builder, &local.x_2.result, &x, FieldOperation::Mul, local.is_real); let b = E::b_int(); let b_const = E::BaseField::to_limbs_field::(&b); local.x_3_plus_b.eval( @@ -374,8 +342,6 @@ where &local.x_3.result, &b_const, FieldOperation::Add, - local.shard, - local.channel, local.is_real, ); @@ -384,19 +350,10 @@ where &[AB::Expr::zero()].iter(), &local.y.multiplication.result, FieldOperation::Sub, - local.shard, - local.channel, local.is_real, ); - local.y.eval( - builder, - &local.x_3_plus_b.result, - local.y.lsb, - local.shard, - local.channel, - local.is_real, - ); + local.y.eval(builder, &local.x_3_plus_b.result, local.y.lsb, local.is_real); let y_limbs: Limbs::Limbs> = limbs_from_access(&local.y_access); @@ -442,8 +399,6 @@ where builder, &local.neg_y.result, &modulus_limbs, - local.shard, - local.channel, local.is_real, ); @@ -498,8 +453,6 @@ where builder, &local.y.multiplication.result, &local.neg_y.result, - local.shard, - local.channel, choice_cols.when_sqrt_y_res_is_lt, ); @@ -507,8 +460,6 @@ where builder, &local.neg_y.result, &local.y.multiplication.result, - local.shard, - local.channel, choice_cols.when_neg_y_res_is_lt, ); } @@ -517,7 +468,6 @@ where for i in 0..num_words_field_element { builder.eval_memory_access( local.shard, - local.channel, local.clk, local.ptr.into() + AB::F::from_canonical_u32((i as u32) * 4 + num_limbs as u32), &local.x_access[i], @@ -527,7 +477,6 @@ where for i in 0..num_words_field_element { builder.eval_memory_access( local.shard, - local.channel, local.clk, local.ptr.into() + AB::F::from_canonical_u32((i as u32) * 4), &local.y_access[i], @@ -547,13 +496,13 @@ where builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, syscall_id, local.ptr, local.sign_bit, local.is_real, + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs index 616adfe326..0914962860 100644 --- a/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/crates/core/machine/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -12,7 +12,7 @@ use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::{ParallelIterator, ParallelSlice}; use sp1_core_executor::{ - events::{ByteLookupEvent, ByteRecord, FieldOperation}, + events::{ByteLookupEvent, ByteRecord, FieldOperation, PrecompileEvent}, syscalls::SyscallCode, ExecutionRecord, Program, }; @@ -22,10 +22,7 @@ use sp1_curves::{ AffinePoint, CurveType, EllipticCurve, }; use sp1_derive::AlignedBorrow; -use sp1_stark::{ - air::{MachineAir, SP1AirBuilder}, - MachineRecord, -}; +use sp1_stark::air::{InteractionScope, MachineAir, SP1AirBuilder}; use crate::{ memory::{MemoryCols, MemoryWriteCols}, @@ -46,7 +43,6 @@ pub const fn num_weierstrass_double_cols() -> usi pub struct WeierstrassDoubleAssignCols { pub is_real: T, pub shard: T, - pub channel: T, pub nonce: T, pub clk: T, pub p_ptr: T, @@ -77,7 +73,6 @@ impl WeierstrassDoubleAssignChip { fn populate_field_ops( blu_events: &mut Vec, shard: u32, - channel: u8, cols: &mut WeierstrassDoubleAssignCols, p_x: BigUint, p_y: BigUint, @@ -90,18 +85,11 @@ impl WeierstrassDoubleAssignChip { let slope = { // slope_numerator = a + (p.x * p.x) * 3. let slope_numerator = { - let p_x_squared = cols.p_x_squared.populate( - blu_events, - shard, - channel, - &p_x, - &p_x, - FieldOperation::Mul, - ); + let p_x_squared = + cols.p_x_squared.populate(blu_events, shard, &p_x, &p_x, FieldOperation::Mul); let p_x_squared_times_3 = cols.p_x_squared_times_3.populate( blu_events, shard, - channel, &p_x_squared, &BigUint::from(3u32), FieldOperation::Mul, @@ -109,7 +97,6 @@ impl WeierstrassDoubleAssignChip { cols.slope_numerator.populate( blu_events, shard, - channel, &a, &p_x_squared_times_3, FieldOperation::Add, @@ -120,7 +107,6 @@ impl WeierstrassDoubleAssignChip { let slope_denominator = cols.slope_denominator.populate( blu_events, shard, - channel, &BigUint::from(2u32), &p_y, FieldOperation::Mul, @@ -129,7 +115,6 @@ impl WeierstrassDoubleAssignChip { cols.slope.populate( blu_events, shard, - channel, &slope_numerator, &slope_denominator, FieldOperation::Div, @@ -138,26 +123,13 @@ impl WeierstrassDoubleAssignChip { // x = slope * slope - (p.x + p.x). let x = { - let slope_squared = cols.slope_squared.populate( - blu_events, - shard, - channel, - &slope, - &slope, - FieldOperation::Mul, - ); - let p_x_plus_p_x = cols.p_x_plus_p_x.populate( - blu_events, - shard, - channel, - &p_x, - &p_x, - FieldOperation::Add, - ); + let slope_squared = + cols.slope_squared.populate(blu_events, shard, &slope, &slope, FieldOperation::Mul); + let p_x_plus_p_x = + cols.p_x_plus_p_x.populate(blu_events, shard, &p_x, &p_x, FieldOperation::Add); cols.x3_ins.populate( blu_events, shard, - channel, &slope_squared, &p_x_plus_p_x, FieldOperation::Sub, @@ -166,18 +138,11 @@ impl WeierstrassDoubleAssignChip { // y = slope * (p.x - x) - p.y. { - let p_x_minus_x = cols.p_x_minus_x.populate( - blu_events, - shard, - channel, - &p_x, - &x, - FieldOperation::Sub, - ); + let p_x_minus_x = + cols.p_x_minus_x.populate(blu_events, shard, &p_x, &x, FieldOperation::Sub); let slope_times_p_x_minus_x = cols.slope_times_p_x_minus_x.populate( blu_events, shard, - channel, &slope, &p_x_minus_x, FieldOperation::Mul, @@ -185,7 +150,6 @@ impl WeierstrassDoubleAssignChip { cols.y3_ins.populate( blu_events, shard, - channel, &slope_times_p_x_minus_x, &p_y, FieldOperation::Sub, @@ -216,24 +180,32 @@ impl MachineAir ) -> RowMajorMatrix { // collects the events based on the curve type. let events = match E::CURVE_TYPE { - CurveType::Secp256k1 => &input.secp256k1_double_events, - CurveType::Bn254 => &input.bn254_double_events, - CurveType::Bls12381 => &input.bls12381_double_events, + CurveType::Secp256k1 => input.get_precompile_events(SyscallCode::SECP256K1_DOUBLE), + CurveType::Bn254 => input.get_precompile_events(SyscallCode::BN254_DOUBLE), + CurveType::Bls12381 => input.get_precompile_events(SyscallCode::BLS12381_DOUBLE), _ => panic!("Unsupported curve"), }; let chunk_size = std::cmp::max(events.len() / num_cpus::get(), 1); // Generate the trace rows & corresponding records for each chunk of events in parallel. - let rows_and_records = events + let rows_and_blus = events .par_chunks(chunk_size) .map(|events| { - let mut record = ExecutionRecord::default(); let mut new_byte_lookup_events = Vec::new(); let rows = events .iter() .map(|event| { + let event = match (E::CURVE_TYPE, event) { + (CurveType::Secp256k1, PrecompileEvent::Secp256k1Double(event)) => { + event + } + (CurveType::Bn254, PrecompileEvent::Bn254Double(event)) => event, + (CurveType::Bls12381, PrecompileEvent::Bls12381Double(event)) => event, + _ => panic!("Unsupported curve"), + }; + let mut row = vec![F::zero(); num_weierstrass_double_cols::()]; let cols: &mut WeierstrassDoubleAssignCols = @@ -247,14 +219,12 @@ impl MachineAir // Populate basic columns. cols.is_real = F::one(); cols.shard = F::from_canonical_u32(event.shard); - cols.channel = F::from_canonical_u8(event.channel); cols.clk = F::from_canonical_u32(event.clk); cols.p_ptr = F::from_canonical_u32(event.p_ptr); Self::populate_field_ops( &mut new_byte_lookup_events, event.shard, - event.channel, cols, p_x, p_y, @@ -262,25 +232,22 @@ impl MachineAir // Populate the memory access columns. for i in 0..cols.p_access.len() { - cols.p_access[i].populate( - event.channel, - event.p_memory_records[i], - &mut new_byte_lookup_events, - ); + cols.p_access[i] + .populate(event.p_memory_records[i], &mut new_byte_lookup_events); } row }) .collect::>(); - record.add_byte_lookup_events(new_byte_lookup_events); - (rows, record) + (rows, new_byte_lookup_events) }) .collect::>(); // Generate the trace rows for each event. let mut rows = Vec::new(); - for mut row_and_record in rows_and_records { - rows.extend(row_and_record.0); - output.append(&mut row_and_record.1); + for (chunk_rows, chunk_blus) in rows_and_blus { + rows.extend(chunk_rows); + + output.add_byte_lookup_events(chunk_blus); } pad_rows_fixed( @@ -290,7 +257,7 @@ impl MachineAir let cols: &mut WeierstrassDoubleAssignCols = row.as_mut_slice().borrow_mut(); let zero = BigUint::zero(); - Self::populate_field_ops(&mut vec![], 0, 0, cols, zero.clone(), zero.clone()); + Self::populate_field_ops(&mut vec![], 0, cols, zero.clone(), zero.clone()); row }, input.fixed_log2_rows::(self), @@ -316,9 +283,13 @@ impl MachineAir fn included(&self, shard: &Self::Record) -> bool { match E::CURVE_TYPE { - CurveType::Secp256k1 => !shard.secp256k1_double_events.is_empty(), - CurveType::Bn254 => !shard.bn254_double_events.is_empty(), - CurveType::Bls12381 => !shard.bls12381_double_events.is_empty(), + CurveType::Secp256k1 => { + !shard.get_precompile_events(SyscallCode::SECP256K1_DOUBLE).is_empty() + } + CurveType::Bn254 => !shard.get_precompile_events(SyscallCode::BN254_DOUBLE).is_empty(), + CurveType::Bls12381 => { + !shard.get_precompile_events(SyscallCode::BLS12381_DOUBLE).is_empty() + } _ => panic!("Unsupported curve"), } } @@ -357,23 +328,13 @@ where let slope = { // slope_numerator = a + (p.x * p.x) * 3. { - local.p_x_squared.eval( - builder, - &p_x, - &p_x, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); + local.p_x_squared.eval(builder, &p_x, &p_x, FieldOperation::Mul, local.is_real); local.p_x_squared_times_3.eval( builder, &local.p_x_squared.result, &E::BaseField::to_limbs_field::(&BigUint::from(3u32)), FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -382,8 +343,6 @@ where &a, &local.p_x_squared_times_3.result, FieldOperation::Add, - local.shard, - local.channel, local.is_real, ); }; @@ -394,8 +353,6 @@ where &E::BaseField::to_limbs_field::(&BigUint::from(2u32)), &p_y, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); @@ -404,8 +361,6 @@ where &local.slope_numerator.result, &local.slope_denominator.result, FieldOperation::Div, - local.shard, - local.channel, local.is_real, ); @@ -414,31 +369,13 @@ where // x = slope * slope - (p.x + p.x). let x = { - local.slope_squared.eval( - builder, - slope, - slope, - FieldOperation::Mul, - local.shard, - local.channel, - local.is_real, - ); - local.p_x_plus_p_x.eval( - builder, - &p_x, - &p_x, - FieldOperation::Add, - local.shard, - local.channel, - local.is_real, - ); + local.slope_squared.eval(builder, slope, slope, FieldOperation::Mul, local.is_real); + local.p_x_plus_p_x.eval(builder, &p_x, &p_x, FieldOperation::Add, local.is_real); local.x3_ins.eval( builder, &local.slope_squared.result, &local.p_x_plus_p_x.result, FieldOperation::Sub, - local.shard, - local.channel, local.is_real, ); &local.x3_ins.result @@ -446,22 +383,12 @@ where // y = slope * (p.x - x) - p.y. { - local.p_x_minus_x.eval( - builder, - &p_x, - x, - FieldOperation::Sub, - local.shard, - local.channel, - local.is_real, - ); + local.p_x_minus_x.eval(builder, &p_x, x, FieldOperation::Sub, local.is_real); local.slope_times_p_x_minus_x.eval( builder, slope, &local.p_x_minus_x.result, FieldOperation::Mul, - local.shard, - local.channel, local.is_real, ); local.y3_ins.eval( @@ -469,8 +396,6 @@ where &local.slope_times_p_x_minus_x.result, &p_y, FieldOperation::Sub, - local.shard, - local.channel, local.is_real, ); } @@ -489,7 +414,6 @@ where builder.eval_memory_access_slice( local.shard, - local.channel, local.clk.into(), local.p_ptr, &local.p_access, @@ -510,13 +434,13 @@ where builder.receive_syscall( local.shard, - local.channel, local.clk, local.nonce, syscall_id_felt, local.p_ptr, AB::Expr::zero(), local.is_real, + InteractionScope::Global, ); } } diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 55452e5675..3a81bd946d 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -9,19 +9,21 @@ use std::{ use web_time::Instant; use crate::riscv::{CoreShapeConfig, RiscvAir}; -use p3_challenger::CanObserve; +use p3_challenger::{CanObserve, FieldChallenger}; use p3_field::AbstractField; use p3_maybe_rayon::prelude::*; use serde::{de::DeserializeOwned, Serialize}; use size::Size; use sp1_stark::{ - baby_bear_poseidon2::BabyBearPoseidon2, MachineProvingKey, MachineVerificationError, + air::InteractionScope, baby_bear_poseidon2::BabyBearPoseidon2, MachineProvingKey, + MachineVerificationError, }; use std::thread::ScopedJoinHandle; use thiserror::Error; use p3_baby_bear::BabyBear; use p3_field::PrimeField32; +use p3_matrix::Matrix; use crate::{ io::{SP1PublicValues, SP1Stdin}, @@ -212,9 +214,6 @@ where let span = tracing::Span::current().clone(); - #[cfg(feature = "debug")] - let all_records_tx = all_records_tx.clone(); - let handle = s.spawn(move || { let _span = span.enter(); tracing::debug_span!("phase 1 trace generation").in_scope(|| { @@ -228,11 +227,6 @@ where .in_scope(|| trace_checkpoint(program.clone(), &checkpoint, opts)); reset_seek(&mut checkpoint); - // Generate the dependencies. - tracing::debug_span!("generate dependencies").in_scope(|| { - prover.machine().generate_dependencies(&mut records, &opts) - }); - // Wait for our turn to update the state. record_gen_sync.wait_for_turn(index); @@ -287,9 +281,6 @@ where // Let another worker update the state. record_gen_sync.advance_turn(); - #[cfg(feature = "debug")] - all_records_tx.send(records.clone()).unwrap(); - // Fix the shape of the records. if let Some(shape_config) = shape_config { for record in records.iter_mut() { @@ -298,10 +289,15 @@ where } // Generate the traces. - let traces = records - .par_iter() - .map(|record| prover.generate_traces(record)) - .collect::>(); + let mut traces = vec![]; + tracing::debug_span!("generate traces", index).in_scope(|| { + traces = records + .par_iter() + .map(|record| { + prover.generate_traces(record, InteractionScope::Global) + }) + .collect::>(); + }); // Wait for our turn. trace_gen_sync.wait_for_turn(index); @@ -329,8 +325,6 @@ where p1_record_and_trace_gen_handles.push(handle); } drop(p1_records_and_traces_tx); - #[cfg(feature = "debug")] - drop(all_records_tx); // Create the challenger and observe the verifying key. let mut challenger = prover.config().challenger(); @@ -364,10 +358,24 @@ where .zip(traces.into_par_iter()) .map(|(record, traces)| { let _span = span.enter(); - let data = prover.commit(record, traces); - let main_commit = data.main_commit.clone(); + + for (name, trace) in traces.clone() { + let trace_width = trace.width(); + let trace_height = trace.height(); + tracing::debug!( + "Phase 1 area: {:<15} | Main Cols = {:<5} | Rows = {:<5} | Cells = {:<10}", + name, + trace_width, + trace_height, + trace_width * trace_height, + ); + + } + + let data = prover.commit(&record, traces); + let phase1_main_commit = data.main_commit.clone(); drop(data); - main_commit + phase1_main_commit }) .collect::>(); @@ -375,7 +383,7 @@ where for (commit, public_values) in commitments.into_iter().zip(public_values.into_iter()) { - prover.observe(&mut challenger, commit, &public_values); + prover.observe(&mut challenger, commit.clone(), &public_values); } }); } @@ -391,15 +399,26 @@ where p1_record_and_trace_gen_handles.into_iter().for_each(|handle| handle.join().unwrap()); // Wait until the phase 1 prover has completely finished. - let challenger = phase_1_prover_handle.join().unwrap(); + let mut challenger = phase_1_prover_handle.join().unwrap(); + + // Sample for the global permutation challenges. + // Obtain the challenges used for the global permutation argument. + let mut global_permutation_challenges: Vec = Vec::new(); + for _ in 0..2 { + global_permutation_challenges.push(challenger.sample_ext_element()); + } // Spawn the phase 2 record generator thread. let p2_record_gen_sync = Arc::new(TurnBasedSync::new()); let p2_trace_gen_sync = Arc::new(TurnBasedSync::new()); let (p2_records_and_traces_tx, p2_records_and_traces_rx) = - sync_channel::<(Vec, Vec>)>>)>( - opts.records_and_traces_channel_capacity, - ); + sync_channel::<( + Vec, + ( + Vec>)>>, + Vec>)>>, + ), + )>(opts.records_and_traces_channel_capacity); let p2_records_and_traces_tx = Arc::new(Mutex::new(p2_records_and_traces_tx)); let report_aggregate = Arc::new(Mutex::new(ExecutionReport::default())); @@ -418,6 +437,10 @@ where let program = program.clone(); let span = tracing::Span::current().clone(); + + #[cfg(feature = "debug")] + let all_records_tx = all_records_tx.clone(); + let handle = s.spawn(move || { let _span = span.enter(); tracing::debug_span!("phase 2 trace generation").in_scope(|| { @@ -431,11 +454,6 @@ where *report_aggregate.lock().unwrap() += report; reset_seek(&mut checkpoint); - // Generate the dependencies. - tracing::debug_span!("generate dependencies").in_scope(|| { - prover.machine().generate_dependencies(&mut records, &opts) - }); - // Wait for our turn to update the state. record_gen_sync.wait_for_turn(index); @@ -483,9 +501,17 @@ where } records.append(&mut deferred); + // Generate the dependencies. + tracing::debug_span!("generate dependencies", index).in_scope(|| { + prover.machine().generate_dependencies(&mut records, &opts, None); + }); + // Let another worker update the state. record_gen_sync.advance_turn(); + #[cfg(feature = "debug")] + all_records_tx.send(records.clone()).unwrap(); + // Fix the shape of the records. if let Some(shape_config) = shape_config { for record in records.iter_mut() { @@ -494,25 +520,45 @@ where } // Generate the traces. - let traces = records - .par_iter() - .map(|record| prover.generate_traces(record)) - .collect::>(); + let mut local_traces = Vec::new(); + tracing::debug_span!("generate local traces", index).in_scope(|| { + local_traces = records + .par_iter() + .map(|record| { + prover.generate_traces(record, InteractionScope::Local) + }) + .collect::>(); + }); + + let mut global_traces = Vec::new(); + tracing::debug_span!("generate global traces", index).in_scope(|| { + global_traces = records + .par_iter() + .map(|record| { + prover.generate_traces(record, InteractionScope::Global) + }) + .collect::>(); + }); trace_gen_sync.wait_for_turn(index); - // Send the records to the phase 1 prover. + // Send the records to the phase 2 prover. let chunked_records = chunk_vec(records, opts.shard_batch_size); - let chunked_traces = chunk_vec(traces, opts.shard_batch_size); - chunked_records.into_iter().zip(chunked_traces).for_each( - |(records, traces)| { + let chunked_global_traces = + chunk_vec(global_traces, opts.shard_batch_size); + let chunked_local_traces = + chunk_vec(local_traces, opts.shard_batch_size); + chunked_records + .into_iter() + .zip(chunked_global_traces.into_iter()) + .zip(chunked_local_traces.into_iter()) + .for_each(|((records, global_traces), local_traces)| { records_and_traces_tx .lock() .unwrap() - .send((records, traces)) + .send((records, (global_traces, local_traces))) .unwrap(); - }, - ); + }); trace_gen_sync.advance_turn(); } else { @@ -524,6 +570,8 @@ where p2_record_and_trace_gen_handles.push(handle); } drop(p2_records_and_traces_tx); + #[cfg(feature = "debug")] + drop(all_records_tx); // Spawn the phase 2 prover thread. let p2_prover_span = tracing::Span::current().clone(); @@ -536,10 +584,21 @@ where let span = tracing::Span::current().clone(); shard_proofs.par_extend( records.into_par_iter().zip(traces.into_par_iter()).map( - |(record, traces)| { + |(record, (global_traces, local_traces))| { let _span = span.enter(); - let data = prover.commit(record, traces); - prover.open(pk, data, &mut challenger.clone()).unwrap() + + let global_data = prover.commit(&record, global_traces); + let local_data = prover.commit(&record, local_traces); + + prover + .open( + pk, + Some(global_data), + local_data, + &mut challenger.clone(), + &global_permutation_challenges, + ) + .unwrap() }, ), ); diff --git a/crates/derive/src/lib.rs b/crates/derive/src/lib.rs index 1896c312ef..924be7d913 100644 --- a/crates/derive/src/lib.rs +++ b/crates/derive/src/lib.rs @@ -184,6 +184,13 @@ pub fn machine_air_derive(input: TokenStream) -> TokenStream { } }); + let commit_scope_arms = variants.iter().map(|(variant_name, field)| { + let field_ty = &field.ty; + quote! { + #name::#variant_name(x) => <#field_ty as sp1_stark::air::MachineAir>::commit_scope(x) + } + }); + let machine_air = quote! { impl #impl_generics sp1_stark::air::MachineAir for #name #ty_generics #where_clause { type Record = #execution_record_path; @@ -236,6 +243,12 @@ pub fn machine_air_derive(input: TokenStream) -> TokenStream { #(#included_arms,)* } } + + fn commit_scope(&self) -> InteractionScope { + match self { + #(#commit_scope_arms,)* + } + } } }; diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 21b06428a6..02e3dc812c 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -46,7 +46,7 @@ use sp1_core_machine::{ riscv::{CoreShapeConfig, RiscvAir}, utils::{concurrency::TurnBasedSync, SP1CoreProverError}, }; -use sp1_stark::MachineProvingKey; +use sp1_stark::{air::InteractionScope, MachineProvingKey}; use sp1_primitives::hash_deferred_proof; @@ -471,7 +471,7 @@ impl SP1Prover { assert_eq!(reconstruct_challenger.output_buffer.len(), 16); for proof in batch.iter() { - reconstruct_challenger.observe(proof.commitment.main_commit); + reconstruct_challenger.observe(proof.commitment.global_main_commit); reconstruct_challenger .observe_slice(&proof.public_values[0..self.core_prover.num_pv_elts()]); } @@ -574,7 +574,7 @@ impl SP1Prover { let mut leaf_challenger = self.core_prover.config().challenger(); vk.vk.observe_into(&mut leaf_challenger); shard_proofs.iter().for_each(|proof| { - leaf_challenger.observe(proof.commitment.main_commit); + leaf_challenger.observe(proof.commitment.global_main_commit); leaf_challenger.observe_slice(&proof.public_values[0..self.core_prover.num_pv_elts()]); }); @@ -691,15 +691,19 @@ impl SP1Prover { // Generate the dependencies. let mut records = vec![record]; tracing::debug_span!("generate dependencies").in_scope(|| { - self.compress_prover - .machine() - .generate_dependencies(&mut records, &opts.recursion_opts) + self.compress_prover.machine().generate_dependencies( + &mut records, + &opts.recursion_opts, + None, + ) }); // Generate the traces. let record = records.into_iter().next().unwrap(); - let traces = tracing::debug_span!("generate traces") - .in_scope(|| self.compress_prover.generate_traces(&record)); + let traces = tracing::debug_span!("generate traces").in_scope(|| { + self.compress_prover + .generate_traces(&record, InteractionScope::Local) + }); // Wait for our turn to update the state. record_and_trace_sync.wait_for_turn(index); @@ -758,20 +762,30 @@ impl SP1Prover { ); // Commit to the record and traces. - let data = tracing::debug_span!("commit") - .in_scope(|| self.compress_prover.commit(record, traces)); + let local_data = tracing::debug_span!("commit") + .in_scope(|| self.compress_prover.commit(&record, traces)); // Observe the commitment. - tracing::debug_span!("observe commitment").in_scope(|| { - challenger.observe(data.main_commit); + tracing::debug_span!("observe public values").in_scope(|| { challenger.observe_slice( - &data.public_values[0..self.compress_prover.num_pv_elts()], + &local_data.public_values[0..self.compress_prover.num_pv_elts()], ); }); // Generate the proof. let proof = tracing::debug_span!("open").in_scope(|| { - self.compress_prover.open(&pk, data, &mut challenger).unwrap() + self.compress_prover + .open( + &pk, + None, + local_data, + &mut challenger, + &[ + ::Challenge::zero(), + ::Challenge::zero(), + ], + ) + .unwrap() }); // Verify the proof. diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index d940977027..839d12cff1 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -201,13 +201,13 @@ impl SP1Prover { return Err(MachineVerificationError::InvalidPublicValues( "last_init_addr_bits != last_finalize_addr_bits_prev", )); - } else if !shard_proof.contains_memory_init() + } else if !shard_proof.contains_global_memory_init() && public_values.previous_init_addr_bits != public_values.last_init_addr_bits { return Err(MachineVerificationError::InvalidPublicValues( "previous_init_addr_bits != last_init_addr_bits", )); - } else if !shard_proof.contains_memory_finalize() + } else if !shard_proof.contains_global_memory_finalize() && public_values.previous_finalize_addr_bits != public_values.last_finalize_addr_bits { diff --git a/crates/recursion/circuit-v2/Cargo.toml b/crates/recursion/circuit-v2/Cargo.toml index bfe7afe9ac..4fb2e2dcf8 100644 --- a/crates/recursion/circuit-v2/Cargo.toml +++ b/crates/recursion/circuit-v2/Cargo.toml @@ -28,16 +28,11 @@ p3-baby-bear = { workspace = true } sp1-core-machine = { workspace = true } sp1-core-executor = { workspace = true } sp1-stark = { workspace = true } - -# todo: remove this dependency once everything is migrated. -sp1-recursion-program = { workspace = true } - sp1-recursion-core-v2 = { workspace = true } sp1-recursion-derive = { workspace = true } sp1-recursion-compiler = { workspace = true } sp1-primitives = { workspace = true } sp1-recursion-gnark-ffi = { workspace = true } -sp1-recursion-circuit = { workspace = true } itertools = "0.13.0" serde = { version = "1.0.204", features = ["derive"] } @@ -46,6 +41,7 @@ rand = "0.8.5" tracing = "0.1.40" hashbrown = { version = "0.14.5", features = ["serde", "inline-more"] } stacker = "0.1" +num-traits = "0.2.19" [dev-dependencies] sp1-core-executor = { workspace = true, features = ["programs"] } diff --git a/crates/recursion/circuit-v2/src/constraints.rs b/crates/recursion/circuit-v2/src/constraints.rs index 5f1b4aebbe..fa3c506764 100644 --- a/crates/recursion/circuit-v2/src/constraints.rs +++ b/crates/recursion/circuit-v2/src/constraints.rs @@ -101,7 +101,7 @@ where main: opening.main.view(), perm: perm_opening.view(), perm_challenges: permutation_challenges, - cumulative_sum: opening.cumulative_sum, + cumulative_sums: &[opening.global_cumulative_sum, opening.local_cumulative_sum], public_values, is_first_row: selectors.is_first_row, is_last_row: selectors.is_last_row, diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 1f9079e040..e6bc7e0e14 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -14,7 +14,7 @@ use p3_commit::Mmcs; use p3_field::AbstractField; use p3_matrix::dense::RowMajorMatrix; -use sp1_recursion_compiler::ir::{Builder, Felt}; +use sp1_recursion_compiler::ir::{Builder, Ext, Felt}; use sp1_recursion_core_v2::{ air::{ChallengerPublicValues, RecursionPublicValues, RECURSIVE_PROOF_NUM_PV_ELTS}, @@ -128,7 +128,8 @@ where array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); let mut reconstruct_deferred_digest: [Felt<_>; POSEIDON_NUM_WORDS] = core::array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); - let mut cumulative_sum: [Felt<_>; D] = core::array::from_fn(|_| builder.eval(C::F::zero())); + let mut global_cumulative_sum: [Felt<_>; D] = + core::array::from_fn(|_| builder.eval(C::F::zero())); let mut init_addr_bits: [Felt<_>; 32] = core::array::from_fn(|_| unsafe { MaybeUninit::zeroed().assume_init() }); let mut finalize_addr_bits: [Felt<_>; 32] = @@ -150,12 +151,22 @@ where } // Observe the main commitment and public values. - challenger.observe(builder, shard_proof.commitment.main_commit); challenger.observe_slice( builder, shard_proof.public_values[0..machine.num_pv_elts()].iter().copied(), ); - StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); + + assert!(!shard_proof.contains_global_main_commitment()); + + let zero_ext: Ext = builder.eval(C::F::zero()); + StarkVerifier::verify_shard( + builder, + &vk, + machine, + &mut challenger, + &shard_proof, + &[zero_ext, zero_ext], + ); // Get the current public values. let current_public_values: &RecursionPublicValues> = @@ -411,7 +422,7 @@ where // Update the cumulative sum. for (sum_element, current_sum_element) in - cumulative_sum.iter_mut().zip_eq(current_public_values.cumulative_sum.iter()) + global_cumulative_sum.iter_mut().zip_eq(current_public_values.cumulative_sum.iter()) { *sum_element = builder.eval(*sum_element + *current_sum_element); } @@ -443,7 +454,7 @@ where // Assign the committed value digests. compress_public_values.committed_value_digest = committed_value_digest; // Assign the cumulative sum. - compress_public_values.cumulative_sum = cumulative_sum; + compress_public_values.cumulative_sum = global_cumulative_sum; // Assign the `is_complete` flag. compress_public_values.is_complete = is_complete; // Set the compress vk digest. diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 7cab9b4883..8bc1f72675 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -35,7 +35,7 @@ use sp1_recursion_core_v2::{ }; use crate::{ - challenger::{CanObserveVariable, DuplexChallengerVariable}, + challenger::{CanObserveVariable, DuplexChallengerVariable, FieldChallengerVariable}, stark::{ShardProofVariable, StarkVerifier}, BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, }; @@ -167,7 +167,7 @@ where initial_reconstruct_challenger.copy(builder); // Initialize the cumulative sum. - let mut cumulative_sum: Ext<_, _> = builder.eval(C::EF::zero().cons()); + let mut global_cumulative_sum: Ext<_, _> = builder.eval(C::EF::zero().cons()); // Assert that the number of proofs is not zero. assert!(!shard_proofs.is_empty()); @@ -284,7 +284,18 @@ where // Do not verify the cumulative sum here, since the permutation challenge is shared // between all shards. let mut challenger = leaf_challenger.copy(builder); - StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); + + let global_permutation_challenges = + (0..2).map(|_| challenger.sample_ext(builder)).collect::>(); + + StarkVerifier::verify_shard( + builder, + &vk, + machine, + &mut challenger, + &shard_proof, + &global_permutation_challenges, + ); // Assert that first shard has a "CPU". Equivalently, assert that if the shard does // not have a "CPU", then the current shard is not 1. @@ -495,14 +506,15 @@ where C::range_check_felt(builder, public_values.shard, MAX_LOG_NUMBER_OF_SHARDS); // Update the reconstruct challenger. - reconstruct_challenger.observe(builder, shard_proof.commitment.main_commit); + reconstruct_challenger.observe(builder, shard_proof.commitment.global_main_commit); for element in shard_proof.public_values.iter().take(machine.num_pv_elts()) { reconstruct_challenger.observe(builder, *element); } // Cumulative sum is updated by sums of all chips. for values in shard_proof.opened_values.chips.iter() { - cumulative_sum = builder.eval(cumulative_sum + values.cumulative_sum); + global_cumulative_sum = + builder.eval(global_cumulative_sum + values.global_cumulative_sum); } } @@ -517,7 +529,7 @@ where let final_challenger_public_values = reconstruct_challenger.public_values(builder); // Collect the cumulative sum. - let cumulative_sum_array = builder.ext2felt_v2(cumulative_sum); + let global_cumulative_sum_array = builder.ext2felt_v2(global_cumulative_sum); // Collect the deferred proof digests. let zero: Felt<_> = builder.eval(C::F::zero()); @@ -548,7 +560,7 @@ where recursion_public_values.leaf_challenger = leaf_challenger_public_values; recursion_public_values.start_reconstruct_challenger = initial_challenger_public_values; recursion_public_values.end_reconstruct_challenger = final_challenger_public_values; - recursion_public_values.cumulative_sum = cumulative_sum_array; + recursion_public_values.cumulative_sum = global_cumulative_sum_array; recursion_public_values.start_reconstruct_deferred_digest = start_deferred_digest; recursion_public_values.end_reconstruct_deferred_digest = end_deferred_digest; recursion_public_values.exit_code = exit_code; diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 8e9ff784d4..5669f888f4 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -10,7 +10,7 @@ use p3_field::AbstractField; use p3_matrix::dense::RowMajorMatrix; use sp1_primitives::consts::WORD_SIZE; -use sp1_recursion_compiler::ir::{Builder, Felt}; +use sp1_recursion_compiler::ir::{Builder, Ext, Felt}; use sp1_stark::{ air::{MachineAir, POSEIDON_NUM_WORDS}, @@ -130,13 +130,23 @@ where challenger.observe(builder, zero); } - // Observe the main commitment and public values. - challenger.observe(builder, shard_proof.commitment.main_commit); + // Observe the and public values. challenger.observe_slice( builder, shard_proof.public_values[0..machine.num_pv_elts()].iter().copied(), ); - StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); + + assert!(!shard_proof.contains_global_main_commitment()); + + let zero_ext: Ext = builder.eval(C::F::zero()); + StarkVerifier::verify_shard( + builder, + &vk, + machine, + &mut challenger, + &shard_proof, + &[zero_ext, zero_ext], + ); // Get the current public values. let current_public_values: &RecursionPublicValues> = diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index 2dd5b49fd3..a7ffc18568 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -1,21 +1,18 @@ use hashbrown::HashMap; use itertools::{izip, Itertools}; -use p3_commit::Mmcs; -use p3_matrix::dense::RowMajorMatrix; - +use num_traits::cast::ToPrimitive; use p3_air::Air; use p3_baby_bear::BabyBear; -use p3_commit::{Pcs, TwoAdicMultiplicativeCoset}; -use p3_field::TwoAdicField; -use sp1_stark::{ShardCommitment, ShardOpenedValues, Val}; - -use p3_commit::PolynomialSpace; +use p3_commit::{Mmcs, Pcs, PolynomialSpace, TwoAdicMultiplicativeCoset}; +use p3_field::{Field, TwoAdicField}; +use p3_matrix::dense::RowMajorMatrix; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, ir::{Builder, Config, Ext}, prelude::Felt, }; +use sp1_stark::{air::InteractionScope, ShardCommitment, ShardOpenedValues, Val}; use sp1_stark::{air::MachineAir, StarkGenericConfig, StarkMachine, StarkVerifyingKey}; use crate::{ @@ -36,6 +33,7 @@ pub struct ShardProofVariable, SC: BabyBearFriConf pub opened_values: ShardOpenedValues>, pub opening_proof: TwoAdicPcsProofVariable, pub chip_ordering: HashMap, + pub chip_scopes: Vec, pub public_values: Vec>, } @@ -87,19 +85,40 @@ where machine: &StarkMachine, challenger: &mut SC::FriChallengerVariable, proof: &ShardProofVariable, + global_permutation_challenges: &[Ext], ) where A: for<'a> Air>, { let chips = machine.shard_chips_ordered(&proof.chip_ordering).collect::>(); + let has_global_main_commit = proof.contains_global_main_commitment(); + let ShardProofVariable { commitment, opened_values, opening_proof, chip_ordering, + chip_scopes, public_values, } = proof; + // Assert that the byte multiplicities don't overflow. + let mut max_byte_lookup_mult = 0u64; + chips.iter().zip(opened_values.chips.iter()).for_each(|(chip, val)| { + max_byte_lookup_mult = max_byte_lookup_mult + .checked_add( + (chip.num_sent_byte_lookups() as u64) + .checked_mul(1u64.checked_shl(val.log_degree as u32).unwrap()) + .unwrap(), + ) + .unwrap(); + }); + + assert!( + max_byte_lookup_mult <= SC::Val::order().to_u64().unwrap(), + "Byte multiplicities overflow" + ); + let log_degrees = opened_values.chips.iter().map(|val| val.log_degree).collect::>(); let log_quotient_degrees = @@ -110,9 +129,16 @@ where .map(|log_degree| Self::natural_domain_for_degree(machine.config(), 1 << log_degree)) .collect::>(); - let ShardCommitment { main_commit, permutation_commit, quotient_commit } = *commitment; + let ShardCommitment { + global_main_commit, + local_main_commit, + permutation_commit, + quotient_commit, + } = *commitment; + + challenger.observe(builder, local_main_commit); - let permutation_challenges = + let local_permutation_challenges = (0..2).map(|_| challenger.sample_ext(builder)).collect::>(); challenger.observe(builder, permutation_commit); @@ -185,15 +211,33 @@ where }) .collect::>(); + // Split the main_domains_points_and_opens to the global and local chips. + let mut global_trace_points_and_openings = Vec::new(); + let mut local_trace_points_and_openings = Vec::new(); + for (i, points_and_openings) in + main_domains_points_and_opens.clone().into_iter().enumerate() + { + let scope = chip_scopes[i]; + if scope == InteractionScope::Global { + global_trace_points_and_openings.push(points_and_openings); + } else { + local_trace_points_and_openings.push(points_and_openings); + } + } + // Create the pcs rounds. let prep_commit = vk.commitment; let prep_round = TwoAdicPcsRoundVariable { batch_commit: prep_commit, domains_points_and_opens: preprocessed_domains_points_and_opens, }; - let main_round = TwoAdicPcsRoundVariable { - batch_commit: main_commit, - domains_points_and_opens: main_domains_points_and_opens, + let global_main_round = TwoAdicPcsRoundVariable { + batch_commit: global_main_commit, + domains_points_and_opens: global_trace_points_and_openings, + }; + let local_main_round = TwoAdicPcsRoundVariable { + batch_commit: local_main_commit, + domains_points_and_opens: local_trace_points_and_openings, }; let perm_round = TwoAdicPcsRoundVariable { batch_commit: permutation_commit, @@ -203,7 +247,12 @@ where batch_commit: quotient_commit, domains_points_and_opens: quotient_domains_points_and_opens, }; - let rounds = vec![prep_round, main_round, perm_round, quotient_round]; + + let rounds = if has_global_main_commit { + vec![prep_round, global_main_round, local_main_round, perm_round, quotient_round] + } else { + vec![prep_round, local_main_round, perm_round, quotient_round] + }; // Verify the pcs proof builder.cycle_tracker_v2_enter("stage-d-verify-pcs".to_string()); @@ -213,6 +262,12 @@ where // Verify the constrtaint evaluations. builder.cycle_tracker_v2_enter("stage-e-verify-constraints".to_string()); + let permutation_challenges = global_permutation_challenges + .iter() + .chain(local_permutation_challenges.iter()) + .copied() + .collect::>(); + for (chip, trace_domain, qc_domains, values) in izip!(chips.iter(), trace_domains, quotient_chunk_domains, opened_values.chips.iter(),) { @@ -246,11 +301,15 @@ impl, SC: BabyBearFriConfigVariable> ShardProof } pub fn contains_memory_init(&self) -> bool { - self.chip_ordering.contains_key("MemoryInit") + self.chip_ordering.contains_key("MemoryGlobalInit") } pub fn contains_memory_finalize(&self) -> bool { - self.chip_ordering.contains_key("MemoryFinalize") + self.chip_ordering.contains_key("MemoryGlobalFinalize") + } + + pub fn contains_global_main_commitment(&self) -> bool { + self.chip_scopes.contains(&InteractionScope::Global) } } @@ -345,16 +404,27 @@ pub mod tests { .collect::>(); // Observe all the commitments, and put the proofs into the witness stream. for proof in proofs.iter() { - let ShardCommitment { main_commit, .. } = proof.commitment; - challenger.observe(&mut builder, main_commit); + let ShardCommitment { global_main_commit, .. } = proof.commitment; + challenger.observe(&mut builder, global_main_commit); let pv_slice = &proof.public_values[..machine.num_pv_elts()]; challenger.observe_slice(&mut builder, pv_slice.iter().cloned()); } + + let global_permutation_challenges = + (0..2).map(|_| challenger.sample_ext(&mut builder)).collect::>(); + // Verify the first proof. let num_shards = num_shards_in_batch.unwrap_or(proofs.len()); for proof in proofs.into_iter().take(num_shards) { let mut challenger = challenger.copy(&mut builder); - StarkVerifier::verify_shard(&mut builder, &vk, &machine, &mut challenger, &proof); + StarkVerifier::verify_shard( + &mut builder, + &vk, + &machine, + &mut challenger, + &proof, + &global_permutation_challenges, + ); } (builder.into_operations(), witness_stream) } diff --git a/crates/recursion/circuit-v2/src/witness/mod.rs b/crates/recursion/circuit-v2/src/witness/mod.rs index 92811f7dc0..82a0ec612a 100644 --- a/crates/recursion/circuit-v2/src/witness/mod.rs +++ b/crates/recursion/circuit-v2/src/witness/mod.rs @@ -143,6 +143,7 @@ where let opening_proof = self.opening_proof.read(builder); let public_values = self.public_values.read(builder); let chip_ordering = self.chip_ordering.clone(); + let chip_scopes = self.chip_scopes.clone(); ShardProofVariable { commitment, @@ -150,6 +151,7 @@ where opening_proof, public_values, chip_ordering, + chip_scopes, } } @@ -165,14 +167,21 @@ impl> Witnessable for ShardCommitment type WitnessVariable = ShardCommitment; fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { - let main_commit = self.main_commit.read(builder); + let global_main_commit = self.global_main_commit.read(builder); + let local_main_commit = self.local_main_commit.read(builder); let permutation_commit = self.permutation_commit.read(builder); let quotient_commit = self.quotient_commit.read(builder); - Self::WitnessVariable { main_commit, permutation_commit, quotient_commit } + Self::WitnessVariable { + global_main_commit, + local_main_commit, + permutation_commit, + quotient_commit, + } } fn write(&self, witness: &mut impl WitnessWriter) { - self.main_commit.write(witness); + self.global_main_commit.write(witness); + self.local_main_commit.write(witness); self.permutation_commit.write(witness); self.quotient_commit.write(witness); } @@ -203,14 +212,16 @@ impl> Witnessable let main = self.main.read(builder); let permutation = self.permutation.read(builder); let quotient = self.quotient.read(builder); - let cumulative_sum = self.cumulative_sum.read(builder); + let global_cumulative_sum = self.global_cumulative_sum.read(builder); + let local_cumulative_sum = self.local_cumulative_sum.read(builder); let log_degree = self.log_degree; Self::WitnessVariable { preprocessed, main, permutation, quotient, - cumulative_sum, + global_cumulative_sum, + local_cumulative_sum, log_degree, } } @@ -220,6 +231,7 @@ impl> Witnessable self.main.write(witness); self.permutation.write(witness); self.quotient.write(witness); - self.cumulative_sum.write(witness); + self.global_cumulative_sum.write(witness); + self.local_cumulative_sum.write(witness); } } diff --git a/crates/recursion/core-v2/src/builder.rs b/crates/recursion/core-v2/src/builder.rs index 1542081a6c..86d17d5595 100644 --- a/crates/recursion/core-v2/src/builder.rs +++ b/crates/recursion/core-v2/src/builder.rs @@ -2,7 +2,7 @@ use p3_air::AirBuilderWithPublicValues; use p3_field::AbstractField; use sp1_recursion_core::air::Block; use sp1_stark::{ - air::{AirInteraction, BaseAirBuilder, MachineAirBuilder}, + air::{AirInteraction, BaseAirBuilder, InteractionScope, MachineAirBuilder}, InteractionKind, }; @@ -32,11 +32,14 @@ pub trait RecursionAirBuilder: BaseAirBuilder { val: Block, mult: impl Into, ) { - self.send(AirInteraction::new( - once(addr.0).chain(val).map(Into::into).collect(), - mult.into(), - InteractionKind::Memory, - )); + self.send( + AirInteraction::new( + once(addr.0).chain(val).map(Into::into).collect(), + mult.into(), + InteractionKind::Memory, + ), + InteractionScope::Local, + ); } fn receive_single>( @@ -56,10 +59,13 @@ pub trait RecursionAirBuilder: BaseAirBuilder { val: Block, mult: impl Into, ) { - self.receive(AirInteraction::new( - once(addr.0).chain(val).map(Into::into).collect(), - mult.into(), - InteractionKind::Memory, - )); + self.receive( + AirInteraction::new( + once(addr.0).chain(val).map(Into::into).collect(), + mult.into(), + InteractionKind::Memory, + ), + InteractionScope::Local, + ); } } diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index 31784ebcee..957f2726f7 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -3,7 +3,10 @@ use std::ops::{Add, AddAssign}; use hashbrown::HashMap; use p3_field::{extension::BinomiallyExtendable, PrimeField32}; use sp1_recursion_core::runtime::D; -use sp1_stark::{air::MachineAir, Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS}; +use sp1_stark::{ + air::{InteractionScope, MachineAir}, + Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS, +}; use crate::{ chips::{ @@ -79,7 +82,7 @@ impl, const DEGREE: usize, const COL_P .map(Chip::new) .into_iter() .collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS, false) } /// Get a machine with all chips, except the dummy chip. @@ -99,7 +102,7 @@ impl, const DEGREE: usize, const COL_P .map(Chip::new) .into_iter() .collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS, false) } /// A machine with dyunamic chip sizes that includes the wide variant of the Poseidon2 chip. @@ -116,7 +119,7 @@ impl, const DEGREE: usize, const COL_P .map(Chip::new) .into_iter() .collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS, false) } pub fn shrink_machine>(config: SC) -> StarkMachine { @@ -140,7 +143,7 @@ impl, const DEGREE: usize, const COL_P .map(Chip::new) .into_iter() .collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS, false) } pub fn shrink_shape() -> RecursionShape { diff --git a/crates/recursion/core-v2/src/runtime/record.rs b/crates/recursion/core-v2/src/runtime/record.rs index 062ebd89ef..bc219525f5 100644 --- a/crates/recursion/core-v2/src/runtime/record.rs +++ b/crates/recursion/core-v2/src/runtime/record.rs @@ -1,5 +1,6 @@ use std::{array, sync::Arc}; +use hashbrown::HashMap; use p3_field::{AbstractField, Field, PrimeField32}; use sp1_recursion_core::air::RecursionPublicValues; use sp1_stark::{air::MachineAir, MachineRecord, SP1CoreOpts, PROOF_MAX_NUM_PVS}; @@ -30,7 +31,16 @@ impl MachineRecord for ExecutionRecord { type Config = SP1CoreOpts; fn stats(&self) -> hashbrown::HashMap { - hashbrown::HashMap::from([("cpu_events".to_owned(), 1337usize)]) + let mut stats = HashMap::new(); + stats.insert("base_alu_events".to_string(), self.base_alu_events.len()); + stats.insert("ext_alu_events".to_string(), self.ext_alu_events.len()); + stats.insert("mem_var_events".to_string(), self.mem_var_events.len()); + + stats.insert("poseidon2_events".to_string(), self.poseidon2_events.len()); + stats.insert("exp_reverse_bits_events".to_string(), self.exp_reverse_bits_len_events.len()); + stats.insert("fri_fold_events".to_string(), self.fri_fold_events.len()); + + stats } fn append(&mut self, other: &mut Self) { diff --git a/crates/recursion/core/src/air/builder.rs b/crates/recursion/core/src/air/builder.rs index 0794f09bd9..3c8c92722b 100644 --- a/crates/recursion/core/src/air/builder.rs +++ b/crates/recursion/core/src/air/builder.rs @@ -7,7 +7,7 @@ use core::iter::{once, repeat}; use p3_air::{AirBuilder, AirBuilderWithPublicValues}; use p3_field::AbstractField; use sp1_stark::{ - air::{AirInteraction, BaseAirBuilder, MachineAirBuilder}, + air::{AirInteraction, BaseAirBuilder, InteractionScope, MachineAirBuilder}, InteractionKind, }; @@ -50,8 +50,14 @@ pub trait RecursionMemoryAirBuilder: RecursionInteractionAirBuilder { .chain(memory_access.value().clone().map(Into::into)) .collect(); - self.receive(AirInteraction::new(prev_values, is_real.clone(), InteractionKind::Memory)); - self.send(AirInteraction::new(current_values, is_real, InteractionKind::Memory)); + self.receive( + AirInteraction::new(prev_values, is_real.clone(), InteractionKind::Memory), + InteractionScope::Local, + ); + self.send( + AirInteraction::new(current_values, is_real, InteractionKind::Memory), + InteractionScope::Local, + ); } fn recursion_eval_memory_access_single + Clone>( @@ -82,8 +88,14 @@ pub trait RecursionMemoryAirBuilder: RecursionInteractionAirBuilder { .chain(repeat(Self::Expr::zero()).take(3)) .collect(); - self.receive(AirInteraction::new(prev_values, is_real.clone(), InteractionKind::Memory)); - self.send(AirInteraction::new(current_values, is_real, InteractionKind::Memory)); + self.receive( + AirInteraction::new(prev_values, is_real.clone(), InteractionKind::Memory), + InteractionScope::Local, + ); + self.send( + AirInteraction::new(current_values, is_real, InteractionKind::Memory), + InteractionScope::Local, + ); } /// Verifies that the memory access happens after the previous memory access. @@ -151,11 +163,14 @@ pub trait RecursionInteractionAirBuilder: BaseAirBuilder { val: impl Into, is_real: impl Into, ) { - self.send(AirInteraction::new( - vec![range_check_opcode.into(), val.into()], - is_real.into(), - InteractionKind::Range, - )); + self.send( + AirInteraction::new( + vec![range_check_opcode.into(), val.into()], + is_real.into(), + InteractionKind::Range, + ), + InteractionScope::Global, + ); } /// Receives a range check operation to be processed. @@ -165,11 +180,14 @@ pub trait RecursionInteractionAirBuilder: BaseAirBuilder { val: impl Into, is_real: impl Into, ) { - self.receive(AirInteraction::new( - vec![range_check_opcode.into(), val.into()], - is_real.into(), - InteractionKind::Range, - )); + self.receive( + AirInteraction::new( + vec![range_check_opcode.into(), val.into()], + is_real.into(), + InteractionKind::Range, + ), + InteractionScope::Global, + ); } fn send_program + Copy>( @@ -183,11 +201,10 @@ pub trait RecursionInteractionAirBuilder: BaseAirBuilder { .chain(instruction.into_iter().map(|x| x.into())) .chain(selectors.into_iter().map(|x| x.into())) .collect::>(); - self.send(AirInteraction::new( - program_interaction_vals, - is_real.into(), - InteractionKind::Program, - )); + self.send( + AirInteraction::new(program_interaction_vals, is_real.into(), InteractionKind::Program), + InteractionScope::Global, + ); } fn receive_program + Copy>( @@ -201,11 +218,10 @@ pub trait RecursionInteractionAirBuilder: BaseAirBuilder { .chain(instruction.into_iter().map(|x| x.into())) .chain(selectors.into_iter().map(|x| x.into())) .collect::>(); - self.receive(AirInteraction::new( - program_interaction_vals, - is_real.into(), - InteractionKind::Program, - )); + self.receive( + AirInteraction::new(program_interaction_vals, is_real.into(), InteractionKind::Program), + InteractionScope::Global, + ); } fn send_table + Clone>( @@ -216,7 +232,10 @@ pub trait RecursionInteractionAirBuilder: BaseAirBuilder { ) { let table_interaction_vals = table.iter().map(|x| x.clone().into()); let values = once(opcode.into()).chain(table_interaction_vals).collect(); - self.send(AirInteraction::new(values, is_real.into(), InteractionKind::Syscall)); + self.send( + AirInteraction::new(values, is_real.into(), InteractionKind::Syscall), + InteractionScope::Local, + ); } fn receive_table + Clone>( @@ -227,6 +246,9 @@ pub trait RecursionInteractionAirBuilder: BaseAirBuilder { ) { let table_interaction_vals = table.iter().map(|x| x.clone().into()); let values = once(opcode.into()).chain(table_interaction_vals).collect(); - self.receive(AirInteraction::new(values, is_real.into(), InteractionKind::Syscall)); + self.receive( + AirInteraction::new(values, is_real.into(), InteractionKind::Syscall), + InteractionScope::Local, + ); } } diff --git a/crates/recursion/core/src/air/multi_builder.rs b/crates/recursion/core/src/air/multi_builder.rs index 48711b5294..57027d8fa4 100644 --- a/crates/recursion/core/src/air/multi_builder.rs +++ b/crates/recursion/core/src/air/multi_builder.rs @@ -2,7 +2,7 @@ use p3_air::{ AirBuilder, AirBuilderWithPublicValues, ExtensionBuilder, FilteredAirBuilder, PermutationAirBuilder, }; -use sp1_stark::air::MessageBuilder; +use sp1_stark::air::{InteractionScope, MessageBuilder}; /// The MultiBuilder is used for the multi table. It is used to create a virtual builder for one of /// the sub tables in the multi table. @@ -85,12 +85,12 @@ impl<'a, AB: PermutationAirBuilder> PermutationAirBuilder for MultiBuilder<'a, A } impl<'a, AB: AirBuilder + MessageBuilder, M> MessageBuilder for MultiBuilder<'a, AB> { - fn send(&mut self, message: M) { - self.inner.send(message); + fn send(&mut self, message: M, scope: InteractionScope) { + self.inner.send(message, scope); } - fn receive(&mut self, message: M) { - self.inner.receive(message); + fn receive(&mut self, message: M, scope: InteractionScope) { + self.inner.receive(message, scope); } } diff --git a/crates/recursion/core/src/air/public_values.rs b/crates/recursion/core/src/air/public_values.rs index 95c14d51a8..c0f8143194 100644 --- a/crates/recursion/core/src/air/public_values.rs +++ b/crates/recursion/core/src/air/public_values.rs @@ -134,7 +134,8 @@ pub struct RecursionPublicValues { /// The leaf challenger containing the entropy from the main trace commitment. pub leaf_challenger: ChallengerPublicValues, - /// Current cumulative sum of lookup bus. + /// Current cumulative sum of lookup bus. Note that for recursive proofs for core proofs, this + /// contains the global cumulative sum. For all other proofs, it's the local cumulative sum. pub cumulative_sum: [T; 4], /// Whether the proof completely proves the program execution. diff --git a/crates/recursion/core/src/memory/air.rs b/crates/recursion/core/src/memory/air.rs index 2b0257bcb8..d739df67b7 100644 --- a/crates/recursion/core/src/memory/air.rs +++ b/crates/recursion/core/src/memory/air.rs @@ -4,7 +4,7 @@ use p3_field::{AbstractField, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use sp1_core_machine::utils::{next_power_of_two, par_for_each_row}; use sp1_stark::{ - air::{AirInteraction, MachineAir}, + air::{AirInteraction, InteractionScope, MachineAir}, InteractionKind, }; use std::borrow::{Borrow, BorrowMut}; @@ -181,30 +181,36 @@ where local.is_finalize, ); - builder.send(AirInteraction::new( - vec![ - local.timestamp.into(), - local.addr.into(), - local.value[0].into(), - local.value[1].into(), - local.value[2].into(), - local.value[3].into(), - ], - local.is_initialize.into(), - InteractionKind::Memory, - )); - builder.receive(AirInteraction::new( - vec![ - local.timestamp.into(), - local.addr.into(), - local.value[0].into(), - local.value[1].into(), - local.value[2].into(), - local.value[3].into(), - ], - local.is_finalize.into(), - InteractionKind::Memory, - )); + builder.send( + AirInteraction::new( + vec![ + local.timestamp.into(), + local.addr.into(), + local.value[0].into(), + local.value[1].into(), + local.value[2].into(), + local.value[3].into(), + ], + local.is_initialize.into(), + InteractionKind::Memory, + ), + InteractionScope::Global, + ); + builder.receive( + AirInteraction::new( + vec![ + local.timestamp.into(), + local.addr.into(), + local.value[0].into(), + local.value[1].into(), + local.value[2].into(), + local.value[3].into(), + ], + local.is_finalize.into(), + InteractionKind::Memory, + ), + InteractionScope::Global, + ); } } diff --git a/crates/recursion/core/src/stark/config.rs b/crates/recursion/core/src/stark/config.rs index 3713fb2ed3..5d6a5838d1 100644 --- a/crates/recursion/core/src/stark/config.rs +++ b/crates/recursion/core/src/stark/config.rs @@ -3,7 +3,7 @@ use p3_bn254_fr::{Bn254Fr, DiffusionMatrixBN254}; use p3_challenger::MultiField32Challenger; use p3_commit::ExtensionMmcs; use p3_dft::Radix2DitParallel; -use p3_field::extension::BinomialExtensionField; +use p3_field::{extension::BinomialExtensionField, AbstractField}; use p3_fri::{ BatchOpening, CommitPhaseProofStep, FriConfig, FriProof, QueryProof, TwoAdicFriPcs, TwoAdicFriPcsProof, @@ -12,17 +12,20 @@ use p3_merkle_tree::FieldMerkleTreeMmcs; use p3_poseidon2::{Poseidon2, Poseidon2ExternalMatrixGeneral}; use p3_symmetric::{Hash, MultiField32PaddingFreeSponge, TruncatedPermutation}; use serde::{Deserialize, Serialize}; -use sp1_stark::StarkGenericConfig; +use sp1_stark::{Com, StarkGenericConfig, ZeroCommitment}; use super::{poseidon2::bn254_poseidon2_rc3, utils}; +pub const DIGEST_SIZE: usize = 1; + /// A configuration for outer recursion. pub type OuterVal = BabyBear; pub type OuterChallenge = BinomialExtensionField; pub type OuterPerm = Poseidon2; -pub type OuterHash = MultiField32PaddingFreeSponge; -pub type OuterDigestHash = Hash; -pub type OuterDigest = [Bn254Fr; 1]; +pub type OuterHash = + MultiField32PaddingFreeSponge; +pub type OuterDigestHash = Hash; +pub type OuterDigest = [Bn254Fr; DIGEST_SIZE]; pub type OuterCompress = TruncatedPermutation; pub type OuterValMmcs = FieldMerkleTreeMmcs; pub type OuterChallengeMmcs = ExtensionMmcs; @@ -164,6 +167,12 @@ impl StarkGenericConfig for BabyBearPoseidon2Outer { } } +impl ZeroCommitment for OuterPcs { + fn zero_commitment(&self) -> Com { + OuterDigestHash::from([Bn254Fr::zero(); DIGEST_SIZE]) + } +} + /// The FRI config for testing recursion. pub fn test_fri_config() -> FriConfig { let perm = outer_perm(); diff --git a/crates/recursion/core/src/stark/mod.rs b/crates/recursion/core/src/stark/mod.rs index 0c2104b3ea..a737aab74b 100644 --- a/crates/recursion/core/src/stark/mod.rs +++ b/crates/recursion/core/src/stark/mod.rs @@ -9,7 +9,7 @@ use crate::{ }; use core::iter::once; use p3_field::{extension::BinomiallyExtendable, PrimeField32}; -use sp1_stark::{Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS}; +use sp1_stark::{air::InteractionScope, Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS}; use std::marker::PhantomData; use crate::runtime::D; @@ -39,19 +39,19 @@ impl, const DEGREE: usize> RecursionAi /// A recursion machine that can have dynamic trace sizes. pub fn machine>(config: SC) -> StarkMachine { let chips = Self::get_all().into_iter().map(Chip::new).collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS, false) } /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. pub fn wrap_machine>(config: SC) -> StarkMachine { let chips = Self::get_wrap_all().into_iter().map(Chip::new).collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS, false) } /// A recursion machine with fixed trace sizes tuned to work specifically for the wrap layer. pub fn wrap_machine_dyn>(config: SC) -> StarkMachine { let chips = Self::get_wrap_dyn_all().into_iter().map(Chip::new).collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS, false) } pub fn get_all() -> Vec { diff --git a/crates/sdk/src/provers/cpu.rs b/crates/sdk/src/provers/cpu.rs index e1828716e4..891c34459c 100644 --- a/crates/sdk/src/provers/cpu.rs +++ b/crates/sdk/src/provers/cpu.rs @@ -50,7 +50,8 @@ impl Prover for CpuProver { kind: SP1ProofKind, ) -> Result { // Generate the core proof. - let proof = self.prover.prove_core(pk, &stdin, opts.sp1_prover_opts, context)?; + let proof: sp1_prover::SP1ProofWithMetadata = + self.prover.prove_core(pk, &stdin, opts.sp1_prover_opts, context)?; if kind == SP1ProofKind::Core { return Ok(SP1ProofWithPublicValues { proof: SP1Proof::Core(proof.proof.0), diff --git a/crates/sdk/src/provers/mock.rs b/crates/sdk/src/provers/mock.rs index 109adc66c3..29dcd5880f 100644 --- a/crates/sdk/src/provers/mock.rs +++ b/crates/sdk/src/provers/mock.rs @@ -69,7 +69,8 @@ impl Prover for MockProver { let shard_proof = ShardProof { commitment: ShardCommitment { - main_commit: [BabyBear::zero(); 8].into(), + global_main_commit: [BabyBear::zero(); 8].into(), + local_main_commit: [BabyBear::zero(); 8].into(), permutation_commit: [BabyBear::zero(); 8].into(), quotient_commit: [BabyBear::zero(); 8].into(), }, @@ -84,6 +85,7 @@ impl Prover for MockProver { query_openings: vec![], }, chip_ordering: HashMap::new(), + chip_scopes: vec![], public_values: vec![], }; diff --git a/crates/stark/Cargo.toml b/crates/stark/Cargo.toml index 0d5e773441..164901b194 100644 --- a/crates/stark/Cargo.toml +++ b/crates/stark/Cargo.toml @@ -37,9 +37,11 @@ itertools = "0.13.0" tracing = "0.1.40" rayon-scan = "0.1.1" arrayref = "0.3.8" +strum = "0.26.3" +strum_macros = "0.26.4" getrandom = { version = "0.2.15", features = ["custom"] } sysinfo = "0.30.13" - +num-traits = "0.2.19" [dev-dependencies] sp1-zkvm = { workspace = true } diff --git a/crates/stark/src/air/builder.rs b/crates/stark/src/air/builder.rs index 16d41e1c54..c64f1677cd 100644 --- a/crates/stark/src/air/builder.rs +++ b/crates/stark/src/air/builder.rs @@ -6,26 +6,50 @@ use p3_field::{AbstractField, Field}; use p3_uni_stark::{ ProverConstraintFolder, StarkGenericConfig, SymbolicAirBuilder, VerifierConstraintFolder, }; +use serde::{Deserialize, Serialize}; +use strum_macros::{Display, EnumIter}; use super::{interaction::AirInteraction, BinomialExtension}; use crate::{lookup::InteractionKind, Word}; +/// The scope of an interaction. +#[derive( + Debug, + Clone, + Copy, + PartialEq, + Eq, + Hash, + Display, + EnumIter, + PartialOrd, + Ord, + Serialize, + Deserialize, +)] +pub enum InteractionScope { + /// Global scope. + Global = 0, + /// Local scope. + Local, +} + /// A builder that can send and receive messages (or interactions) with other AIRs. pub trait MessageBuilder { /// Sends a message. - fn send(&mut self, message: M); + fn send(&mut self, message: M, scope: InteractionScope); /// Receives a message. - fn receive(&mut self, message: M); + fn receive(&mut self, message: M, scope: InteractionScope); } /// A message builder for which sending and receiving messages is a no-op. pub trait EmptyMessageBuilder: AirBuilder {} impl MessageBuilder for AB { - fn send(&mut self, _message: M) {} + fn send(&mut self, _message: M, _scope: InteractionScope) {} - fn receive(&mut self, _message: M) {} + fn receive(&mut self, _message: M, _scope: InteractionScope) {} } /// A trait which contains basic methods for building an AIR. @@ -90,11 +114,9 @@ pub trait ByteAirBuilder: BaseAirBuilder { a: impl Into, b: impl Into, c: impl Into, - shard: impl Into, - channel: impl Into, multiplicity: impl Into, ) { - self.send_byte_pair(opcode, a, Self::Expr::zero(), b, c, shard, channel, multiplicity); + self.send_byte_pair(opcode, a, Self::Expr::zero(), b, c, multiplicity); } /// Sends a byte operation with two outputs to be processed. @@ -106,23 +128,16 @@ pub trait ByteAirBuilder: BaseAirBuilder { a2: impl Into, b: impl Into, c: impl Into, - shard: impl Into, - channel: impl Into, multiplicity: impl Into, ) { - self.send(AirInteraction::new( - vec![ - opcode.into(), - a1.into(), - a2.into(), - b.into(), - c.into(), - shard.into(), - channel.into(), - ], - multiplicity.into(), - InteractionKind::Byte, - )); + self.send( + AirInteraction::new( + vec![opcode.into(), a1.into(), a2.into(), b.into(), c.into()], + multiplicity.into(), + InteractionKind::Byte, + ), + InteractionScope::Local, + ); } /// Receives a byte operation to be processed. @@ -133,11 +148,9 @@ pub trait ByteAirBuilder: BaseAirBuilder { a: impl Into, b: impl Into, c: impl Into, - shard: impl Into, - channel: impl Into, multiplicity: impl Into, ) { - self.receive_byte_pair(opcode, a, Self::Expr::zero(), b, c, shard, channel, multiplicity); + self.receive_byte_pair(opcode, a, Self::Expr::zero(), b, c, multiplicity); } /// Receives a byte operation with two outputs to be processed. @@ -149,23 +162,16 @@ pub trait ByteAirBuilder: BaseAirBuilder { a2: impl Into, b: impl Into, c: impl Into, - shard: impl Into, - channel: impl Into, multiplicity: impl Into, ) { - self.receive(AirInteraction::new( - vec![ - opcode.into(), - a1.into(), - a2.into(), - b.into(), - c.into(), - shard.into(), - channel.into(), - ], - multiplicity.into(), - InteractionKind::Byte, - )); + self.receive( + AirInteraction::new( + vec![opcode.into(), a1.into(), a2.into(), b.into(), c.into()], + multiplicity.into(), + InteractionKind::Byte, + ), + InteractionScope::Local, + ); } } @@ -180,7 +186,6 @@ pub trait AluAirBuilder: BaseAirBuilder { b: Word>, c: Word>, shard: impl Into, - channel: impl Into, nonce: impl Into, multiplicity: impl Into, ) { @@ -189,11 +194,13 @@ pub trait AluAirBuilder: BaseAirBuilder { .chain(b.0.into_iter().map(Into::into)) .chain(c.0.into_iter().map(Into::into)) .chain(once(shard.into())) - .chain(once(channel.into())) .chain(once(nonce.into())) .collect(); - self.send(AirInteraction::new(values, multiplicity.into(), InteractionKind::Alu)); + self.send( + AirInteraction::new(values, multiplicity.into(), InteractionKind::Alu), + InteractionScope::Local, + ); } /// Receives an ALU operation to be processed. @@ -205,7 +212,6 @@ pub trait AluAirBuilder: BaseAirBuilder { b: Word>, c: Word>, shard: impl Into, - channel: impl Into, nonce: impl Into, multiplicity: impl Into, ) { @@ -214,11 +220,13 @@ pub trait AluAirBuilder: BaseAirBuilder { .chain(b.0.into_iter().map(Into::into)) .chain(c.0.into_iter().map(Into::into)) .chain(once(shard.into())) - .chain(once(channel.into())) .chain(once(nonce.into())) .collect(); - self.receive(AirInteraction::new(values, multiplicity.into(), InteractionKind::Alu)); + self.receive( + AirInteraction::new(values, multiplicity.into(), InteractionKind::Alu), + InteractionScope::Local, + ); } /// Sends an syscall operation to be processed (with "ECALL" opcode). @@ -226,27 +234,29 @@ pub trait AluAirBuilder: BaseAirBuilder { fn send_syscall( &mut self, shard: impl Into + Clone, - channel: impl Into + Clone, clk: impl Into + Clone, nonce: impl Into + Clone, syscall_id: impl Into + Clone, arg1: impl Into + Clone, arg2: impl Into + Clone, multiplicity: impl Into, + scope: InteractionScope, ) { - self.send(AirInteraction::new( - vec![ - shard.clone().into(), - channel.clone().into(), - clk.clone().into(), - nonce.clone().into(), - syscall_id.clone().into(), - arg1.clone().into(), - arg2.clone().into(), - ], - multiplicity.into(), - InteractionKind::Syscall, - )); + self.send( + AirInteraction::new( + vec![ + shard.clone().into(), + clk.clone().into(), + nonce.clone().into(), + syscall_id.clone().into(), + arg1.clone().into(), + arg2.clone().into(), + ], + multiplicity.into(), + InteractionKind::Syscall, + ), + scope, + ); } /// Receives a syscall operation to be processed. @@ -254,27 +264,29 @@ pub trait AluAirBuilder: BaseAirBuilder { fn receive_syscall( &mut self, shard: impl Into + Clone, - channel: impl Into + Clone, clk: impl Into + Clone, nonce: impl Into + Clone, syscall_id: impl Into + Clone, arg1: impl Into + Clone, arg2: impl Into + Clone, multiplicity: impl Into, + scope: InteractionScope, ) { - self.receive(AirInteraction::new( - vec![ - shard.clone().into(), - channel.clone().into(), - clk.clone().into(), - nonce.clone().into(), - syscall_id.clone().into(), - arg1.clone().into(), - arg2.clone().into(), - ], - multiplicity.into(), - InteractionKind::Syscall, - )); + self.receive( + AirInteraction::new( + vec![ + shard.clone().into(), + clk.clone().into(), + nonce.clone().into(), + syscall_id.clone().into(), + arg1.clone().into(), + arg2.clone().into(), + ], + multiplicity.into(), + InteractionKind::Syscall, + ), + scope, + ); } } @@ -317,12 +329,12 @@ pub trait ExtensionAirBuilder: BaseAirBuilder { } /// A builder that implements a permutation argument. -pub trait MultiTableAirBuilder: PermutationAirBuilder { +pub trait MultiTableAirBuilder<'a>: PermutationAirBuilder { /// The type of the cumulative sum. - type Sum: Into; + type Sum: Into + Copy; /// Returns the cumulative sum of the permutation. - fn cumulative_sum(&self) -> Self::Sum; + fn cumulative_sums(&self) -> &'a [Self::Sum]; } /// A trait that contains the common helper methods for building `SP1 recursion` and SP1 machine @@ -336,12 +348,12 @@ pub trait MachineAirBuilder: pub trait SP1AirBuilder: MachineAirBuilder + ByteAirBuilder + AluAirBuilder {} impl<'a, AB: AirBuilder + MessageBuilder, M> MessageBuilder for FilteredAirBuilder<'a, AB> { - fn send(&mut self, message: M) { - self.inner.send(message); + fn send(&mut self, message: M, scope: InteractionScope) { + self.inner.send(message, scope); } - fn receive(&mut self, message: M) { - self.inner.receive(message); + fn receive(&mut self, message: M, scope: InteractionScope) { + self.inner.receive(message, scope); } } diff --git a/crates/stark/src/air/machine.rs b/crates/stark/src/air/machine.rs index f80a1dadad..4973c4769c 100644 --- a/crates/stark/src/air/machine.rs +++ b/crates/stark/src/air/machine.rs @@ -6,6 +6,8 @@ use crate::MachineRecord; pub use sp1_derive::MachineAir; +use super::InteractionScope; + /// An AIR that is part of a multi table AIR arithmetization. pub trait MachineAir: BaseAir + 'static + Send + Sync { /// The execution record containing events for producing the air trace. @@ -41,6 +43,11 @@ pub trait MachineAir: BaseAir + 'static + Send + Sync { fn generate_preprocessed_trace(&self, _program: &Self::Program) -> Option> { None } + + /// Specifies whether it's trace should be part of either the global or local commit. + fn commit_scope(&self) -> InteractionScope { + InteractionScope::Local + } } /// A program that defines the control flow of a machine through a program counter. diff --git a/crates/stark/src/bb31_poseidon2.rs b/crates/stark/src/bb31_poseidon2.rs index 0ad00e86ac..8c610f54e8 100644 --- a/crates/stark/src/bb31_poseidon2.rs +++ b/crates/stark/src/bb31_poseidon2.rs @@ -1,11 +1,11 @@ #![allow(missing_docs)] -use crate::StarkGenericConfig; +use crate::{Com, StarkGenericConfig, ZeroCommitment}; use p3_baby_bear::{BabyBear, DiffusionMatrixBabyBear}; use p3_challenger::DuplexChallenger; use p3_commit::ExtensionMmcs; use p3_dft::Radix2DitParallel; -use p3_field::{extension::BinomialExtensionField, Field}; +use p3_field::{extension::BinomialExtensionField, AbstractField, Field}; use p3_fri::{ BatchOpening, CommitPhaseProofStep, FriConfig, FriProof, QueryProof, TwoAdicFriPcs, TwoAdicFriPcsProof, @@ -23,7 +23,7 @@ pub type InnerVal = BabyBear; pub type InnerChallenge = BinomialExtensionField; pub type InnerPerm = Poseidon2; -pub type InnerHash = PaddingFreeSponge; +pub type InnerHash = PaddingFreeSponge; pub type InnerDigestHash = Hash; pub type InnerDigest = [InnerVal; DIGEST_SIZE]; pub type InnerCompress = TruncatedPermutation; @@ -144,27 +144,34 @@ impl StarkGenericConfig for BabyBearPoseidon2Inner { } } +impl ZeroCommitment for InnerPcs { + fn zero_commitment(&self) -> Com { + InnerDigestHash::from([InnerVal::zero(); DIGEST_SIZE]) + } +} + pub mod baby_bear_poseidon2 { use p3_baby_bear::{BabyBear, DiffusionMatrixBabyBear}; use p3_challenger::DuplexChallenger; use p3_commit::ExtensionMmcs; use p3_dft::Radix2DitParallel; - use p3_field::{extension::BinomialExtensionField, Field}; + use p3_field::{extension::BinomialExtensionField, AbstractField, Field}; use p3_fri::{FriConfig, TwoAdicFriPcs}; use p3_merkle_tree::FieldMerkleTreeMmcs; use p3_poseidon2::{Poseidon2, Poseidon2ExternalMatrixGeneral}; - use p3_symmetric::{PaddingFreeSponge, TruncatedPermutation}; + use p3_symmetric::{Hash, PaddingFreeSponge, TruncatedPermutation}; use serde::{Deserialize, Serialize}; use sp1_primitives::RC_16_30; - use crate::StarkGenericConfig; + use crate::{Com, StarkGenericConfig, ZeroCommitment, DIGEST_SIZE}; pub type Val = BabyBear; pub type Challenge = BinomialExtensionField; pub type Perm = Poseidon2; - pub type MyHash = PaddingFreeSponge; + pub type MyHash = PaddingFreeSponge; + pub type DigestHash = Hash; pub type MyCompress = TruncatedPermutation; pub type ValMmcs = FieldMerkleTreeMmcs< ::Packing, @@ -336,4 +343,10 @@ pub mod baby_bear_poseidon2 { Challenger::new(self.perm.clone()) } } + + impl ZeroCommitment for Pcs { + fn zero_commitment(&self) -> Com { + DigestHash::from([Val::zero(); DIGEST_SIZE]) + } + } } diff --git a/crates/stark/src/chip.rs b/crates/stark/src/chip.rs index 8797ed3d58..9ba6651565 100644 --- a/crates/stark/src/chip.rs +++ b/crates/stark/src/chip.rs @@ -12,8 +12,7 @@ use crate::{ }; use super::{ - eval_permutation_constraints, generate_permutation_trace, permutation_trace_width, - PROOF_MAX_NUM_PVS, + eval_permutation_constraints, generate_permutation_trace, get_grouped_maps, PROOF_MAX_NUM_PVS, }; /// An Air that encodes lookups based on interactions. @@ -96,6 +95,12 @@ where self.sends.len() + self.receives.len() } + /// Returns the number of sent byte lookups in the chip. + #[inline] + pub fn num_sent_byte_lookups(&self) -> usize { + self.sends.iter().filter(|i| i.kind == InteractionKind::Byte).count() + } + /// Returns the number of sends of the given kind. #[inline] pub fn num_sends_by_kind(&self, kind: InteractionKind) -> usize { @@ -114,7 +119,7 @@ where preprocessed: Option<&RowMajorMatrix>, main: &RowMajorMatrix, random_elements: &[EF], - ) -> RowMajorMatrix + ) -> (RowMajorMatrix, EF, EF) where F: PrimeField, A: MachineAir, @@ -133,7 +138,10 @@ where /// Returns the width of the permutation trace. #[inline] pub fn permutation_width(&self) -> usize { - permutation_trace_width(self.sends().len() + self.receives().len(), self.logup_batch_size()) + let (_, _, grouped_widths) = + get_grouped_maps(self.sends(), self.receives(), self.logup_batch_size()); + + grouped_widths.values().sum() } /// Returns the cost of a row in the chip. @@ -201,14 +209,18 @@ where fn included(&self, shard: &Self::Record) -> bool { self.air.included(shard) } + + fn commit_scope(&self) -> crate::air::InteractionScope { + self.air.commit_scope() + } } // Implement AIR directly on Chip, evaluating both execution and permutation constraints. -impl Air for Chip +impl<'a, F, A, AB> Air for Chip where F: Field, A: Air, - AB: SP1AirBuilder + MultiTableAirBuilder + PairBuilder, + AB: SP1AirBuilder + MultiTableAirBuilder<'a> + PairBuilder + 'a, { fn eval(&self, builder: &mut AB) { // Evaluate the execution trace constraints. diff --git a/crates/stark/src/config.rs b/crates/stark/src/config.rs index 59df5f0165..4ed127bac7 100644 --- a/crates/stark/src/config.rs +++ b/crates/stark/src/config.rs @@ -54,7 +54,9 @@ pub trait StarkGenericConfig: 'static + Send + Sync + Serialize + DeserializeOwn type Domain: PolynomialSpace + Sync; /// The PCS used to commit to trace polynomials. - type Pcs: Pcs + Sync; + type Pcs: Pcs + + Sync + + ZeroCommitment; /// The field from which most random challenges are drawn. type Challenge: ExtensionField; @@ -71,6 +73,10 @@ pub trait StarkGenericConfig: 'static + Send + Sync + Serialize + DeserializeOwn fn challenger(&self) -> Self::Challenger; } +pub trait ZeroCommitment { + fn zero_commitment(&self) -> Com; +} + pub struct UniConfig(pub SC); impl p3_uni_stark::StarkGenericConfig for UniConfig { diff --git a/crates/stark/src/debug.rs b/crates/stark/src/debug.rs index 2e1ccd9d3d..a02e4db00b 100644 --- a/crates/stark/src/debug.rs +++ b/crates/stark/src/debug.rs @@ -21,14 +21,15 @@ use crate::air::{EmptyMessageBuilder, MachineAir, MultiTableAirBuilder}; /// Checks that the constraints of the given AIR are satisfied, including the permutation trace. /// /// Note that this does not actually verify the proof. -#[allow(clippy::needless_pass_by_value)] +#[allow(clippy::too_many_arguments)] pub fn debug_constraints( chip: &MachineChip, preprocessed: Option<&RowMajorMatrix>>, main: &RowMajorMatrix>, perm: &RowMajorMatrix, perm_challenges: &[SC::Challenge], - public_values: Vec>, + public_values: &[Val], + cumulative_sums: &[SC::Challenge], ) where SC: StarkGenericConfig, Val: PrimeField32, @@ -40,8 +41,6 @@ pub fn debug_constraints( return; } - let cumulative_sum = perm.row_slice(perm.height() - 1).last().copied().unwrap(); - // Check that constraints are satisfied. (0..height).for_each(|i| { let i_next = (i + 1) % height; @@ -69,7 +68,6 @@ pub fn debug_constraints( let perm_next = perm.row_slice(i_next); let perm_next = &(*perm_next); - let public_values = public_values.clone(); let mut builder = DebugConstraintBuilder { preprocessed: VerticalPair::new( RowMajorMatrixView::new_row(&preprocessed_local), @@ -84,11 +82,11 @@ pub fn debug_constraints( RowMajorMatrixView::new_row(perm_next), ), perm_challenges, - cumulative_sum, + cumulative_sums, is_first_row: Val::::zero(), is_last_row: Val::::zero(), is_transition: Val::::one(), - public_values: &public_values, + public_values, }; if i == 0 { builder.is_first_row = Val::::one(); @@ -130,7 +128,7 @@ pub struct DebugConstraintBuilder<'a, F: Field, EF: ExtensionField> { pub(crate) preprocessed: VerticalPair, RowMajorMatrixView<'a, F>>, pub(crate) main: VerticalPair, RowMajorMatrixView<'a, F>>, pub(crate) perm: VerticalPair, RowMajorMatrixView<'a, EF>>, - pub(crate) cumulative_sum: EF, + pub(crate) cumulative_sums: &'a [EF], pub(crate) perm_challenges: &'a [EF], pub(crate) is_first_row: F, pub(crate) is_last_row: F, @@ -252,15 +250,15 @@ where } } -impl<'a, F, EF> MultiTableAirBuilder for DebugConstraintBuilder<'a, F, EF> +impl<'a, F, EF> MultiTableAirBuilder<'a> for DebugConstraintBuilder<'a, F, EF> where F: Field, EF: ExtensionField, { type Sum = EF; - fn cumulative_sum(&self) -> Self::Sum { - self.cumulative_sum + fn cumulative_sums(&self) -> &'a [Self::Sum] { + self.cumulative_sums } } diff --git a/crates/stark/src/folder.rs b/crates/stark/src/folder.rs index a99e06c31b..4666e2e94c 100644 --- a/crates/stark/src/folder.rs +++ b/crates/stark/src/folder.rs @@ -27,8 +27,8 @@ pub struct ProverConstraintFolder<'a, SC: StarkGenericConfig> { >, /// The challenges for the permutation. pub perm_challenges: &'a [PackedChallenge], - /// The cumulative sum of the permutation. - pub cumulative_sum: SC::Challenge, + /// The cumulative sums for the permutation. + pub cumulative_sums: &'a [PackedChallenge], /// The selector for the first row. pub is_first_row: PackedVal, /// The selector for the last row. @@ -111,11 +111,11 @@ impl<'a, SC: StarkGenericConfig> PermutationAirBuilder for ProverConstraintFolde } } -impl<'a, SC: StarkGenericConfig> MultiTableAirBuilder for ProverConstraintFolder<'a, SC> { +impl<'a, SC: StarkGenericConfig> MultiTableAirBuilder<'a> for ProverConstraintFolder<'a, SC> { type Sum = PackedChallenge; - fn cumulative_sum(&self) -> Self::Sum { - PackedChallenge::::from_f(self.cumulative_sum) + fn cumulative_sums(&self) -> &'a [Self::Sum] { + self.cumulative_sums } } @@ -155,8 +155,8 @@ pub struct GenericVerifierConstraintFolder<'a, F, EF, PubVar, Var, Expr> { pub perm: VerticalPair, RowMajorMatrixView<'a, Var>>, /// The challenges for the permutation. pub perm_challenges: &'a [Var], - /// The cumulative sum of the permutation. - pub cumulative_sum: Var, + /// The cumulative sums of the permutation. + pub cumulative_sums: &'a [Var], /// The selector for the first row. pub is_first_row: Var, /// The selector for the last row. @@ -316,7 +316,7 @@ where } } -impl<'a, F, EF, PubVar, Var, Expr> MultiTableAirBuilder +impl<'a, F, EF, PubVar, Var, Expr> MultiTableAirBuilder<'a> for GenericVerifierConstraintFolder<'a, F, EF, PubVar, Var, Expr> where F: Field, @@ -347,8 +347,8 @@ where { type Sum = Var; - fn cumulative_sum(&self) -> Self::Sum { - self.cumulative_sum + fn cumulative_sums(&self) -> &'a [Self::Sum] { + self.cumulative_sums } } diff --git a/crates/stark/src/lookup/builder.rs b/crates/stark/src/lookup/builder.rs index df0fa8a75b..153d660483 100644 --- a/crates/stark/src/lookup/builder.rs +++ b/crates/stark/src/lookup/builder.rs @@ -4,7 +4,7 @@ use p3_matrix::dense::RowMajorMatrix; use p3_uni_stark::{Entry, SymbolicExpression, SymbolicVariable}; use crate::{ - air::{AirInteraction, MessageBuilder}, + air::{AirInteraction, InteractionScope, MessageBuilder}, PROOF_MAX_NUM_PVS, }; @@ -93,22 +93,22 @@ impl PairBuilder for InteractionBuilder { } impl MessageBuilder>> for InteractionBuilder { - fn send(&mut self, message: AirInteraction>) { + fn send(&mut self, message: AirInteraction>, scope: InteractionScope) { let values = message.values.into_iter().map(|v| symbolic_to_virtual_pair(&v)).collect::>(); let multiplicity = symbolic_to_virtual_pair(&message.multiplicity); - self.sends.push(Interaction::new(values, multiplicity, message.kind)); + self.sends.push(Interaction::new(values, multiplicity, message.kind, scope)); } - fn receive(&mut self, message: AirInteraction>) { + fn receive(&mut self, message: AirInteraction>, scope: InteractionScope) { let values = message.values.into_iter().map(|v| symbolic_to_virtual_pair(&v)).collect::>(); let multiplicity = symbolic_to_virtual_pair(&message.multiplicity); - self.receives.push(Interaction::new(values, multiplicity, message.kind)); + self.receives.push(Interaction::new(values, multiplicity, message.kind, scope)); } } @@ -240,18 +240,27 @@ mod tests { let y = local[1]; let z = local[2]; - builder.send(AirInteraction::new( - vec![x.into(), y.into()], - AB::F::from_canonical_u32(3).into(), - InteractionKind::Alu, - )); - builder.send(AirInteraction::new( - vec![x + y, z.into()], - AB::F::from_canonical_u32(5).into(), - InteractionKind::Alu, - )); - - builder.receive(AirInteraction::new(vec![x.into()], y.into(), InteractionKind::Byte)); + builder.send( + AirInteraction::new( + vec![x.into(), y.into()], + AB::F::from_canonical_u32(3).into(), + InteractionKind::Alu, + ), + InteractionScope::Local, + ); + builder.send( + AirInteraction::new( + vec![x + y, z.into()], + AB::F::from_canonical_u32(5).into(), + InteractionKind::Alu, + ), + InteractionScope::Local, + ); + + builder.receive( + AirInteraction::new(vec![x.into()], y.into(), InteractionKind::Byte), + InteractionScope::Local, + ); } } diff --git a/crates/stark/src/lookup/debug.rs b/crates/stark/src/lookup/debug.rs index b555cb0471..8d051d8f82 100644 --- a/crates/stark/src/lookup/debug.rs +++ b/crates/stark/src/lookup/debug.rs @@ -5,7 +5,10 @@ use p3_field::{AbstractField, Field, PrimeField32, PrimeField64}; use p3_matrix::Matrix; use super::InteractionKind; -use crate::{air::MachineAir, MachineChip, StarkGenericConfig, StarkMachine, StarkProvingKey, Val}; +use crate::{ + air::{InteractionScope, MachineAir}, + MachineChip, StarkGenericConfig, StarkMachine, StarkProvingKey, Val, +}; /// The data for an interaction. #[derive(Debug)] @@ -61,6 +64,7 @@ pub fn debug_interactions>>( pkey: &StarkProvingKey, record: &A::Record, interaction_kinds: Vec, + scope: InteractionScope, ) -> (BTreeMap>>>, BTreeMap>) { let mut key_to_vec_data = BTreeMap::new(); let mut key_to_count = BTreeMap::new(); @@ -72,9 +76,12 @@ pub fn debug_interactions>>( let mut main = trace.clone(); let height = trace.clone().height(); - let nb_send_interactions = chip.sends().len(); + let sends = chip.sends().iter().filter(|s| s.scope == scope).collect::>(); + let receives = chip.receives().iter().filter(|r| r.scope == scope).collect::>(); + + let nb_send_interactions = sends.len(); for row in 0..height { - for (m, interaction) in chip.sends().iter().chain(chip.receives().iter()).enumerate() { + for (m, interaction) in sends.iter().chain(receives.iter()).enumerate() { if !interaction_kinds.contains(&interaction.kind) { continue; } @@ -94,7 +101,12 @@ pub fn debug_interactions>>( let expr: Val = value.apply(preprocessed_row, main.row_mut(row)); values.push(expr); } - let key = format!("{} {}", &interaction.kind.to_string(), vec_to_string(values)); + let key = format!( + "{} {} {}", + &interaction.scope.to_string(), + &interaction.kind.to_string(), + vec_to_string(values) + ); key_to_vec_data.entry(key.clone()).or_insert_with(Vec::new).push(InteractionData { chip_name: chip.name(), kind: interaction.kind, @@ -124,12 +136,17 @@ pub fn debug_interactions_with_all_chips( pkey: &StarkProvingKey, shards: &[A::Record], interaction_kinds: Vec, + scope: InteractionScope, ) -> bool where SC: StarkGenericConfig, SC::Val: PrimeField32, A: MachineAir, { + if scope == InteractionScope::Local { + assert!(shards.len() == 1); + } + let mut final_map = BTreeMap::new(); let mut total = SC::Val::zero(); @@ -138,7 +155,7 @@ where let mut total_events = 0; for shard in shards { let (_, count) = - debug_interactions::(chip, pkey, shard, interaction_kinds.clone()); + debug_interactions::(chip, pkey, shard, interaction_kinds.clone(), scope); total_events += count.len(); for (key, value) in count.iter() { let entry = diff --git a/crates/stark/src/lookup/interaction.rs b/crates/stark/src/lookup/interaction.rs index 04538aa179..0ff89ab592 100644 --- a/crates/stark/src/lookup/interaction.rs +++ b/crates/stark/src/lookup/interaction.rs @@ -3,7 +3,10 @@ use core::fmt::{Debug, Display}; use p3_air::VirtualPairCol; use p3_field::Field; +use crate::air::InteractionScope; + /// An interaction for a lookup or a permutation argument. +#[derive(Clone)] pub struct Interaction { /// The values of the interaction. pub values: Vec>, @@ -11,6 +14,8 @@ pub struct Interaction { pub multiplicity: VirtualPairCol, /// The kind of interaction. pub kind: InteractionKind, + /// The scope of the interaction. + pub scope: InteractionScope, } /// The type of interaction for a lookup argument. @@ -64,8 +69,9 @@ impl Interaction { values: Vec>, multiplicity: VirtualPairCol, kind: InteractionKind, + scope: InteractionScope, ) -> Self { - Self { values, multiplicity, kind } + Self { values, multiplicity, kind, scope } } /// The index of the argument in the lookup table. @@ -76,7 +82,10 @@ impl Interaction { impl Debug for Interaction { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("Interaction").field("kind", &self.kind).finish_non_exhaustive() + f.debug_struct("Interaction") + .field("kind", &self.kind) + .field("scope", &self.scope) + .finish_non_exhaustive() } } diff --git a/crates/stark/src/machine.rs b/crates/stark/src/machine.rs index 4f983b7e1f..d0d85e0e4e 100644 --- a/crates/stark/src/machine.rs +++ b/crates/stark/src/machine.rs @@ -7,12 +7,12 @@ use p3_field::{AbstractExtensionField, AbstractField, Field, PrimeField32}; use p3_matrix::{dense::RowMajorMatrix, Dimensions, Matrix}; use p3_maybe_rayon::prelude::*; use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use std::{cmp::Reverse, fmt::Debug, time::Instant}; +use std::{array, cmp::Reverse, fmt::Debug, time::Instant}; use tracing::instrument; use super::{debug_constraints, Dom}; use crate::{ - air::{MachineAir, MachineProgram}, + air::{InteractionScope, MachineAir, MachineProgram}, lookup::{debug_interactions_with_all_chips, InteractionKind}, record::MachineRecord, DebugConstraintBuilder, ShardProof, VerifierConstraintFolder, @@ -34,12 +34,20 @@ pub struct StarkMachine { /// The number of public values elements that the machine uses num_pv_elts: usize, + + /// Contains a global bus. This should be true for the core machine and false otherwise. + contains_global_bus: bool, } impl StarkMachine { /// Creates a new [`StarkMachine`]. - pub const fn new(config: SC, chips: Vec, A>>, num_pv_elts: usize) -> Self { - Self { config, chips, num_pv_elts } + pub const fn new( + config: SC, + chips: Vec, A>>, + num_pv_elts: usize, + contains_global_bus: bool, + ) -> Self { + Self { config, chips, num_pv_elts, contains_global_bus } } } @@ -114,6 +122,11 @@ impl>> StarkMachine { self.num_pv_elts } + /// Returns whether the machine contains a global bus. + pub const fn contains_global_bus(&self) -> bool { + self.contains_global_bus + } + /// Returns the id of all chips in the machine that have preprocessed columns. pub fn preprocessed_chip_ids(&self) -> Vec { self.chips @@ -189,7 +202,8 @@ impl>> StarkMachine { }); // Order the chips and traces by trace size (biggest first), and get the ordering map. - named_preprocessed_traces.sort_by_key(|(_, trace)| Reverse(trace.height())); + named_preprocessed_traces + .sort_by_key(|(name, trace)| Reverse((trace.height(), name.clone()))); let pcs = self.config.pcs(); @@ -236,8 +250,20 @@ impl>> StarkMachine { &self, records: &mut [A::Record], opts: &::Config, + chips_filter: Option<&[String]>, ) { - let chips = self.chips(); + let chips = self + .chips + .iter() + .filter(|chip| { + if let Some(chips_filter) = chips_filter { + chips_filter.contains(&chip.name()) + } else { + true + } + }) + .collect::>(); + records.iter_mut().for_each(|record| { chips.iter().for_each(|chip| { tracing::debug_span!("chip dependencies", chip = chip.name()).in_scope(|| { @@ -268,12 +294,16 @@ impl>> StarkMachine { SC::Challenger: Clone, A: for<'a> Air>, { + let contains_global_bus = self.contains_global_bus(); + // Observe the preprocessed commitment. vk.observe_into(challenger); tracing::debug_span!("observe challenges for all shards").in_scope(|| { - proof.shard_proofs.iter().for_each(|proof| { - challenger.observe(proof.commitment.main_commit.clone()); - challenger.observe_slice(&proof.public_values[0..self.num_pv_elts()]); + proof.shard_proofs.iter().for_each(|shard_proof| { + if contains_global_bus { + challenger.observe(shard_proof.commitment.global_main_commit.clone()); + } + challenger.observe_slice(&shard_proof.public_values[0..self.num_pv_elts()]); }); }); @@ -282,6 +312,15 @@ impl>> StarkMachine { return Err(MachineVerificationError::EmptyProof); } + // Obtain the challenges used for the global permutation argument. + let global_permutation_challenges: [SC::Challenge; 2] = array::from_fn(|_| { + if contains_global_bus { + challenger.sample_ext_element() + } else { + SC::Challenge::zero() + } + }); + tracing::debug_span!("verify shard proofs").in_scope(|| { for (i, shard_proof) in proof.shard_proofs.iter().enumerate() { tracing::debug_span!("verifying shard", shard = i).in_scope(|| { @@ -293,6 +332,7 @@ impl>> StarkMachine { &chips, &mut challenger.clone(), shard_proof, + &global_permutation_challenges, ) .map_err(MachineVerificationError::InvalidShardProof) })?; @@ -304,13 +344,30 @@ impl>> StarkMachine { // Verify the cumulative sum is 0. tracing::debug_span!("verify cumulative sum is 0").in_scope(|| { let mut sum = SC::Challenge::zero(); - for proof in proof.shard_proofs.iter() { - sum += proof.cumulative_sum(); + let mut local_err = None; + for (shard_num, proof) in proof.shard_proofs.iter().enumerate() { + sum += proof.cumulative_sum(InteractionScope::Global); + if !proof.cumulative_sum(InteractionScope::Local).is_zero() { + local_err = Some(MachineVerificationError::NonZeroCumulativeSum( + InteractionScope::Local, + shard_num + 1, + )); + break; + } } - match sum.is_zero() { - true => Ok(()), - false => Err(MachineVerificationError::NonZeroCumulativeSum), + + if let Some(err) = local_err { + return Err(err); + } + + if !sum.is_zero() { + return Err(MachineVerificationError::NonZeroCumulativeSum( + InteractionScope::Global, + 0, + )); } + + Ok(()) }) } @@ -327,13 +384,18 @@ impl>> StarkMachine { { tracing::debug!("checking constraints for each shard"); - // Obtain the challenges used for the permutation argument. + // Obtain the challenges used for the global permutation argument. let mut permutation_challenges: Vec = Vec::new(); for _ in 0..2 { permutation_challenges.push(challenger.sample_ext_element()); } - let mut cumulative_sum = SC::Challenge::zero(); + // Obtain the challenges used for the local permutation argument. + for _ in 0..2 { + permutation_challenges.push(challenger.sample_ext_element()); + } + + let mut global_cumulative_sum = SC::Challenge::zero(); for shard in records.iter() { // Filter the chips based on what is used. let chips = self.shard_chips(shard).collect::>(); @@ -357,19 +419,31 @@ impl>> StarkMachine { .par_iter() .zip(traces.par_iter_mut()) .map(|(chip, (main_trace, pre_trace))| { - let perm_trace = chip.generate_permutation_trace( + let (trace, global_sum, local_sum) = chip.generate_permutation_trace( *pre_trace, main_trace, &permutation_challenges, ); - let cumulative_sum = - perm_trace.row_slice(main_trace.height() - 1).last().copied().unwrap(); - (perm_trace, cumulative_sum) + (trace, [global_sum, local_sum]) }) .unzip_into_vecs(&mut permutation_traces, &mut cumulative_sums); }); - cumulative_sum += cumulative_sums.iter().copied().sum::(); + global_cumulative_sum += + cumulative_sums.iter().map(|sum| sum[0]).sum::(); + + let local_cumulative_sum = + cumulative_sums.iter().map(|sum| sum[1]).sum::(); + if !local_cumulative_sum.is_zero() { + debug_interactions_with_all_chips::( + self, + pk, + &[shard.clone()], + InteractionKind::all_kinds(), + InteractionScope::Local, + ); + panic!("Local cumulative sum is not zero"); + } // Compute some statistics. for i in 0..chips.len() { @@ -399,7 +473,8 @@ impl>> StarkMachine { &traces[i].0, &permutation_traces[i], &permutation_challenges, - shard.public_values(), + &shard.public_values(), + &cumulative_sums[i], ); } }); @@ -407,17 +482,16 @@ impl>> StarkMachine { tracing::info!("Constraints verified successfully"); - println!("Cumulative sum: {cumulative_sum}"); - - // If the cumulative sum is not zero, debug the interactions. - if !cumulative_sum.is_zero() { + // If the global cumulative sum is not zero, debug the interactions. + if !global_cumulative_sum.is_zero() { debug_interactions_with_all_chips::( self, pk, &records, InteractionKind::all_kinds(), + InteractionScope::Global, ); - panic!("Cumulative sum is not zero"); + panic!("Global cumulative sum is not zero"); } } } @@ -429,7 +503,7 @@ pub enum MachineVerificationError { /// An error occurred during the verification of a global proof. InvalidGlobalProof(VerificationError), /// The cumulative sum is non-zero. - NonZeroCumulativeSum, + NonZeroCumulativeSum(InteractionScope, usize), /// The public values digest is invalid. InvalidPublicValuesDigest, /// The debug interactions failed. @@ -458,8 +532,8 @@ impl Debug for MachineVerificationError { MachineVerificationError::InvalidGlobalProof(e) => { write!(f, "Invalid global proof: {:?}", e) } - MachineVerificationError::NonZeroCumulativeSum => { - write!(f, "Non-zero cumulative sum") + MachineVerificationError::NonZeroCumulativeSum(scope, shard) => { + write!(f, "Non-zero cumulative sum. Scope: {}, Shard: {}", scope, shard) } MachineVerificationError::InvalidPublicValuesDigest => { write!(f, "Invalid public values digest") diff --git a/crates/stark/src/permutation.rs b/crates/stark/src/permutation.rs index 583cb80641..950dc55409 100644 --- a/crates/stark/src/permutation.rs +++ b/crates/stark/src/permutation.rs @@ -1,19 +1,28 @@ use std::borrow::Borrow; +use hashbrown::HashMap; use itertools::Itertools; use p3_air::{ExtensionBuilder, PairBuilder}; -use p3_field::{AbstractExtensionField, AbstractField, ExtensionField, Field, Powers, PrimeField}; +use p3_field::{AbstractExtensionField, AbstractField, ExtensionField, Field, PrimeField}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; use p3_maybe_rayon::prelude::*; use rayon_scan::ScanParallelIterator; +use strum::IntoEnumIterator; -use crate::{air::MultiTableAirBuilder, lookup::Interaction}; +use crate::{ + air::{InteractionScope, MultiTableAirBuilder}, + lookup::Interaction, +}; /// Computes the width of the permutation trace. #[inline] #[must_use] pub const fn permutation_trace_width(num_interactions: usize, batch_size: usize) -> usize { - num_interactions.div_ceil(batch_size) + 1 + if num_interactions == 0 { + 0 + } else { + num_interactions.div_ceil(batch_size) + 1 + } } /// Populates a permutation row. @@ -26,10 +35,14 @@ pub fn populate_permutation_row>( main_row: &[F], sends: &[Interaction], receives: &[Interaction], - alpha: EF, - betas: Powers, + random_elements: &[EF], batch_size: usize, ) { + let alpha = random_elements[0]; + + // Generate the RLC elements to uniquely identify each item in the looked up tuple. + let betas = random_elements[1].powers(); + let interaction_chunks = &sends .iter() .map(|int| (int, true)) @@ -60,6 +73,50 @@ pub fn populate_permutation_row>( } } +/// Returns the sends, receives, and permutation trace width grouped by scope. +#[allow(clippy::type_complexity)] +pub fn get_grouped_maps( + sends: &[Interaction], + receives: &[Interaction], + batch_size: usize, +) -> ( + HashMap>>, + HashMap>>, + HashMap, +) { + // Create a hashmap of scope -> vec. + let mut sends = sends.to_vec(); + sends.sort_by_key(|k| k.scope); + let grouped_sends: HashMap<_, _> = sends + .iter() + .chunk_by(|int| int.scope) + .into_iter() + .map(|(k, values)| (k, values.cloned().collect_vec())) + .collect(); + + // Create a hashmap of scope -> vec. + let mut receives = receives.to_vec(); + receives.sort_by_key(|k| k.scope); + let grouped_receives: HashMap<_, _> = receives + .iter() + .chunk_by(|int| int.scope) + .into_iter() + .map(|(k, values)| (k, values.cloned().collect_vec())) + .collect(); + + // Create a hashmap of scope -> permutation trace width. + let grouped_widths = InteractionScope::iter() + .map(|scope| { + let empty_vec = vec![]; + let sends = grouped_sends.get(&scope).unwrap_or(&empty_vec); + let receives = grouped_receives.get(&scope).unwrap_or(&empty_vec); + (scope, permutation_trace_width(sends.len() + receives.len(), batch_size)) + }) + .collect(); + + (grouped_sends, grouped_receives, grouped_widths) +} + /// Generates the permutation trace for the given chip and main trace based on a variant of `LogUp`. /// /// The permutation trace has `(N+1)*EF::NUM_COLS` columns, where N is the number of interactions in @@ -71,81 +128,109 @@ pub fn generate_permutation_trace>( main: &RowMajorMatrix, random_elements: &[EF], batch_size: usize, -) -> RowMajorMatrix { - // Generate the RLC elements to uniquely identify each interaction. - let alpha = random_elements[0]; - - // Generate the RLC elements to uniquely identify each item in the looked up tuple. - let betas = random_elements[1].powers(); +) -> (RowMajorMatrix, EF, EF) { + let (grouped_sends, grouped_receives, grouped_widths) = + get_grouped_maps(sends, receives, batch_size); - // Iterate over the rows of the main trace to compute the permutation trace values. In - // particular, for each row i, interaction j, and columns c_0, ..., c_{k-1} we compute the sum: - // - // permutation_trace_values[i][j] = \alpha^j + \sum_k \beta^k * f_{i, c_k} - // - // where f_{i, c_k} is the value at row i for column c_k. The computed value is essentially a - // fingerprint for the interaction. - let permutation_trace_width = permutation_trace_width(sends.len() + receives.len(), batch_size); let height = main.height(); + let permutation_trace_width = grouped_widths.values().sum::(); let mut permutation_trace = RowMajorMatrix::new( vec![EF::zero(); permutation_trace_width * height], permutation_trace_width, ); - // Compute the permutation trace values in parallel. - match preprocessed { - Some(prep) => { - permutation_trace - .par_rows_mut() - .zip_eq(prep.par_row_slices()) - .zip_eq(main.par_row_slices()) - .for_each(|((row, prep_row), main_row)| { - populate_permutation_row( - row, - prep_row, - main_row, - sends, - receives, - alpha, - betas.clone(), - batch_size, - ); - }); + let mut global_cumulative_sum = EF::zero(); + let mut local_cumulative_sum = EF::zero(); + + for scope in InteractionScope::iter() { + let empty_vec = vec![]; + let sends = grouped_sends.get(&scope).unwrap_or(&empty_vec); + let receives = grouped_receives.get(&scope).unwrap_or(&empty_vec); + + if sends.is_empty() && receives.is_empty() { + continue; } - None => { - permutation_trace.par_rows_mut().zip_eq(main.par_row_slices()).for_each( - |(row, main_row)| { - populate_permutation_row( - row, - &[], - main_row, - sends, - receives, - alpha, - betas.clone(), - batch_size, - ); - }, - ); + + let random_elements = match scope { + InteractionScope::Global => &random_elements[0..2], + InteractionScope::Local => &random_elements[2..4], + }; + + let row_range = match scope { + InteractionScope::Global => { + 0..*grouped_widths.get(&InteractionScope::Global).expect("Expected global scope") + } + InteractionScope::Local => { + let global_perm_width = + *grouped_widths.get(&InteractionScope::Global).expect("Expected global scope"); + let local_perm_width = + *grouped_widths.get(&InteractionScope::Local).expect("Expected local scope"); + global_perm_width..global_perm_width + local_perm_width + } + }; + + // Compute the permutation trace values in parallel. + match preprocessed { + Some(prep) => { + permutation_trace + .par_rows_mut() + .zip_eq(prep.par_row_slices()) + .zip_eq(main.par_row_slices()) + .for_each(|((row, prep_row), main_row)| { + populate_permutation_row( + &mut row[row_range.start..row_range.end], + prep_row, + main_row, + sends, + receives, + random_elements, + batch_size, + ); + }); + } + None => { + permutation_trace.par_rows_mut().zip_eq(main.par_row_slices()).for_each( + |(row, main_row)| { + populate_permutation_row( + &mut row[row_range.start..row_range.end], + &[], + main_row, + sends, + receives, + random_elements, + batch_size, + ); + }, + ); + } } - } - let zero = EF::zero(); - let cumulative_sums = permutation_trace - .par_rows_mut() - .map(|row| row[0..permutation_trace_width - 1].iter().copied().sum::()) - .collect::>(); + let zero = EF::zero(); + let cumulative_sums = permutation_trace + .par_rows_mut() + .map(|row| row[row_range.start..row_range.end - 1].iter().copied().sum::()) + .collect::>(); - let cumulative_sums = - cumulative_sums.into_par_iter().scan(|a, b| *a + *b, zero).collect::>(); + let cumulative_sums = + cumulative_sums.into_par_iter().scan(|a, b| *a + *b, zero).collect::>(); - permutation_trace.par_rows_mut().zip_eq(cumulative_sums.into_par_iter()).for_each( - |(row, cumulative_sum)| { - *row.last_mut().unwrap() = cumulative_sum; - }, - ); + match scope { + InteractionScope::Global => { + global_cumulative_sum = *cumulative_sums.last().unwrap(); + } + InteractionScope::Local => { + local_cumulative_sum = *cumulative_sums.last().unwrap(); + } + } - permutation_trace + permutation_trace.par_rows_mut().zip_eq(cumulative_sums.clone().into_par_iter()).for_each( + |(row, cumulative_sum)| { + row[row_range.end - 1] = cumulative_sum; + }, + ); + } + + (permutation_trace, global_cumulative_sum, local_cumulative_sum) } /// Evaluates the permutation constraints for the given chip. @@ -154,7 +239,8 @@ pub fn generate_permutation_trace>( /// - The running sum column starts at zero. /// - That the RLC per interaction is computed correctly. /// - The running sum column ends at the (currently) given cumalitive sum. -pub fn eval_permutation_constraints( +#[allow(clippy::too_many_lines)] +pub fn eval_permutation_constraints<'a, F, AB>( sends: &[Interaction], receives: &[Interaction], batch_size: usize, @@ -162,14 +248,18 @@ pub fn eval_permutation_constraints( ) where F: Field, AB::EF: ExtensionField, - AB: MultiTableAirBuilder + PairBuilder, + AB: MultiTableAirBuilder<'a, F = F> + PairBuilder, + AB: 'a, { + let (grouped_sends, grouped_receives, grouped_widths) = + get_grouped_maps(sends, receives, batch_size); + // Get the permutation challenges. let permutation_challenges = builder.permutation_randomness(); - let (alpha, beta): (AB::ExprEF, AB::ExprEF) = - (permutation_challenges[0].into(), permutation_challenges[1].into()); - - // Get the preprocssed, main, and permutation trace. + let random_elements: Vec = + permutation_challenges.iter().map(|x| (*x).into()).collect(); + let cumulative_sums: Vec = + builder.cumulative_sums().iter().map(|x| (*x).into()).collect(); let preprocessed = builder.preprocessed(); let main = builder.main(); let perm = builder.permutation().to_row_major_matrix(); @@ -184,84 +274,127 @@ pub fn eval_permutation_constraints( let perm_next = perm.row_slice(1); let perm_next: &[AB::VarEF] = (*perm_next).borrow(); - // Ensure that each batch sum m_i/f_i is computed correctly. - let interaction_chunks = &sends - .iter() - .map(|int| (int, true)) - .chain(receives.iter().map(|int| (int, false))) - .chunks(batch_size); - // Assert that the permutation trace width is correct. - let expected_perm_width = permutation_trace_width(sends.len() + receives.len(), batch_size); + let expected_perm_width = grouped_widths.values().sum::(); if perm_width != expected_perm_width { panic!( "permutation trace width is incorrect: expected {expected_perm_width}, got {perm_width}", ); } - // Assert that the i-eth entry is equal to the sum_i m_i/rlc_i by constraints: - // entry * \prod_i rlc_i = \sum_i m_i * \prod_{j!=i} rlc_j over all columns of the permutation - // trace except the last column. - for (entry, chunk) in perm_local[0..perm_local.len() - 1].iter().zip(interaction_chunks) { - // First, we calculate the random linear combinations and multiplicities with the correct - // sign depending on wetther the interaction is a send or a recieve. - let mut rlcs: Vec = Vec::with_capacity(batch_size); - let mut multiplicities: Vec = Vec::with_capacity(batch_size); - for (interaction, is_send) in chunk { - let mut rlc = alpha.clone(); - let mut betas = beta.powers(); - - rlc += betas.next().unwrap() - * AB::ExprEF::from_canonical_usize(interaction.argument_index()); - for (field, beta) in interaction.values.iter().zip(betas.clone()) { - let elem = field.apply::(&preprocessed_local, main_local); - rlc += beta * elem; + for scope in InteractionScope::iter() { + let random_elements = match scope { + InteractionScope::Global => &random_elements[0..2], + InteractionScope::Local => &random_elements[2..4], + }; + + let (alpha, beta) = (&random_elements[0], &random_elements[1]); + + let perm_local = match scope { + InteractionScope::Global => &perm_local[0..*grouped_widths.get(&scope).unwrap()], + InteractionScope::Local => { + let global_perm_width = *grouped_widths.get(&InteractionScope::Global).unwrap(); + &perm_local + [global_perm_width..global_perm_width + *grouped_widths.get(&scope).unwrap()] + } + }; + + let perm_next = match scope { + InteractionScope::Global => &perm_next[0..*grouped_widths.get(&scope).unwrap()], + InteractionScope::Local => { + let global_perm_width = *grouped_widths.get(&InteractionScope::Global).unwrap(); + &perm_next + [global_perm_width..global_perm_width + *grouped_widths.get(&scope).unwrap()] } - rlcs.push(rlc); - - let send_factor = if is_send { AB::F::one() } else { -AB::F::one() }; - multiplicities.push( - interaction - .multiplicity - .apply::(&preprocessed_local, main_local) - * send_factor, - ); + }; + + let empty_vec = vec![]; + let sends = grouped_sends.get(&scope).unwrap_or(&empty_vec); + let receives = grouped_receives.get(&scope).unwrap_or(&empty_vec); + + if sends.is_empty() && receives.is_empty() { + continue; } - // Now we can calculate the numerator and denominator of the combined batch. - let mut product = AB::ExprEF::one(); - let mut numerator = AB::ExprEF::zero(); - for (i, (m, rlc)) in multiplicities.into_iter().zip(rlcs.iter()).enumerate() { - // Calculate the running product of all rlcs. - product *= rlc.clone(); - - // Calculate the product of all but the current rlc. - let mut all_but_current = AB::ExprEF::one(); - for other_rlc in rlcs.iter().enumerate().filter(|(j, _)| i != *j).map(|(_, rlc)| rlc) { - all_but_current *= other_rlc.clone(); + // Ensure that each batch sum m_i/f_i is computed correctly. + let interaction_chunks = &sends + .iter() + .map(|int| (int, true)) + .chain(receives.iter().map(|int| (int, false))) + .chunks(batch_size); + + // Assert that the i-eth entry is equal to the sum_i m_i/rlc_i by constraints: + // entry * \prod_i rlc_i = \sum_i m_i * \prod_{j!=i} rlc_j over all columns of the permutation + // trace except the last column. + for (entry, chunk) in perm_local[0..perm_local.len() - 1].iter().zip(interaction_chunks) { + // First, we calculate the random linear combinations and multiplicities with the correct + // sign depending on wetther the interaction is a send or a recieve. + let mut rlcs: Vec = Vec::with_capacity(batch_size); + let mut multiplicities: Vec = Vec::with_capacity(batch_size); + for (interaction, is_send) in chunk { + let mut rlc = alpha.clone(); + let mut betas = beta.powers(); + + rlc += betas.next().unwrap() + * AB::ExprEF::from_canonical_usize(interaction.argument_index()); + for (field, beta) in interaction.values.iter().zip(betas.clone()) { + let elem = field.apply::(&preprocessed_local, main_local); + rlc += beta * elem; + } + rlcs.push(rlc); + + let send_factor = if is_send { AB::F::one() } else { -AB::F::one() }; + multiplicities.push( + interaction + .multiplicity + .apply::(&preprocessed_local, main_local) + * send_factor, + ); + } + + // Now we can calculate the numerator and denominator of the combined batch. + let mut product = AB::ExprEF::one(); + let mut numerator = AB::ExprEF::zero(); + for (i, (m, rlc)) in multiplicities.into_iter().zip(rlcs.iter()).enumerate() { + // Calculate the running product of all rlcs. + product *= rlc.clone(); + + // Calculate the product of all but the current rlc. + let mut all_but_current = AB::ExprEF::one(); + for other_rlc in + rlcs.iter().enumerate().filter(|(j, _)| i != *j).map(|(_, rlc)| rlc) + { + all_but_current *= other_rlc.clone(); + } + numerator += AB::ExprEF::from_base(m) * all_but_current; } - numerator += AB::ExprEF::from_base(m) * all_but_current; + + // Finally, assert that the entry is equal to the numerator divided by the product. + let entry: AB::ExprEF = (*entry).into(); + builder.assert_eq_ext(product.clone() * entry.clone(), numerator); } - // Finally, assert that the entry is equal to the numerator divided by the product. - let entry: AB::ExprEF = (*entry).into(); - builder.assert_eq_ext(product.clone() * entry.clone(), numerator); - } + // Compute the running local and next permutation sums. + let perm_width = grouped_widths.get(&scope).unwrap(); + let sum_local = + perm_local[..perm_width - 1].iter().map(|x| (*x).into()).sum::(); + let sum_next = perm_next[..perm_width - 1].iter().map(|x| (*x).into()).sum::(); + let phi_local: AB::ExprEF = (*perm_local.last().unwrap()).into(); + let phi_next: AB::ExprEF = (*perm_next.last().unwrap()).into(); - // Compute the running local and next permutation sums. - let cumulative_sum = builder.cumulative_sum(); - let sum_local = perm_local[..perm_width - 1].iter().map(|x| (*x).into()).sum::(); - let sum_next = perm_next[..perm_width - 1].iter().map(|x| (*x).into()).sum::(); - let phi_local: AB::ExprEF = (*perm_local.last().unwrap()).into(); - let phi_next: AB::ExprEF = (*perm_next.last().unwrap()).into(); + // Assert that cumulative sum is initialized to `phi_local` on the first row. + builder.when_first_row().assert_eq_ext(phi_local.clone(), sum_local); - // Assert that cumulative sum is initialized to `phi_local` on the first row. - builder.when_first_row().assert_eq_ext(phi_local.clone(), sum_local); + // Assert that the cumulative sum is constrained to `phi_next - phi_local` on the transition + // rows. + builder.when_transition().assert_eq_ext(phi_next - phi_local.clone(), sum_next); - // Assert that the cumulative sum is constrained to `phi_next - phi_local` on the transition - // rows. - builder.when_transition().assert_eq_ext(phi_next - phi_local.clone(), sum_next); + // Assert that the cumulative sum is constrained to `phi_local` on the last row. + let cumulative_sum = match scope { + InteractionScope::Global => &cumulative_sums[0], + InteractionScope::Local => &cumulative_sums[1], + }; - // Assert that the cumulative sum is constrained to `phi_local` on the last row. - builder.when_last_row().assert_eq_ext(*perm_local.last().unwrap(), cumulative_sum); + builder.when_last_row().assert_eq_ext(*perm_local.last().unwrap(), cumulative_sum.clone()); + } } diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index c4dc7656e6..35c98eaa30 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -1,9 +1,10 @@ use core::fmt::Display; +use hashbrown::HashMap; use itertools::Itertools; use serde::{de::DeserializeOwned, Serialize}; -use std::{cmp::Reverse, error::Error, time::Instant}; +use std::{array, cmp::Reverse, error::Error, time::Instant}; -use crate::{AirOpenedValues, ChipOpenedValues, ShardOpenedValues}; +use crate::{air::InteractionScope, AirOpenedValues, ChipOpenedValues, ShardOpenedValues}; use p3_air::Air; use p3_challenger::{CanObserve, FieldChallenger}; use p3_commit::{Pcs, PolynomialSpace}; @@ -17,17 +18,26 @@ use super::{ VerifierConstraintFolder, }; use crate::{ - air::MachineAir, lookup::InteractionBuilder, opts::SP1CoreOpts, record::MachineRecord, - Challenger, DebugConstraintBuilder, MachineChip, MachineProof, PackedChallenge, PcsProverData, - ProverConstraintFolder, ShardCommitment, ShardMainData, ShardProof, StarkVerifyingKey, + air::MachineAir, config::ZeroCommitment, lookup::InteractionBuilder, opts::SP1CoreOpts, + record::MachineRecord, Challenger, DebugConstraintBuilder, MachineChip, MachineProof, + PackedChallenge, PcsProverData, ProverConstraintFolder, ShardCommitment, ShardMainData, + ShardProof, StarkVerifyingKey, }; +/// A merged prover data item from the global and local prover data. +pub struct MergedProverDataItem<'a, M> { + /// The trace. + pub trace: &'a M, + /// The main data index. + pub main_data_idx: usize, +} + /// An algorithmic & hardware independent prover implementation for any [`MachineAir`]. pub trait MachineProver>: 'static + Send + Sync { /// The type used to store the traces. - type DeviceMatrix; + type DeviceMatrix: Matrix; /// The type used to store the polynomial commitment schemes data. type DeviceProverData; @@ -48,14 +58,22 @@ pub trait MachineProver>: fn setup(&self, program: &A::Program) -> (Self::DeviceProvingKey, StarkVerifyingKey); /// Generate the main traces. - fn generate_traces(&self, record: &A::Record) -> Vec<(String, RowMajorMatrix>)> { - // Filter the chips based on what is used. + fn generate_traces( + &self, + record: &A::Record, + interaction_scope: InteractionScope, + ) -> Vec<(String, RowMajorMatrix>)> { let shard_chips = self.shard_chips(record).collect::>(); + let chips = shard_chips + .iter() + .filter(|chip| chip.commit_scope() == interaction_scope) + .collect::>(); + assert!(!chips.is_empty()); // For each chip, generate the trace. let parent_span = tracing::debug_span!("generate traces for shard"); parent_span.in_scope(|| { - shard_chips + chips .par_iter() .map(|chip| { let chip_name = chip.name(); @@ -76,7 +94,7 @@ pub trait MachineProver>: /// Commit to the main traces. fn commit( &self, - record: A::Record, + record: &A::Record, traces: Vec<(String, RowMajorMatrix>)>, ) -> ShardMainData; @@ -98,8 +116,10 @@ pub trait MachineProver>: fn open( &self, pk: &Self::DeviceProvingKey, - data: ShardMainData, + global_data: Option>, + local_data: ShardMainData, challenger: &mut SC::Challenger, + global_permutation_challenges: &[SC::Challenge], ) -> Result, Self::Error>; /// Generate a proof for the given records. @@ -147,6 +167,100 @@ pub trait MachineProver>: { self.machine().debug_constraints(pk, records, challenger); } + + /// Merge the global and local chips' sorted traces. + #[allow(clippy::type_complexity)] + fn merge_shard_traces<'a, 'b>( + &'a self, + global_traces: &'b [Self::DeviceMatrix], + global_chip_ordering: &'b HashMap, + local_traces: &'b [Self::DeviceMatrix], + local_chip_ordering: &'b HashMap, + ) -> ( + HashMap, + Vec, + Vec>, + ) + where + 'a: 'b, + { + // Get the sort order of the chips. + let global_chips = global_chip_ordering + .iter() + .sorted_by_key(|(_, &i)| i) + .map(|chip| chip.0.clone()) + .collect::>(); + let local_chips = local_chip_ordering + .iter() + .sorted_by_key(|(_, &i)| i) + .map(|chip| chip.0.clone()) + .collect::>(); + + let mut merged_chips = Vec::with_capacity(global_traces.len() + local_traces.len()); + let mut merged_prover_data = Vec::with_capacity(global_chips.len() + local_chips.len()); + + assert!(global_traces.len() == global_chips.len()); + let mut global_iter = global_traces.iter().zip(global_chips.iter()).enumerate(); + assert!(local_traces.len() == local_chips.len()); + let mut local_iter = local_traces.iter().zip(local_chips.iter()).enumerate(); + + let mut global_next = global_iter.next(); + let mut local_next = local_iter.next(); + + let mut chip_scopes = Vec::new(); + + while global_next.is_some() || local_next.is_some() { + match (global_next, local_next) { + (Some(global), Some(local)) => { + let (global_prover_data_idx, (global_trace, global_chip)) = global; + let (local_prover_data_idx, (local_trace, local_chip)) = local; + if global_trace.height() >= local_trace.height() { + merged_chips.push(global_chip.clone()); + chip_scopes.push(InteractionScope::Global); + merged_prover_data.push(MergedProverDataItem { + trace: global_trace, + main_data_idx: global_prover_data_idx, + }); + global_next = global_iter.next(); + } else { + merged_chips.push(local_chip.clone()); + chip_scopes.push(InteractionScope::Local); + merged_prover_data.push(MergedProverDataItem { + trace: local_trace, + main_data_idx: local_prover_data_idx, + }); + local_next = local_iter.next(); + } + } + (Some(global), None) => { + let (global_prover_data_idx, (global_trace, global_chip)) = global; + merged_chips.push(global_chip.clone()); + chip_scopes.push(InteractionScope::Global); + merged_prover_data.push(MergedProverDataItem { + trace: global_trace, + main_data_idx: global_prover_data_idx, + }); + global_next = global_iter.next(); + } + (None, Some(local)) => { + let (local_prover_data_idx, (local_trace, local_chip)) = local; + merged_chips.push(local_chip.clone()); + chip_scopes.push(InteractionScope::Local); + merged_prover_data.push(MergedProverDataItem { + trace: local_trace, + main_data_idx: local_prover_data_idx, + }); + local_next = local_iter.next(); + } + (None, None) => break, + } + } + + let chip_ordering = + merged_chips.iter().enumerate().map(|(i, name)| (name.clone(), i)).collect(); + + (chip_ordering, chip_scopes, merged_prover_data) + } } /// A proving key for any [`MachineAir`] that is agnostic to hardware. @@ -209,7 +323,7 @@ where fn commit( &self, - record: A::Record, + record: &A::Record, mut named_traces: Vec<(String, RowMajorMatrix>)>, ) -> ShardMainData { // Order the chips and traces by trace size (biggest first), and get the ordering map. @@ -250,15 +364,49 @@ where fn open( &self, pk: &StarkProvingKey, - mut data: ShardMainData, + global_data: Option>, + local_data: ShardMainData, challenger: &mut ::Challenger, + global_permutation_challenges: &[SC::Challenge], ) -> Result, Self::Error> { - let chips = self.machine().shard_chips_ordered(&data.chip_ordering).collect::>(); + let (global_traces, global_main_commit, global_main_data, global_chip_ordering) = + if let Some(global_data) = global_data { + let ShardMainData { + traces: global_traces, + main_commit: global_main_commit, + main_data: global_main_data, + chip_ordering: global_chip_ordering, + public_values: _, + } = global_data; + (global_traces, global_main_commit, Some(global_main_data), global_chip_ordering) + } else { + (vec![], self.config().pcs().zero_commitment(), None, HashMap::new()) + }; + + let ShardMainData { + traces: local_traces, + main_commit: local_main_commit, + main_data: local_main_data, + chip_ordering: local_chip_ordering, + public_values: local_public_values, + } = local_data; + + // Merge the chip ordering and traces from the global and local data. + let (all_chips_ordering, all_chip_scopes, all_shard_data) = self.merge_shard_traces( + &global_traces, + &global_chip_ordering, + &local_traces, + &local_chip_ordering, + ); + + let chips = self.machine().shard_chips_ordered(&all_chips_ordering).collect::>(); + + assert!(chips.len() == all_shard_data.len()); + let config = self.machine().config(); - // Get the traces. - let traces = &mut data.traces; - let degrees = traces.iter().map(|trace| trace.height()).collect::>(); + let degrees = + all_shard_data.iter().map(|shard_data| shard_data.trace.height()).collect::>(); let log_degrees = degrees.iter().map(|degree| log2_strict_usize(*degree)).collect::>(); @@ -270,13 +418,24 @@ where let trace_domains = degrees.iter().map(|degree| pcs.natural_domain_for_degree(*degree)).collect::>(); - // Obtain the challenges used for the permutation argument. - let mut permutation_challenges: Vec = Vec::new(); + // Observe the main commitment. + challenger.observe(local_main_commit.clone()); + + // Obtain the challenges used for the local permutation argument. + let mut local_permutation_challenges: Vec = Vec::new(); for _ in 0..2 { - permutation_challenges.push(challenger.sample_ext_element()); + local_permutation_challenges.push(challenger.sample_ext_element()); } + + let permutation_challenges = global_permutation_challenges + .iter() + .chain(local_permutation_challenges.iter()) + .copied() + .collect::>(); + let packed_perm_challenges = permutation_challenges .iter() + .chain(local_permutation_challenges.iter()) .map(|c| PackedChallenge::::from_f(*c)) .collect::>(); @@ -285,25 +444,24 @@ where tracing::debug_span!("generate permutation traces").in_scope(|| { chips .par_iter() - .zip(traces.par_iter_mut()) - .map(|(chip, main_trace): (&&MachineChip, _)| { + .zip(all_shard_data.par_iter()) + .map(|(chip, shard_data)| { let preprocessed_trace = pk.chip_ordering.get(&chip.name()).map(|&index| &pk.traces[index]); - let perm_trace = chip.generate_permutation_trace( + let (perm_trace, global_sum, local_sum) = chip.generate_permutation_trace( preprocessed_trace, - main_trace, + shard_data.trace, &permutation_challenges, ); - let cumulative_sum = - perm_trace.row_slice(main_trace.height() - 1).last().copied().unwrap(); - ((perm_trace, preprocessed_trace), cumulative_sum) + ((perm_trace, preprocessed_trace), [global_sum, local_sum]) }) .unzip() }); // Compute some statistics. for i in 0..chips.len() { - let trace_width = traces[i].width(); + let trace_width = all_shard_data[i].trace.width(); + let trace_height = all_shard_data[i].trace.height(); let prep_width = prep_traces[i].map_or(0, |x| x.width()); let permutation_width = permutation_traces[i].width(); let total_width = trace_width @@ -315,8 +473,8 @@ where trace_width, prep_width, permutation_width * >::D, - traces[i].height(), - total_width * traces[i].height(), + trace_height, + total_width * trace_height, ); } @@ -373,15 +531,27 @@ where quotient_domain.size() ]) }); + let scope = all_chip_scopes[i]; + let main_data = if scope == InteractionScope::Global { + global_main_data + .as_ref() + .expect("Expected global_main_data to be Some") + } else { + &local_main_data + }; let main_trace_on_quotient_domains = pcs - .get_evaluations_on_domain(&data.main_data, i, *quotient_domain) + .get_evaluations_on_domain( + main_data, + all_shard_data[i].main_data_idx, + *quotient_domain, + ) .to_row_major_matrix(); let permutation_trace_on_quotient_domains = pcs .get_evaluations_on_domain(&permutation_data, i, *quotient_domain) .to_row_major_matrix(); quotient_values( chips[i], - cumulative_sums[i], + &cumulative_sums[i], trace_domains[i], *quotient_domain, preprocessed_trace_on_quotient_domains, @@ -389,7 +559,7 @@ where permutation_trace_on_quotient_domains, &packed_perm_challenges, alpha, - &data.public_values, + &local_public_values, ) }) }) @@ -446,22 +616,61 @@ where let quotient_opening_points = (0..num_quotient_chunks).map(|_| vec![zeta]).collect::>(); - let (openings, opening_proof) = tracing::debug_span!("open multi batches").in_scope(|| { - pcs.open( - vec![ - (&pk.data, preprocessed_opening_points), - (&data.main_data, trace_opening_points.clone()), - (&permutation_data, trace_opening_points), - ("ient_data, quotient_opening_points), - ], - challenger, - ) - }); + // Split the trace_opening_points to the global and local chips. + let mut global_trace_opening_points = Vec::with_capacity(global_chip_ordering.len()); + let mut local_trace_opening_points = Vec::with_capacity(local_chip_ordering.len()); + for (i, trace_opening_point) in trace_opening_points.clone().into_iter().enumerate() { + let scope = all_chip_scopes[i]; + if scope == InteractionScope::Global { + global_trace_opening_points.push(trace_opening_point); + } else { + local_trace_opening_points.push(trace_opening_point); + } + } + + let rounds = if let Some(global_main_data) = global_main_data.as_ref() { + vec![ + (&pk.data, preprocessed_opening_points), + (global_main_data, global_trace_opening_points), + (&local_main_data, local_trace_opening_points), + (&permutation_data, trace_opening_points), + ("ient_data, quotient_opening_points), + ] + } else { + vec![ + (&pk.data, preprocessed_opening_points), + (&local_main_data, local_trace_opening_points), + (&permutation_data, trace_opening_points), + ("ient_data, quotient_opening_points), + ] + }; + + let (openings, opening_proof) = + tracing::debug_span!("open multi batches").in_scope(|| pcs.open(rounds, challenger)); // Collect the opened values for each chip. - let [preprocessed_values, main_values, permutation_values, mut quotient_values] = - openings.try_into().unwrap(); - assert!(main_values.len() == chips.len()); + let ( + preprocessed_values, + global_main_values, + local_main_values, + permutation_values, + mut quotient_values, + ) = if global_main_data.is_some() { + let [preprocessed_values, global_main_values, local_main_values, permutation_values, quotient_values] = + openings.try_into().unwrap(); + ( + preprocessed_values, + Some(global_main_values), + local_main_values, + permutation_values, + quotient_values, + ) + } else { + let [preprocessed_values, local_main_values, permutation_values, quotient_values] = + openings.try_into().unwrap(); + (preprocessed_values, None, local_main_values, permutation_values, quotient_values) + }; + let preprocessed_opened_values = preprocessed_values .into_iter() .map(|op| { @@ -470,6 +679,26 @@ where }) .collect::>(); + // Merge the global and local main values. + let mut main_values = + Vec::with_capacity(global_chip_ordering.len() + local_chip_ordering.len()); + for chip in chips.iter() { + let global_order = global_chip_ordering.get(&chip.name()); + let local_order = local_chip_ordering.get(&chip.name()); + match (global_order, local_order) { + (Some(&global_order), None) => { + let global_main_values = + global_main_values.as_ref().expect("Global main values should be Some"); + main_values.push(global_main_values[global_order].clone()); + } + (None, Some(&local_order)) => { + main_values.push(local_main_values[local_order].clone()); + } + _ => unreachable!(), + } + } + assert!(main_values.len() == chips.len()); + let main_opened_values = main_values .into_iter() .map(|op| { @@ -484,6 +713,7 @@ where AirOpenedValues { local, next } }) .collect::>(); + let mut quotient_opened_values = Vec::with_capacity(log_quotient_degrees.len()); for log_quotient_degree in log_quotient_degrees.iter() { let degree = 1 << *log_quotient_degree; @@ -498,7 +728,7 @@ where .zip_eq(cumulative_sums) .zip_eq(log_degrees.iter()) .enumerate() - .map(|(i, ((((main, permutation), quotient), cumulative_sum), log_degree))| { + .map(|(i, ((((main, permutation), quotient), cumulative_sums), log_degree))| { let preprocessed = pk .chip_ordering .get(&chips[i].name()) @@ -509,7 +739,8 @@ where main, permutation, quotient, - cumulative_sum, + global_cumulative_sum: cumulative_sums[0], + local_cumulative_sum: cumulative_sums[1], log_degree: *log_degree, } }) @@ -517,14 +748,16 @@ where Ok(ShardProof:: { commitment: ShardCommitment { - main_commit: data.main_commit.clone(), + global_main_commit, + local_main_commit, permutation_commit, quotient_commit, }, opened_values: ShardOpenedValues { chips: opened_values }, opening_proof, - chip_ordering: data.chip_ordering, - public_values: data.public_values, + chip_ordering: all_chips_ordering, + chip_scopes: all_chip_scopes, + public_values: local_public_values, }) } @@ -543,33 +776,70 @@ where where A: for<'a> Air, SC::Challenge>>, { - // Generate dependencies. - self.machine().generate_dependencies(&mut records, &opts); - // Observe the preprocessed commitment. pk.observe_into(challenger); - // Generate and commit the traces for each shard. - let shard_data = records - .into_par_iter() + let contains_global_bus = self.machine().contains_global_bus(); + + if contains_global_bus { + // Generate dependencies. + self.machine().generate_dependencies(&mut records, &opts, None); + } + + // Generate and commit the global traces for each shard. + let global_data = records + .par_iter() .map(|record| { - let named_traces = self.generate_traces(&record); - self.commit(record, named_traces) + if contains_global_bus { + let global_named_traces = + self.generate_traces(record, InteractionScope::Global); + Some(self.commit(record, global_named_traces)) + } else { + None + } }) .collect::>(); // Observe the challenges for each segment. tracing::debug_span!("observing all challenges").in_scope(|| { - shard_data.iter().for_each(|data| { - challenger.observe(data.main_commit.clone()); - challenger.observe_slice(&data.public_values[0..self.num_pv_elts()]); + global_data.iter().zip_eq(records.iter()).for_each(|(global_data, record)| { + if contains_global_bus { + challenger.observe( + global_data + .as_ref() + .expect("must have a global commitment") + .main_commit + .clone(), + ); + } + challenger.observe_slice(&record.public_values::()[0..self.num_pv_elts()]); }); }); + // Obtain the challenges used for the global permutation argument. + let global_permutation_challenges: [SC::Challenge; 2] = array::from_fn(|_| { + if contains_global_bus { + challenger.sample_ext_element() + } else { + SC::Challenge::zero() + } + }); + let shard_proofs = tracing::info_span!("prove_shards").in_scope(|| { - shard_data + global_data .into_par_iter() - .map(|data| self.open(pk, data, &mut challenger.clone())) + .zip_eq(records.par_iter()) + .map(|(global_shard_data, record)| { + let local_named_traces = self.generate_traces(record, InteractionScope::Local); + let local_shard_data = self.commit(record, local_named_traces); + self.open( + pk, + global_shard_data, + local_shard_data, + &mut challenger.clone(), + &global_permutation_challenges, + ) + }) .collect::, _>>() })?; diff --git a/crates/stark/src/quotient.rs b/crates/stark/src/quotient.rs index 8bf903f77a..b22651e946 100644 --- a/crates/stark/src/quotient.rs +++ b/crates/stark/src/quotient.rs @@ -18,7 +18,7 @@ use super::{ #[allow(clippy::too_many_lines)] pub fn quotient_values( chip: &Chip, A>, - cumulative_sum: SC::Challenge, + cumulative_sums: &[SC::Challenge], trace_domain: Domain, quotient_domain: Domain, preprocessed_trace_on_quotient_domain: Mat, @@ -120,6 +120,12 @@ where .collect(); let accumulator = PackedChallenge::::zero(); + + let packed_cumulative_sums = cumulative_sums + .iter() + .map(|c| PackedChallenge::::from_f(*c)) + .collect::>(); + let mut folder = ProverConstraintFolder { preprocessed: VerticalPair::new( RowMajorMatrixView::new_row(&prep_local), @@ -134,7 +140,7 @@ where RowMajorMatrixView::new_row(&perm_next), ), perm_challenges, - cumulative_sum, + cumulative_sums: &packed_cumulative_sums, is_first_row, is_last_row, is_transition, diff --git a/crates/stark/src/types.rs b/crates/stark/src/types.rs index 9652ea9e84..6b2506bbd1 100644 --- a/crates/stark/src/types.rs +++ b/crates/stark/src/types.rs @@ -8,6 +8,7 @@ use p3_matrix::{dense::RowMajorMatrixView, stack::VerticalPair}; use serde::{Deserialize, Serialize}; use super::{Challenge, Com, OpeningProof, StarkGenericConfig, Val}; +use crate::air::InteractionScope; pub type QuotientOpenedValues = Vec; @@ -33,7 +34,8 @@ impl ShardMainData { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ShardCommitment { - pub main_commit: C, + pub global_main_commit: C, + pub local_main_commit: C, pub permutation_commit: C, pub quotient_commit: C, } @@ -54,7 +56,8 @@ pub struct ChipOpenedValues { pub main: AirOpenedValues, pub permutation: AirOpenedValues, pub quotient: Vec>, - pub cumulative_sum: T, + pub global_cumulative_sum: T, + pub local_cumulative_sum: T, pub log_degree: usize, } @@ -75,6 +78,7 @@ pub struct ShardProof { pub opened_values: ShardOpenedValues>, pub opening_proof: OpeningProof, pub chip_ordering: HashMap, + pub chip_scopes: Vec, pub public_values: Vec>, } @@ -99,8 +103,15 @@ impl AirOpenedValues { } impl ShardProof { - pub fn cumulative_sum(&self) -> Challenge { - self.opened_values.chips.iter().map(|c| c.cumulative_sum).sum() + pub fn cumulative_sum(&self, scope: InteractionScope) -> Challenge { + self.opened_values + .chips + .iter() + .map(|c| match scope { + InteractionScope::Global => c.global_cumulative_sum, + InteractionScope::Local => c.local_cumulative_sum, + }) + .sum() } pub fn log_degree_cpu(&self) -> usize { @@ -112,12 +123,16 @@ impl ShardProof { self.chip_ordering.contains_key("CPU") } - pub fn contains_memory_init(&self) -> bool { - self.chip_ordering.contains_key("MemoryInit") + pub fn contains_global_memory_init(&self) -> bool { + self.chip_ordering.contains_key("MemoryGlobalInit") } - pub fn contains_memory_finalize(&self) -> bool { - self.chip_ordering.contains_key("MemoryFinalize") + pub fn contains_global_memory_finalize(&self) -> bool { + self.chip_ordering.contains_key("MemoryGlobalFinalize") + } + + pub fn contains_global_main_commitment(&self) -> bool { + self.chip_scopes.contains(&InteractionScope::Global) } } diff --git a/crates/stark/src/verifier.rs b/crates/stark/src/verifier.rs index 43bbf61798..30bec21f85 100644 --- a/crates/stark/src/verifier.rs +++ b/crates/stark/src/verifier.rs @@ -5,17 +5,21 @@ use std::{ }; use itertools::Itertools; +use num_traits::cast::ToPrimitive; use p3_air::{Air, BaseAir}; use p3_challenger::{CanObserve, FieldChallenger}; use p3_commit::{LagrangeSelectors, Pcs, PolynomialSpace}; -use p3_field::{AbstractExtensionField, AbstractField}; +use p3_field::{AbstractExtensionField, AbstractField, Field}; use super::{ folder::VerifierConstraintFolder, types::{AirOpenedValues, ChipOpenedValues, ShardCommitment, ShardProof}, Domain, OpeningError, StarkGenericConfig, StarkVerifyingKey, Val, }; -use crate::{air::MachineAir, MachineChip}; +use crate::{ + air::{InteractionScope, MachineAir}, + MachineChip, +}; /// A verifier for a collection of air chips. pub struct Verifier(PhantomData, PhantomData); @@ -29,6 +33,7 @@ impl>> Verifier { chips: &[&MachineChip], challenger: &mut SC::Challenger, proof: &ShardProof, + global_permutation_challenges: &[SC::Challenge], ) -> Result<(), VerificationError> where A: for<'a> Air>, @@ -40,6 +45,7 @@ impl>> Verifier { opened_values, opening_proof, chip_ordering, + chip_scopes, public_values, .. } = proof; @@ -50,6 +56,23 @@ impl>> Verifier { return Err(VerificationError::ChipOpeningLengthMismatch); } + // Assert that the byte multiplicities don't overflow. + let mut max_byte_lookup_mult = 0u64; + chips.iter().zip(opened_values.chips.iter()).for_each(|(chip, val)| { + max_byte_lookup_mult = max_byte_lookup_mult + .checked_add( + (chip.num_sent_byte_lookups() as u64) + .checked_mul(1u64.checked_shl(val.log_degree as u32).unwrap()) + .unwrap(), + ) + .unwrap(); + }); + + assert!( + max_byte_lookup_mult <= SC::Val::order().to_u64().unwrap(), + "Byte multiplicities overflow" + ); + let log_degrees = opened_values.chips.iter().map(|val| val.log_degree).collect::>(); let log_quotient_degrees = @@ -60,9 +83,16 @@ impl>> Verifier { .map(|log_degree| pcs.natural_domain_for_degree(1 << log_degree)) .collect::>(); - let ShardCommitment { main_commit, permutation_commit, quotient_commit } = commitment; + let ShardCommitment { + global_main_commit, + local_main_commit, + permutation_commit, + quotient_commit, + } = commitment; - let permutation_challenges = + challenger.observe(local_main_commit.clone()); + + let local_permutation_challenges = (0..2).map(|_| challenger.sample_ext_element::()).collect::>(); challenger.observe(permutation_commit.clone()); @@ -141,20 +171,48 @@ impl>> Verifier { }) .collect::>(); + // Split the main_domains_points_and_opens to the global and local chips. + let mut global_trace_points_and_openings = Vec::new(); + let mut local_trace_points_and_openings = Vec::new(); + for (i, points_and_openings) in + main_domains_points_and_opens.clone().into_iter().enumerate() + { + let scope = chip_scopes[i]; + if scope == InteractionScope::Global { + global_trace_points_and_openings.push(points_and_openings); + } else { + local_trace_points_and_openings.push(points_and_openings); + } + } + + let rounds = if !global_trace_points_and_openings.is_empty() { + vec![ + (vk.commit.clone(), preprocessed_domains_points_and_opens), + (global_main_commit.clone(), global_trace_points_and_openings), + (local_main_commit.clone(), local_trace_points_and_openings), + (permutation_commit.clone(), perm_domains_points_and_opens), + (quotient_commit.clone(), quotient_domains_points_and_opens), + ] + } else { + vec![ + (vk.commit.clone(), preprocessed_domains_points_and_opens), + (local_main_commit.clone(), local_trace_points_and_openings), + (permutation_commit.clone(), perm_domains_points_and_opens), + (quotient_commit.clone(), quotient_domains_points_and_opens), + ] + }; + config .pcs() - .verify( - vec![ - (vk.commit.clone(), preprocessed_domains_points_and_opens), - (main_commit.clone(), main_domains_points_and_opens), - (permutation_commit.clone(), perm_domains_points_and_opens), - (quotient_commit.clone(), quotient_domains_points_and_opens), - ], - opening_proof, - challenger, - ) + .verify(rounds, opening_proof, challenger) .map_err(|e| VerificationError::InvalidopeningArgument(e))?; + let permutation_challenges = global_permutation_challenges + .iter() + .chain(local_permutation_challenges.iter()) + .copied() + .collect::>(); + // Verify the constrtaint evaluations. for (chip, trace_domain, qc_domains, values) in izip!(chips.iter(), trace_domains, quotient_chunk_domains, opened_values.chips.iter(),) @@ -310,12 +368,14 @@ impl>> Verifier { next: unflatten(&opening.permutation.next), }; + let cumulative_sums = [opening.global_cumulative_sum, opening.local_cumulative_sum]; + let cumulative_sums = cumulative_sums.as_slice(); let mut folder = VerifierConstraintFolder:: { preprocessed: opening.preprocessed.view(), main: opening.main.view(), perm: perm_opening.view(), perm_challenges: permutation_challenges, - cumulative_sum: opening.cumulative_sum, + cumulative_sums, is_first_row: selectors.is_first_row, is_last_row: selectors.is_last_row, is_transition: selectors.is_transition, diff --git a/examples/Cargo.lock b/examples/Cargo.lock index 51c68a21fb..f4f019326f 100644 --- a/examples/Cargo.lock +++ b/examples/Cargo.lock @@ -5155,6 +5155,7 @@ dependencies = [ "bincode", "clap", "dirs", + "eyre", "hex", "itertools 0.13.0", "lru", @@ -5185,29 +5186,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "sp1-recursion-circuit" -version = "1.2.0" -dependencies = [ - "bincode", - "itertools 0.13.0", - "p3-air", - "p3-baby-bear", - "p3-bn254-fr", - "p3-commit", - "p3-field", - "p3-fri", - "p3-matrix", - "p3-util", - "serde", - "sp1-core-machine", - "sp1-recursion-compiler", - "sp1-recursion-core", - "sp1-recursion-derive", - "sp1-recursion-program", - "sp1-stark", -] - [[package]] name = "sp1-recursion-circuit-v2" version = "1.2.0" @@ -5215,6 +5193,7 @@ dependencies = [ "bincode", "hashbrown 0.14.5", "itertools 0.13.0", + "num-traits", "p3-air", "p3-baby-bear", "p3-bn254-fr", @@ -5234,12 +5213,10 @@ dependencies = [ "sp1-core-executor", "sp1-core-machine", "sp1-primitives", - "sp1-recursion-circuit", "sp1-recursion-compiler", "sp1-recursion-core-v2", "sp1-recursion-derive", "sp1-recursion-gnark-ffi", - "sp1-recursion-program", "sp1-stark", "stacker", "tracing", @@ -5382,36 +5359,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "sp1-recursion-program" -version = "1.2.0" -dependencies = [ - "itertools 0.13.0", - "p3-air", - "p3-baby-bear", - "p3-challenger", - "p3-commit", - "p3-dft", - "p3-field", - "p3-fri", - "p3-matrix", - "p3-maybe-rayon", - "p3-merkle-tree", - "p3-poseidon2", - "p3-symmetric", - "p3-util", - "rand", - "serde", - "sp1-core-executor", - "sp1-core-machine", - "sp1-primitives", - "sp1-recursion-compiler", - "sp1-recursion-core", - "sp1-stark", - "stacker", - "tracing", -] - [[package]] name = "sp1-sdk" version = "1.2.0" @@ -5428,6 +5375,7 @@ dependencies = [ "hashbrown 0.14.5", "hex", "indicatif", + "itertools 0.13.0", "log", "num-bigint 0.4.6", "p3-baby-bear", @@ -5465,6 +5413,7 @@ dependencies = [ "getrandom", "hashbrown 0.14.5", "itertools 0.13.0", + "num-traits", "p3-air", "p3-baby-bear", "p3-challenger", @@ -5483,6 +5432,8 @@ dependencies = [ "serde", "sp1-derive", "sp1-primitives", + "strum", + "strum_macros", "sysinfo", "tracing", ] diff --git a/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf b/examples/fibonacci/program/elf/riscv32im-succinct-zkvm-elf index 9c76358a925f19ae427c0bd213687dfdf28144e7..dcddbc9af36cbea5ca357d16a4a6cd16c48b58ba 100755 GIT binary patch delta 10950 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 delta 10938 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 diff --git a/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf b/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf index c20d62e67c4194d4787d1937f6326c0d07a6bc31..3667523ac0a0896a17786437ab5cc4beb4b70b8f 100755 GIT binary patch literal 1153004 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/f*Ph5@u4L=t7^rfGCDtw0zvA!N{%Xbf6 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૒p^M>HFJl;K3|`cea^b8|0unT^)b)C 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

g;?&H3}dW7ep#rpLTe{Esy~ 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 z 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 z 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ℜ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

Vq3pYah*!P+rzXsw)Gi- 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 z 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 literal 1258964 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

huY6PNS8R<#-?9&9TJsmOcQ4Ge$1k+znipo~ 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

{ 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ℜ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≥y1V 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 From 2ab384bf3629b7be14e5e891ea3716770905e889 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Wed, 18 Sep 2024 15:04:49 -0700 Subject: [PATCH 182/268] feat: fixed heights for new chips (#1523) --- crates/core/machine/src/memory/local.rs | 2 +- crates/core/machine/src/riscv/mod.rs | 18 +++++- crates/core/machine/src/riscv/shape.rs | 26 ++++++--- crates/core/machine/src/utils/prove.rs | 14 ++--- crates/prover/Cargo.toml | 4 ++ crates/prover/merkle_tree.bin | Bin 0 -> 2097136 bytes crates/prover/scripts/build_compress_vks.rs | 55 ++++++++++++++++++ crates/prover/src/lib.rs | 14 +++-- crates/prover/vk_map.bin | Bin 0 -> 725128 bytes .../recursion/circuit-v2/src/merkle_tree.rs | 5 +- crates/stark/src/prover.rs | 4 +- 11 files changed, 114 insertions(+), 28 deletions(-) create mode 100644 crates/prover/merkle_tree.bin create mode 100644 crates/prover/scripts/build_compress_vks.rs create mode 100644 crates/prover/vk_map.bin diff --git a/crates/core/machine/src/memory/local.rs b/crates/core/machine/src/memory/local.rs index bc272d8cac..0d8ac0b21a 100644 --- a/crates/core/machine/src/memory/local.rs +++ b/crates/core/machine/src/memory/local.rs @@ -15,7 +15,7 @@ use sp1_stark::{ InteractionKind, Word, }; -const NUM_LOCAL_MEMORY_ENTRIES_PER_ROW: usize = 2; +pub const NUM_LOCAL_MEMORY_ENTRIES_PER_ROW: usize = 3; pub(crate) const NUM_MEMORY_LOCAL_INIT_COLS: usize = size_of::>(); diff --git a/crates/core/machine/src/riscv/mod.rs b/crates/core/machine/src/riscv/mod.rs index fe023ca739..7a5f5f92f5 100644 --- a/crates/core/machine/src/riscv/mod.rs +++ b/crates/core/machine/src/riscv/mod.rs @@ -2,11 +2,14 @@ pub mod cost; mod shape; +use itertools::Itertools; pub use shape::*; use sp1_core_executor::{ExecutionRecord, Program}; use crate::{ - memory::{MemoryChipType, MemoryLocalChip, MemoryProgramChip}, + memory::{ + MemoryChipType, MemoryLocalChip, MemoryProgramChip, NUM_LOCAL_MEMORY_ENTRIES_PER_ROW, + }, riscv::MemoryChipType::{Finalize, Initialize}, syscall::precompiles::fptower::{Fp2AddSubAssignChip, Fp2MulAssignChip, FpOpChip}, }; @@ -338,8 +341,6 @@ impl RiscvAir { /// Get the heights of the preprocessed chips for a given program. pub(crate) fn preprocessed_heights(program: &Program) -> Vec<(Self, usize)> { - println!("Program instructions: {}", program.instructions.len()); - println!("Program memory: {}", program.memory_image.len()); vec![ (RiscvAir::Program(ProgramChip::default()), program.instructions.len()), (RiscvAir::ProgramMemory(MemoryProgramChip::default()), program.memory_image.len()), @@ -360,6 +361,15 @@ impl RiscvAir { (RiscvAir::ShiftRight(ShiftRightChip::default()), record.shift_right_events.len()), (RiscvAir::ShiftLeft(ShiftLeft::default()), record.shift_left_events.len()), (RiscvAir::Lt(LtChip::default()), record.lt_events.len()), + ( + RiscvAir::MemoryLocal(MemoryLocalChip::new()), + record + .get_local_mem_events() + .chunks(NUM_LOCAL_MEMORY_ENTRIES_PER_ROW) + .into_iter() + .count(), + ), + (RiscvAir::Syscall(SyscallChip::default()), record.syscall_events.len()), ] } @@ -373,6 +383,8 @@ impl RiscvAir { RiscvAir::Lt(LtChip::default()), RiscvAir::ShiftLeft(ShiftLeft::default()), RiscvAir::ShiftRight(ShiftRightChip::default()), + RiscvAir::MemoryLocal(MemoryLocalChip::new()), + RiscvAir::Syscall(SyscallChip::default()), ] } diff --git a/crates/core/machine/src/riscv/shape.rs b/crates/core/machine/src/riscv/shape.rs index c20dfbb7e9..ef1d55ca2d 100644 --- a/crates/core/machine/src/riscv/shape.rs +++ b/crates/core/machine/src/riscv/shape.rs @@ -7,13 +7,13 @@ use sp1_stark::{air::MachineAir, ProofShape}; use thiserror::Error; use crate::{ - memory::MemoryProgramChip, + memory::{MemoryLocalChip, MemoryProgramChip}, riscv::MemoryChipType::{Finalize, Initialize}, }; use super::{ AddSubChip, BitwiseChip, CpuChip, DivRemChip, LtChip, MemoryGlobalChip, MulChip, ProgramChip, - RiscvAir, ShiftLeft, ShiftRightChip, + RiscvAir, ShiftLeft, ShiftRightChip, SyscallChip, }; #[derive(Debug, Error)] @@ -79,6 +79,7 @@ impl CoreShapeConfig { }) .collect(); + tracing::info!("Found shape"); let shape = CoreShape { inner: shape? }; Some(shape) } @@ -232,10 +233,13 @@ impl CoreShapeConfig { self.included_shapes.iter().map(ProofShape::from_map).collect::>(); let cpu_name = || RiscvAir::::Cpu(CpuChip::default()).name(); + let memory_local_name = || RiscvAir::::MemoryLocal(MemoryLocalChip::new()).name(); + let syscall_name = || RiscvAir::::Syscall(SyscallChip::default()).name(); let core_filter = move |shape: &ProofShape| { let core_airs = RiscvAir::::get_all_core_airs() .into_iter() .map(|air| air.name()) + .filter(|name| name != &memory_local_name() && name != &syscall_name()) .collect::>(); let core_chips_and_heights = shape .chip_information @@ -251,12 +255,6 @@ impl CoreShapeConfig { } let cpu_height = core_chips_and_heights.first().unwrap().1; - let num_core_chips_at_cpu_height = - core_chips_and_heights.iter().filter(|(_, height)| *height == cpu_height).count(); - - if num_core_chips_at_cpu_height > 2 { - return false; - } let sum_of_heights = core_chips_and_heights.iter().map(|(_, height)| *height).sum::(); @@ -316,6 +314,8 @@ impl Default for CoreShapeConfig { let shift_right_heights = vec![None, Some(10), Some(16)]; let shift_left_heights = vec![None, Some(10), Some(16)]; let lt_heights = vec![None, Some(10), Some(16)]; + let memory_local_heights = vec![Some(16), Some(21)]; + let syscall_heights = vec![None, Some(16)]; let short_allowed_log_heights = HashMap::from([ (RiscvAir::Cpu(CpuChip::default()), cpu_heights), @@ -326,6 +326,8 @@ impl Default for CoreShapeConfig { (RiscvAir::ShiftRight(ShiftRightChip::default()), shift_right_heights), (RiscvAir::ShiftLeft(ShiftLeft::default()), shift_left_heights), (RiscvAir::Lt(LtChip::default()), lt_heights), + (RiscvAir::MemoryLocal(MemoryLocalChip::new()), memory_local_heights), + (RiscvAir::Syscall(SyscallChip::default()), syscall_heights), ]); // Get the heights for the medium shape cluster. @@ -337,6 +339,8 @@ impl Default for CoreShapeConfig { let shift_right_heights = vec![None, Some(19), Some(20), Some(21)]; let shift_left_heights = vec![None, Some(19), Some(20), Some(21)]; let lt_heights = vec![None, Some(19), Some(20), Some(21)]; + let memory_local_heights = vec![Some(20), Some(21)]; + let syscall_heights = vec![None, Some(19)]; let medium_allowed_log_heights = HashMap::from([ (RiscvAir::Cpu(CpuChip::default()), cpu_heights), @@ -347,6 +351,8 @@ impl Default for CoreShapeConfig { (RiscvAir::ShiftRight(ShiftRightChip::default()), shift_right_heights), (RiscvAir::ShiftLeft(ShiftLeft::default()), shift_left_heights), (RiscvAir::Lt(LtChip::default()), lt_heights), + (RiscvAir::MemoryLocal(MemoryLocalChip::new()), memory_local_heights), + (RiscvAir::Syscall(SyscallChip::default()), syscall_heights), ]); // Core chip heights for the long shape cluster. @@ -358,6 +364,8 @@ impl Default for CoreShapeConfig { let shift_right_heights = vec![None, Some(20), Some(21), Some(22)]; let shift_left_heights = vec![None, Some(20), Some(21), Some(22)]; let lt_heights = vec![None, Some(20), Some(21), Some(22)]; + let memory_local_heights = vec![Some(21), Some(22)]; + let syscall_heights = vec![None, Some(20)]; let long_allowed_log_heights = HashMap::from([ (RiscvAir::Cpu(CpuChip::default()), cpu_heights), @@ -368,6 +376,8 @@ impl Default for CoreShapeConfig { (RiscvAir::ShiftRight(ShiftRightChip::default()), shift_right_heights), (RiscvAir::ShiftLeft(ShiftLeft::default()), shift_left_heights), (RiscvAir::Lt(LtChip::default()), lt_heights), + (RiscvAir::MemoryLocal(MemoryLocalChip::new()), memory_local_heights), + (RiscvAir::Syscall(SyscallChip::default()), syscall_heights), ]); // Set the memory init and finalize heights. diff --git a/crates/core/machine/src/utils/prove.rs b/crates/core/machine/src/utils/prove.rs index 3a81bd946d..73b653c5f9 100644 --- a/crates/core/machine/src/utils/prove.rs +++ b/crates/core/machine/src/utils/prove.rs @@ -9,8 +9,7 @@ use std::{ use web_time::Instant; use crate::riscv::{CoreShapeConfig, RiscvAir}; -use p3_challenger::{CanObserve, FieldChallenger}; -use p3_field::AbstractField; +use p3_challenger::FieldChallenger; use p3_maybe_rayon::prelude::*; use serde::{de::DeserializeOwned, Serialize}; use size::Size; @@ -328,11 +327,12 @@ where // Create the challenger and observe the verifying key. let mut challenger = prover.config().challenger(); - challenger.observe(pk.commit()); - challenger.observe(pk.pc_start()); - for _ in 0..7 { - challenger.observe(Val::::zero()); - } + pk.observe_into(&mut challenger); + // challenger.observe(pk.preprocessed_commit()); + // challenger.observe(pk.pc_start()); + // for _ in 0..7 { + // challenger.observe(Val::::zero()); + // } // Spawn the phase 1 prover thread. let phase_1_prover_span = tracing::Span::current().clone(); diff --git a/crates/prover/Cargo.toml b/crates/prover/Cargo.toml index cacfbb172c..8558e0cd57 100644 --- a/crates/prover/Cargo.toml +++ b/crates/prover/Cargo.toml @@ -55,6 +55,10 @@ path = "scripts/build_plonk_bn254.rs" name = "build_groth16_bn254" path = "scripts/build_groth16_bn254.rs" +[[bin]] +name = "build_compress_vks" +path = "scripts/build_compress_vks.rs" + [[bin]] name = "e2e" path = "scripts/e2e.rs" diff --git a/crates/prover/merkle_tree.bin b/crates/prover/merkle_tree.bin new file mode 100644 index 0000000000000000000000000000000000000000..b74509cbb325bc7664a58e2f51ca0d81566ba0a2 GIT binary patch literal 2097136 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

rY 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

  • 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

    c3x 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%0ArX0ac#fGr@hH8C?$ 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

    `k6MKnph6wH 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

    vXj!pBIxDANElmqsZP#vBoo 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

    _CWDsW3<_1 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 z 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 literal 0 HcmV?d00001 diff --git a/crates/prover/scripts/build_compress_vks.rs b/crates/prover/scripts/build_compress_vks.rs new file mode 100644 index 0000000000..fdd65dce0e --- /dev/null +++ b/crates/prover/scripts/build_compress_vks.rs @@ -0,0 +1,55 @@ +use std::{fs::File, path::PathBuf}; + +use clap::Parser; +use p3_baby_bear::BabyBear; +use sp1_core_machine::{riscv::CoreShapeConfig, utils::setup_logger}; +use sp1_prover::{utils::get_all_vk_digests, InnerSC, REDUCE_BATCH_SIZE}; +use sp1_recursion_circuit_v2::merkle_tree::MerkleTree; +use sp1_recursion_core_v2::shape::RecursionShapeConfig; + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Args { + #[clap(short, long)] + build_dir: PathBuf, + #[clap(short, long)] + dummy: bool, + #[clap(short, long, default_value_t = REDUCE_BATCH_SIZE)] + reduce_batch_size: usize, +} + +fn main() { + setup_logger(); + let args = Args::parse(); + + let reduce_batch_size = args.reduce_batch_size; + let build_dir = args.build_dir; + + let core_shape_config = CoreShapeConfig::default(); + let recursion_shape_config = RecursionShapeConfig::default(); + + std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); + + tracing::info!("building compress vk map"); + let vk_map = get_all_vk_digests(&core_shape_config, &recursion_shape_config, reduce_batch_size); + tracing::info!("compress vks generated"); + + // Save the vk map to a file. + tracing::info!("saving vk map to file"); + let vk_map_path = build_dir.join("vk_map.bin"); + let mut vk_map_file = File::create(vk_map_path).unwrap(); + bincode::serialize_into(&mut vk_map_file, &vk_map).unwrap(); + tracing::info!("File saved successfully."); + + // Build a merkle tree from the vk map. + tracing::info!("building merkle tree"); + let (root, merkle_tree) = + MerkleTree::::commit(vk_map.keys().cloned().collect()); + + // Saving merkle tree data to file. + tracing::info!("saving merkle tree to file"); + let merkle_tree_path = build_dir.join("merkle_tree.bin"); + let mut merkle_tree_file = File::create(merkle_tree_path).unwrap(); + bincode::serialize_into(&mut merkle_tree_file, &(root, merkle_tree)).unwrap(); + tracing::info!("File saved successfully."); +} diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 02e3dc812c..c9d3edc185 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -84,9 +84,7 @@ use sp1_recursion_circuit_v2::{ }; pub use types::*; -use utils::{ - get_all_vk_digests, sp1_commited_values_digest_bn254, sp1_vkey_digest_bn254, words_to_bytes, -}; +use utils::{sp1_commited_values_digest_bn254, sp1_vkey_digest_bn254, words_to_bytes}; use components::{DefaultProverComponents, SP1ProverComponents}; @@ -108,7 +106,10 @@ const WRAP_DEGREE: usize = 17; const CORE_CACHE_SIZE: usize = 5; const COMPRESS_CACHE_SIZE: usize = 3; -const REDUCE_BATCH_SIZE: usize = 2; +pub const REDUCE_BATCH_SIZE: usize = 2; + +const VK_MAP_BYTES: &[u8] = include_bytes!("../vk_map.bin"); +const MERKLE_TREE_BYTES: &[u8] = include_bytes!("../merkle_tree.bin"); pub type CompressAir = RecursionAir; pub type ShrinkAir = RecursionAir; @@ -190,9 +191,10 @@ impl SP1Prover { let recursion_shape_config = RecursionShapeConfig::default(); let allowed_vk_map = - get_all_vk_digests(&core_shape_config, &recursion_shape_config, REDUCE_BATCH_SIZE); + bincode::deserialize(VK_MAP_BYTES).expect("failed to deserialize vk map"); - let (root, merkle_tree) = MerkleTree::commit(allowed_vk_map.keys().cloned().collect()); + let (root, merkle_tree) = + bincode::deserialize(MERKLE_TREE_BYTES).expect("failed to deserialize merkle tree"); let core_shape_config = env::var("FIX_CORE_SHAPES") .map(|v| v.eq_ignore_ascii_case("true")) diff --git a/crates/prover/vk_map.bin b/crates/prover/vk_map.bin new file mode 100644 index 0000000000000000000000000000000000000000..a53489a485087a586b218dabb289cbf6dee4dac7 GIT binary patch literal 725128 zcmb5$RTDr};df!WySux)Q$h*p5Co(Jq@__&LK*~Vq`OfGY3UA8Lb^e^%ivw>{{_~0 z_sp7o^UUx1TlMYBX*?@GD4@ft~fOJz1 zNH^7hbW;yVH_d=_(+)^C-GFq{4@ft|fOInsNH^1fbTbb~H_L!@vkpi%+kkYl4@fu1 zfOK;XNH^DjbaM|#H_w1{^A1Qi-+*-U4@kGbfOHEENVm{{bPEqix5$8Wiw;P)*no74 z4@kGffOJa^NVn90bW0CNx6FWa%MM7l+<EIFd*G(1JbQNAl(`R(ycil-46$(TWdhNwFjhIXF$4j2c%nXK)Uq@q}yOX zx(x@U+h{<#jR&Or(SUTD3`n=>fOJ0|kZ!X9={6sbZi@lwelj54mIKmlH6Y#A1JZ3X zAlGm0rZr=gv_8X9H{{iU^7?AG30qK4*Al)wqr2Ex?bO#Mc_v-=a zelsB5!2{AAG9cZd1JWHfAl+{Vq&s{-x+4apJ90p}qXwiqdO*5k2BbT7K)T}wq&t2< zy59{*cfx>lCk{yW`vK`r8j$Yf0qIT|knYq0=}sGv?(_la&KQvH%mL~CFd*Go1Ja#6 zAl*3w(w#dX-FXAjoj)Mm1q0GuI3V3c1JYeQAl)Sc(p@?r-DLyPT|OY)6$8>;IUwCt z1JYeRAl)?s(p@_s-5&>}`_q7Qe;$zTx&i5~ACT^b0qJfWknS%7(%m#5-OU5i-7+BE ztpn2CHXz;Y1Jd0wAl+XFq`PxKy1NFXyL&*odj_PtcR;%P2Bf=xK)MG8q4M_L#fOMY>NcZW0be|1K_xXTyUkph1<$!cw z4M_L(fOOvsNcZi4bpIZZ?mq+4{dYjR{|!j@-GFrYsBgsoQzMMXT`5PxRl1RJm2MPV zr5hDj=|;m1M-Ky4i7+ZVp_fn-f>*=E7CFxp9?l9$clH7gy=# z!&SQZag}ZXT%}tOSLqhQRl0?7m2MGSrCStN=@!FPy2WvoZV6naTM}34mcmuKrE!&R z8C<1X7FX$(!&SQFag}ZbT%}tPSLwcot8^>jD&5MsO1BEG(yfZCbl=BSx*y;w-D zw>qxUt%0j_YvL;14{?=lEnKBr8&~Pp!Bx6-ag}a8T%}tdSLrsuRk{svm2M+krP~-+ z>3)Q(berHR-KMxo_hVe8+YDFfHpf-EEpV0YC%8(tC9cwKg{yR1<0{=YxJtJzuF`FX zt90ArD&0?Um2L-IrP~o#>2|_Zx}V`H-Ojj5w+pV)?TV{(yWuL`?zl>~2d>iXiK}!! z$5pz$aFuRvT&3FwSLyb}Rl5Cfm2Q7rr8@vu=?=tIx?kWb-7j&K?pL@5juy zy5n(`?svFKcLJ``ortS+zsFU&lW>*pWL%{?1y|`##Z|h~aFyrMnYX>F&Z+y1Q|e?jBsFyBAmK z?!#5O`*D@-0bHef5Lf9Q!d1G5ah2{7T%~&ySLq(ZRl3JE6Iqx;Jr^?k!xUdmC5j-oaJ6f8i?KySPgC9D&42JO7|JA(tVDrbYI{q-IusZ_Z62hpTko;VRwGANGwn67T<_|C_^%6zN9BRJu`cm2OmAr5g=b=|;y@x-oE-ZcJRI z8w*$I#>Q2;ad4GxTwJ9a4_E2N$5pxsaFuRCT&0@`SLr6kRk}%Vm2Og8rJD>_=_bcj zx+!p#Zc1FGn+jLyrp8seX>gTpT3n@@4p-@>$5px+aFuRGT&0@{SLtTPRk~Slm2OsC zrJD^`>1M}Ox;b!_ZcbdKn+sRz=EhaJd2p3(URlD%~o$O1CPm(tRIS>3)E#bgSVi-RihXw+61#t%<92Kg3nKwQ!Yg zZCs^W2UqFV#Z|iXaFuR-T&3FpSLrsyRl1FEm2P8PrTY=C(rtpPberNT-H&mVZZlk^ z+Z3)W*bUWiJ-7dIFw=1sF?S`v#yW=X|9=J-kC$7@{99QY~!d1Gxag}Z#T&3F=SLyb{ zRl5CgmF@ssr8^K;>3)H$bic$^x?kZc-9flY_iJ3G`wgzr9gM4Vhu|vRp}0zS7_QR& z7FX#G$5px`aFy;zT%|h-SLu$%Rk~wvmF`$vr8^E+>5j)$y5Hd{-3ho#cOtIR{T^58 zPQq2XlW~>q6kMe{6<6s_!&SP|ah2{2T%|h`SLyzMt8{1KD&5(*N_P&f(w&Q|bm!qJ z-TAmmcLA=_U5Kl67vU=1#kfj$39iyzimP;&;VRwbxJq{guF_qJt8`c4D&5t%N_P#e z(p`(IbbrKExF&l=x_fYy?p|D_yAN0C?#ETS2XK|{L0qMK2v_MI z##OpUaFy;+T%~&qSLq(dRk|l|mF{o2O7|qL()}G*>HdMMbWhA_YAJmJ&UV! z|HM_g=Wvzod0eG?0axi>#8tYNaFy<5T%~&jSLt5GRl3)3mF{(1rF#Qc>E6Uuy0>tZ z?rmJ9dk0tP{)MY_@8T-md$>yXKCaSzfU9&L;ws%oxJvgiuF`#it8|~@D&1$eO7}Ug z(tUxebYJ2s-B-9u_cgB4eS@oX-{LCWzj2lBKe$TwUtFd8AFk4UhpTiWj65L7h`7qR zk#Lo6WL%{i1y|`t#Z|h|aFuR!T%{WWSLw#YRl2com2PZYr5guV>BhxXy76$8ZhTy& zn*dkoCd5^`iEx!}VqB%01Xt-M#Z|h=aFuRyT&0@=SLvq2Rl2Egm2PTWrJDv<>88b1 zy6JG0ZhBm$n*mqpX2eyxnQ)bEW?ZG41y|{2#Z|i5aFuR$T&0@>SLx=&Rl2!wm2Pfa zrJDy=>E^{%y7_RGZhl;)TL4$-7Q|J$g>aQ_VO*tK1Xt-6#Z|h+aFuRxT%}tASLv3- zRl22cm2PQVrCSD9>6XP+y5(?{Zh2g#TLD+;R>W1h@8K%lO1Mh5GOp6Cf~$0^;ws(u zah2`|xJtJguF|cJt8{DND&3m6O7}xtrCSSE>DI;VRuGxJtJvuG0M&SLrsxRl3b_m2L}MrTYo4(rt;WbX(yn-PX8D zw+*h+ZHudP+ubCI|5hfj>J{Eqi~h(Xk4W` z23P5h#Z|iFaFyIqL?lfGbI~`Z) z&cIc=GjWyf54cKq7Ov8rjjMF$;40m@xJq{(uF{>4t8^FOD&2*+N_P>i(p`+JbeG^N z-KDrncNwnIU5=}CSKun$mAFcG6|T}HdPNbT{ED-Oad4cMGo4-HNMpx8W+??YK&J2d>in6<6u*#8tYxaFyRl56dmF|9ArF#HZ=^n&Yx`%L;?qOV|djwbM9>rC<$8eSIaa^T)0$1t& zhO2Z>;ws(Wah2{LxJvgFuF^e?t8~xcD&4cVO7~A(rF#xn>7K_`x)*Sj?nPXsdkI(R zUdC0rS8$c?Ra~We4Oi)2$5pyFaFy;&T%~&pSLxoyRl0X@mF{1-O7||V(!GbPbnoLT z-3Pcz_aUy*eT1uYALAHdSObpORwy8q!S-FLW3H^L|bf{ci(oEr&O=|;v?x>0bIZd6>Q8x2?KM#ojU zF>sY`OkAZK3s>pJ##Op;aFuRcT%{WiSLw#bRk{gqm2N^@rJD#>=_bZix=C=AZc<#O zn+#X!CdXB}DR7l;N?fIz3Rmf-##Op$aFuRaT&0^1SLvq5Rk|5)m2O5{rJD&?>1M`N zx><0QZdP2Sn+;d#X2(^!IdGM3PF$s%3s>pp##Op`aFuReT&0^2SLx=*Rk{Umm2N>? zrCSJB=@!OSxbOd`2CmYriK}!! z#8tYraFuRtT%}tFSLxQpRl4Gs1_y8UsL?f_h+I}lgteu1lWzr5j%#x?^ya?pR!lEH-{C6V3Ajpk zBCgW?9#`p3!d1GHah2{AT%|h|SLsf}Rl3u0mF^5&r8^T>>HdJLbZ6lz-PyQGcMh)7 zor|k<=iw^d`M64V0j|bx+idz?r*qC_av^;{T)~7{(-A>PvI)v)3{3a z46f2Wi>q}1#8tZIaFy0ZTEy4P@(?sZ(HdjnVL z-o#b9w{Vs2ZCs^$2UqF-g{yS$;ws&HxJvgvuF`#gt8^dYD&0r8O7}6Y(tU!fbf4lX z-DkK;_c^Z8eSxcVU*am=SGY>|HLlWqgR6Ak;ws(0ah2{rxJvh5T&4RTuF`#nt8^ob zIv~i1xXQVaaFuRkT%{WYSLsH@Rl3n|m2Pxgr5giR>BhuWy0LJTZfsno8wXeE#>G{- z@o<%Hd|aiQ09WZI#8tY9aFuRiT&0@?SLr6jRl3P=m2PrerJDj*>88Y0x~XuLZfabm zn+8|uro~md>2Q^9dR(QO0axi}#8tYPaFuRmT&0@@SLtTORl3=5m2P%irJDm+>E^^$ zy18(bZf;zqn+I3v=EYUI`EZqPeq5zn09WZ2#8tY5aFuRhT%}tCSLqhTRl3D+m2Pod zrCS15>6XM*x}|WHZfRVlTLxF@mc>=N<#3g5d0eGi0axi(#8tZQ;VRuqxJtJ&uF|c7 zt8}a4D&6;SmF@?)O1B!W(yflGbZg)$-I};c_d{HzTMJj|*2Y!3b#Rq#U0kJG4_E2d z$5pxwaFuRDT&3FxSLrs!Rk|PHD%~cyO1CMl()}1$={Cbvy3KKwZVOzc`w6bnZHcRN zTj46**0@Ty4X)B{i>q|o;VRwsxJvg^T&3FqSLt@dRl1#UmF{P_O1Cqv((Qt)bi3jz z-EO!_w>z%V?SZRwd*UkH&vBJ*FI=VD8&~P}!Bx6_ag}aAT&3F|SLqJGRk{OlmF^d~ zO7}}#rTZ1G(jA1Wbic+`y5Ha`-NCp@cL=W19g3@Thv6#SZ*i6Ga9pK30$1sd#8tYZ zaFy<8T%|h(SLu$$Rl4JFmF{?4rTZPO(w%^-bSL5}-S2Ug?j&5LI~iB$PQg{WQ*o8< zG+d=S9arhjz*V|4ah2{5xJq{xuF{>2t90k!D&4ubN_QTv(w&d1bQj<%-G#VHcM-1A zU5u-Am*6VhrMOCW8LrY@j;nN6;40mfxJq{wuF_qNt8~}kD&4iXO7}-xrTY`E()}4% z>8`_7y6bV3?gm_?yAfCE{(`G?H{mMX&A3W;3$D`LimPF&ii6;hj5kdVO*tq1Xt-E#Z|h;aFywO30LV}##OpkaFy;=T%~&rSLt5IRk}BDmF`VkrF#ok>E6awx_5Au?q9e{_b#r| zy@#uG@8c@n2e?Z2A+FMWgsXHP<0{=JxJvgauF`#mt8|~^D%}^jO7|tM(tU-ibYJ5t z-8Z;O_bsl{{To;5{)4M@|HW0h|KTd#ceqM7!e|46jEJk88wpqGM#fdTQE-)RR9vMS z4Oi(#$5py9aFuRMT%{WeSLw#aRl0F-m2O;Ir5g`d>Bh%Zx(RTVZbDq8n+R9wCdO5| zNpO{JQe35*3|HwU$5py1aFuRKT&0@|SLvq4Rk~?#m2O&GrJD{{>88h3x*2elZbn?C zn+aFxX2w;zS#XtZR$Qf<4Oi)A$5pyHaFuROT&0@}SLx=)Rl0d_m2O^KrJD~|>E_2( zx&?5RZb4k7TL@R_7RFV&MR1jFQCy{43|HwE$5px|aFuRJT%}tISLv36XV;x)pGhZbe+B`yQ^+t%R#|E8{BND!59wDz4IfA6MyqfU9(?;VRwgxJtJM zuF|cEt8_oaRl2osm2PcZrCSGA>DI+ny7h3CZhc&(+W=STHpErBjc}E2V_c>C5w6m0 zf~$0!;ws&bag}Z}T&3F_SLwFERl1+xD&3a2O1BlR(rt~ablc!6-L|+&w;it1ZI7#T zKgCtL9dMOyM_i@b30LWUhO2Zt<0{=QxJtJxuF~y>t8}~LD%~EqO1CGj()}D)>Gr}^ zy1j9gZXaBw+ZR{q_QO@W{c)A<09>Uz5LfAbfva@C#8tXq;VRuhxJvhHT&4RBuF@Th zt8|CpD&3*DN_QBp()|`!=?=$Lx+8Fv?nqpvI|^6nj>c8GV{n!3SX`w$4p-@p$5p!D z;VRt;xJq{-uG0M;SLsf|Rl1XLmF^T=r8^Z@=}yB{y3=u$?hIU|I}=yw{(!4=XW=T{ z*|q|!;VRwvxJq{cuF_qIt8^FPD&57nN_Ppa(p`$HbeG{O-Q~DScLlD} zU5Tr7SK%t%)woJ`4X)B%i>q{h#8tXK;VRvqah2{mT&24nSLtrRRk|B-mF_RNN_P{k z(%p=!bhqFt-L1GvcN?zK-Hxktci<}BUvZW0PF$tC3s>px##Op|aFy;}T&24YSLyD@ zRk{aomF_`YrF#fh=^n;ax<_!8?onK&dkk0U9>-O>CvcVSZ@5bLB(Bo^9ari8fva>+ z;VRwJxJvg7uF^e=t91XwRl4VJmF{_5rF#Ka>0ZQDx|eX3?qyu1dj(hNUd2_q*Kn2Y zbzG%;16S$Z#8tYtaFy-AA}e_c5;0 zeS)iWpW-UrXShoDIj+)ufva?1;ws%&xJvgmuF`#jt90MuD&4dO7~w}rTZVQ z(tU@kbR&#DAjpWg%DItnm2PBQr5goT=|;s>y3ufzZggCw8v|GA#>7>+v2c}cY+R)q z2UqFF#Z|iTaFuR+T&0@;SLr6iRl13Am2P5OrJDp-=_bWhy2)^rZgO0un*vwqro>gc zsc@BUYFwq823P5(#Z|iLaFuR)T&0@1M@My4i4*ZgyOy zn*&$r=EPOHxp0+kZd|3C2UqFl#Z|ibaFuR;T%}t8SLqhSRl0?6m2P2NrCS77=@!LR zy2WsnZgE_tTLM?3s>pZ##Op?aFuRd zT%}tNSLxQrRk{sum2N{^rP~Ns={Ckyx*y>x-6pt7w<)gD{TNs2Hp5lA&2g1(3tXl9 z39iy@iK}#5;VRwMxJtJTuF`Fbt90ApD&6+DO7~M-rP~2l>2}0bx}9*9?q|44w==HN z?SiXxyW%R{Zn#RfJFe30fva?T;ws(Gag}Z_T&3F^SLyb_Rl0p~m2N*=rQ07@=?=hE zx&v{Q?iaX9_e)%*`xUOz9fYfNzs6O%-{30U!MI9y2(Ho{imP;o;VRv4ah2|HT%|h# zSLu$#Rl1{amF{R!>5j!!y5n$_?s#0K`yH;*oq(%!C*msI?{SsxBwVFC8CU5} z!Bx6bah2{gT%|i5SLx2cRk|~AmF^F?N_Q5n(w&W~bm!nI-MP3*cOI_NosX+@7vL)0 zg}6$05w6l*jH`5);40mvxJq{!uF_qOt8`c3D&3X1N_Q2m(p`v5It23)1P5m)K{f~#~l;VRwDxJq{muF~C#t8};FD&6h4N_PjY z()|@z>F&f;y1Q_d?rvPAy9Zb4?!{HQ`*4-+eq5z{09WZA#8tY7aFy<1T%~&iSLq(b zRl3J;mF{s|rF#Nb>HdbRbWh?c-QRJQ?jN{H_Y|(uJ&mh$&)_QEv$#t4Ph6#Y4p-@( z$5px)aFy;wT%~&nSLt5HRk~MjmF`tsrF#um>0ZZGx;Jo@?oC{!dka_T-o{nBcW{;N zU${#5F0RtOhpTk&<0{<;xJvgSuF`#kt8^dZD%~fzO7|(Q(tU=jbf4oY-50n@_a&~< zeTA!ZU*js>H@HgoEw0l28&~Q6gR6A^#Z|ih;VRvCxJoy|7z2Wgh^w3%30LVx##Ope zaFuRUT%{WgSLsH_Rk|^7m2OO2r5g)Z>Bh!Yx^ZxoZd_cY8xL3M#>Z8<32>EeLR_Vr z2v_MQ##OpWaFuRST&0@~SLr6lRk|r~m2OI0rJD*@>88e2x@mBgZdzQWn+{j$rpHyf z8E}E^~&x_NMwZeCoa zn-5p%=EqgK1#p#aL0qL<2v_MA##OpSaFuRRT%}tKSLqhVRk|f`m2OE~rCSPD>6XS- zx@B;cZdqKVTMk$0md91P6>ybqMO>x(9CGLeO#s609WZY#8tYDaFuRj zT&4RFuF`FSt8|;9)XCx}V@G-IlmYw-v6^ZH=pR+u$nQwzx{S z9j?-CkE?V)#Z|f;aFuRHT&3FySLuF+t8_c#D%~!)O1CSn((Q(;bi3m!-5$6~wXRpA6%u|7gy=_!&SQdah2`>T%|h@SLuF%t8~A_Rk~l{D&0Z2O80AA zrTY!8(jAPebcf(7-J!TjcNnhH{T5g04#!oxBXE`ONL-~m3Rmfl##OpwaFy;@T%|h> zSLu$&Rl48dD%}aVN_Qfz()}J+=}y8`x|4C0?i5_5I~7;yPQz8Y({YvV3|yr<6Ibc} zfU9(8;VRwPxJq{puF{>0t90k#D&6_GN_PRS(p`wFbQj?&-Nm>{cL}c2U5cx8m*Fbi z<+w_B1+LOviK}#1;VRwLxJq{ouF_qLt8{2APPx*Kto z?k~7XcN4DC-HfYrx8N$>t++~e8?Msbj;nNc;40l;ah2{)T&24USLyD?Rl0j{mF`|# zrMnMT>F&o>x(9HT?m=9odk9zQ9>!I=M{t$yQCy{a3|HwM$5px~aFyHdYQbnoIS-Fvu7_dc%DeSoWUAL1(A zN4QG&F|N{mf~$0&;ws%|xJvgquF`#ht8`!DD&1GOO7}Ic(tU%gbl>7C-M?{_?mxIn z_g`G4`yZ~-eTS=bBaAs9$cVVgxsh;{Ze(1g8wFSCM#WXS(QuV+bX=ty16S$B#8tYn zaFuRsT%{WaSLw#ZRl4zTm2P}orJDd(=_bTgx`}X=Zem=en*>+sCdE~{$#9i!a$KdG z0$1s##8tYfaFuRqT&0@^SLvq3Rl4bLm2P@mrJDg)>1M=Lx|wj5Zf0Din*~?tX2n&y z*>II^c3h>K16S$h#8tYvaFuRuT&0@_SLx=(Rl50bm2Q4qrCR`3=@!IQx`l9+Zed)d zTLf3>7R6P%#c-8waa^Ta0$1sl#8tYbaFuRpT%}tESLv3;Rl4PHm2P=lrCR}4=~l#5 zy6@pC-AcGhw=%BMt%9p`tKur%_i>f(2e?YN8m`im2O>JrCSeI>DI?px(#rZZbMw9+Xz?bHpW%DAK@z9Cb&wsDX!A}7+2{w!&SP? zag}ZhT&4R7uF`FZt8`o8D&5w&O1BNJ(rt^Yblc%7-S)Uj_fuS@+W}YUcEnY>op6=z zXShnYGp^F@f~$19;ws&4xJtJ>uF~y+t8{zfD&5aGr`@x_xn#Za-Y5 z+aFiy4!~8q196q^7r09IOI)S<6|T}9gsXJF##OrC;40n0xJq{juF@Tft8|CqD&22! zmF{p{r8@#w>5jxzx}$KF?r2=4I|f(jj>T2F<8YPkcwD9X9j?-yfU9&T;ws(mah2{Q zT%|i1SLsf{Rk~AgmF_fLr8^y0>CV7ax-)T=?hm+1cNVVFosFw>=in;cxwuMq90ZWFx>sph z##Op^aFy;~xJvgfuF}1St90+f*tDGAN zSLsH^Rk~4dm2OmAr5g=b=|;y@x-oE-ZcJRI8w*$I#>Q2;ad4GxTwJ9a4_E2N$5pxs zaFuRCT&0@`SLr6kRk}%Vm2Og8rJD>_=_bcjx+!p#Zc1FGn+jLyrp8seX>gTpT3n@@ z4p-@>$5px+aFuRGT&0@{SLtTPRk~Slm2OsCrJD^`>1M}Ox;b!_ZcbdKn+sRz=EhaJ zd2p3(URlD%~o$O1CPm(tRIS z>3)E#bgSVi-RihXw+61#t%<92Kg3nKwQ!YgZCs^W2UqFV#Z|iXaFuR-T&3FpSLrsy zRl1FEm2P8PrTY=C(rtpPberNT-H&mVZZlk^+Z3)W*bUWiJ-7dIFw=1sF?S`v#yW=X| z9=J-kC$7@{99QY~!d1Gxag}Z#T&3F=SLyb{Rl5CgmF@ssr8^K;>3)H$bic$^x?kZc z-9flY_iJ3G`wgzr9gM4Vhu|vRp}0zS7_QR&7FX#G$5px`aFy;zT%|h-SLu$%Rk~wv zmF`$vr8^E+>5j)$y5Hd{-3ho#cOtIR{T^58PQq2XlW~>q6kMe{6<6s_!&SP|ah2{2 zT%|h`SLyzMt8{1KD&5(*N_P&f(w&Q|bm!qJ-TAmmcLA=_U5Kl67vU=1#kfj$39iyz zimP;&;VRwbxJq{guF_qJt8`c4D&5t%N_P#e(p`(IbbrKExF&l= zx_fYy?p|D_yAN0C?#ETS2XK|{L0qMK2v_MI##OpUaFy;+T%~&qSLq(dRk|l|mF{o2 zO7|qL()}G*>HdMMbWhA_YAJmJ&UV!|HM_g=Wvzod0eG?0axi>#8tYNaFy<5 zT%~&jSLt5GRl3)3mF{(1rF#Qc>E6Uuy0>tZ?rmJ9dk0tP{)MY_@8T-md$>yXKCaSz zfU9&L;ws%oxJvgiuF`#it8|~@D&1$eO7}Ug(tUxebYJ2s-B-9u_cgB4eS@oX-{LCW zzj2lBKe$TwUtFd8AFk4UhpTiWj6ER8h`7qRk#Lo6WL%{i1y|`t#Z|h|aFuR!T%{WW zSLw#YRl2com2PZYr5guV>BhxXy76$8ZhTy&n*dkoCd5^`iEx!}VqB%01Xt-M#Z|h= zaFuRyT&0@=SLvq2Rl2Egm2PTWrJDv<>88b1y6JG0ZhBm$n*mqpX2eyxnQ)bEW?ZG4 z1y|{2#Z|i5aFuR$T&0@>SLx=&Rl2!wm2PfarJDy=>E^{%y7_RGZhl;)TL4$-7Q|J$ zg>aQ_VO*tK1Xt-6#Z|h+aFuRxT%}tASLv3-Rl22cm2PQVrCSD9>6XP+y5(?{Zh2g# zTLD+;R>W1h@8K%lO1Mh5GOp6Cf~$0^;ws(uah2`|xJtJguF|cJt8{DND&3m6O7}xt zrCSSE>DI;VRuGxJtJvuG0M& zSLrsxRl3b_m2L}MrTYo4(rt;WbX(yn-PX8Dw+*h+ZHudP+ubCI|5hfj>J{Eqi~h(Xk4W`23P5h#Z|iFaFyIqL?lfGbI~`Z)&cIc=GjWyf54cKq7Ov8rjjMF$;40m@ zxJq{(uF{>4t8^FOD&2*+N_P>i(p`+JbeG^N-KDrncNwnIU5=}CSKun$mAFcG6|T}< zjjMFm;40mHdPNbT{ED-Oad4cMGo4 z-HNMpx8W+??YK&J2d>in6<6u*#8tYxaFyRl56dmF|9ArF#HZ=^n&Y zx`%L;?qOV|djwbM9>rC<$8eSIaa^T)0$1t&hO2Z>;ws(Wah2{LxJvgFuF^e?t8~xc zD&4cVO7~A(rF#xn>7K_`x)*Sj?nPXsdkI(RUdC0rS8$c?Ra~We4Oi)2$5pyFaFy;& zT%~&pSLxoyRl0X@mF{1-O7||V(!GbPbnoLT-3Pcz_aUy*eT1uYALAHdSObpORwy8q!S-FLW3H^Mjr zf{ci(oEr&O=|;v?x>0bIZd6>Q8x2?KM#ojUF>sY`OkAZK3s>pJ##Op;aFuRcT%{Wi zSLw#bRk{gqm2N^@rJD#>=_bZix=C=AZc<#On+#X!CdXB}DR7l;N?fIz3Rmf-##Op$ zaFuRaT&0^1SLvq5Rk|5)m2O5{rJD&?>1M`Nx><0QZdP2Sn+;d#X2(^!IdGM3PF$s% z3s>pp##Op`aFuReT&0^2SLx=*Rk{Umm2N>?rCSJB=@!OSxbOd`2CmYriK}!!#8tYraFuRtT%}tFSLxQpRl4Gs1_y8UsL?f_h+I}lgteu1lW zzr5j%#x?^ya?pR!lEH-{C6V3AjpkBCgW?9#`p3!d1GHah2{AT%|h|SLsf} zRl3u0mF^5&r8^T>>HdJLbZ6lz-PyQGcMh)7or|k<=iw^d`M64V0j|b zx+idz?r*qC_av^;{T)~7{(-A>PvI)v)3{3a46f2Wi>q}1#8tZIaFy0ZTEy4P@(?sZ(HdjnVL-o#b9w{Vs2ZCs^$2UqF-g{yS$;ws&H zxJvgvuF`#gt8^dYD&0r8O7}6Y(tU!fbf4lX-DkK;_c^Z8eSxcVU*am=SGY>|HLlWq zgR6Ak;ws(0ah2{rxJvh5T&4RTuF`#nt8^obJ0Qr2xXQVaaFuRkT%{WYSLsH@Rl3n| zm2Pxgr5giR>BhuWy0LJTZfsno8wXeE#>G{-@o<%Hd|aiQ09WZI#8tY9aFuRiT&0@? zSLr6jRl3P=m2PrerJDj*>88Y0x~XuLZfabmn+8|uro~md>2Q^9dR(QO0axi}#8tYP zaFuRmT&0@@SLtTORl3=5m2P%irJDm+>E^^$y18(bZf;zqn+I3v=EYUI`EZqPeq5zn z09WZ2#8tY5aFuRhT%}tCSLqhTRl3D+m2PodrCS15>6XM*x}|WHZfRVlTLxF@mc>=N z<#3g5d0eGi0axi(#8tZQ;VRuqxJtJ&uF|c7t8}a4D&6;SmF@?)O1B!W(yflGbZg)$ z-I};c_d{HzTMJj|*2Y!3b#Rq#U0kJG4_E2d$5pxwaFuRDT&3FxSLrs!Rk|PHD%~cy zO1CMl()}1$={Cbvy3KKwZVOzc`w6bnZHcRNTj46**0@Ty4X)B{i>q|o;VRwsxJvg^ zT&3FqSLt@dRl1#UmF{P_O1Cqv((Qt)bi3jz-EO!_w>z%V?SZRwd*UkH&vBJ*FI=VD z8&~P}!Bx6_ag}aAT&3F|SLqJGRk{OlmF^d~O7}}#rTZ1G(jA1Wbic+`y5Ha`-NCp@ zcL=W19g3@Thv6#SZ*i6Ga9pK30$1sd#8tYZaFy<8T%|h(SLu$$Rl4JFmF{?4rTZPO z(w%^-bSL5}-S2Ug?j&5LI~iB$PQg{WQ*o82 zt90k!D&4ubN_QTv(w&d1bQj<%-G#VHcM-1AU5u-Am*6VhrMOCW8LrY@j;nN6;40mf zxJq{wuF_qNt8~}kD&4iXO7}-xrTY`E()}4%>8`_7y6bV3?gm_?yAfCE{(`G?H{mMX z&A3W;3$D`LimPF&ii6;hj5kdVO*tq1Xt-E#Z|h;aFywO30LV}##OpkaFy;=T%~&rSLt5I zRk}BDmF`VkrF#ok>E6awx_5Au?q9e{_b#r|y@#uG@8c@n2e?Z2A+FMWgsXHP<0{=J zxJvgauF`#mt8|~^D%}^jO7|tM(tU-ibYJ5t-8Z;O_bsl{{To;5{)4M@|HW0h|KTd# zceqM7!gvFMjEJk88wpqGM#fdTQE-)RR9vMS4Oi(#$5py9aFuRMT%{WeSLw#aRl0F- zm2O;Ir5g`d>Bh%Zx(RTVZbDq8n+R9wCdO5|NpO{JQe35*3|HwU$5py1aFuRKT&0@| zSLvq4Rk~?#m2O&GrJD{{>88h3x*2elZbn?Cn+aFxX2w;zS#XtZR$Qf<4Oi)A$5pyH zaFuROT&0@}SLx=)Rl0d_m2O^KrJD~|>E_2(x&?5RZb4k7TL@R_7RFV&MR1jFQCy{4 z3|HwE$5px|aFuRJT%}tISLv36XV;x)pGhZbe+B`yQ^+t%R#| zE8{BND!59wDz4IfA6MyqfU9(?;VRwgxJtJMuF|cEt8_oaRl2osm2PcZrCSGA>DI+n zy7h3CZhc&(+W=STHpErBjc}E2V_c>C5w6m0f~$0!;ws&bag}Z}T&3F_SLwFERl1+x zD&3a2O1BlR(rt~ablc!6-L|+&w;it1ZI7#TKgCtL9dMOyM_i@b30LWUhO2Zt<0{=Q zxJtJxuF~y>t8}~LD%~EqO1CGj()}D)>Gr}^y1j9gZXaBw+ZR{q_QO@W{c)A<09>Uz z5LfAbfva@C#8tXq;VRuhxJvhHT&4RBuF@Tht8|CpD&3*DN_QBp()|`!=?=$Lx+8Fv z?nqpvI|^6nj>c8GV{n!3SX`w$4p-@p$5p!D;VRt;xJq{-uG0M;SLsf|Rl1XLmF^T= zr8^Z@=}yB{y3=u$?hIU|I}=yw{(!4=XW=T{*|q|!;VRwvxJq{cuF_qI zt8^FPD&57nN_Ppa(p`$HbeG{O-Q~DScLlD}U5Tr7SK%t%)woJ`4X)B%i>q{h#8tXK z;VRvqah2{mT&24nSLtrRRk|B-mF_RNN_P{k(%p=!bhqFt-L1GvcN?zK-Hxktci<}B zUvZW0PF$tC3s>px##Op|aFy;}T&24YSLyD@Rk{aomF_`YrF#fh=^n;ax<_!8?onK& zdkk0U9>-O>CvcVSZ@5bLB(Bo^9ari8fva>+;VRwJxJvg7uF^e=t91XwRl4VJmF{_5 zrF#Ka>0ZQDx|eX3?qyu1dj(hNUd2_q*Kn2YbzG%;16S$Z#8tYtaFy-AA}e_c5;0eS)iWpW-UrXShoDIj+)ufva?1;ws%& zxJvgmuF`#jt90MuD&4dO7~w}rTZVQ(tU@kbR&#EAjpWg%DItnm2PBQr5goT z=|;s>y3ufzZggCw8v|GA#>7>+v2c}cY+R)q2UqFF#Z|iTaFuR+T&0@;SLr6iRl13A zm2P5OrJDp-=_bWhy2)^rZgO0un*vwqro>gcsc@BUYFwq823P5(#Z|iLaFuR)T&0@< zSLtTNRl1pQm2PHSrJDs;>1M@My4i4*ZgyOyn*&$r=EPOHxp0+kZd|3C2UqFl#Z|ib zaFuR;T%}t8SLqhSRl0?6m2P2NrCS77=@!LRy2WsnZgE_tTLM?3s>pZ##Op?aFuRdT%}tNSLxQrRk{sum2N{^rP~Ns={Cky zx*y>x-6pt7w<)gD{TNs2Hp5lA&2g1(3tXl939iy@iK}#5;VRwMxJtJTuF`Fbt90Ap zD&6+DO7~M-rP~2l>2}0bx}9*9?q|44w==HN?SiXxyW%R{Zn#RfJFe30fva?T;ws(G zag}Z_T&3F^SLyb_Rl0p~m2N*=rQ07@=?=hEx&v{Q?iaX9_e)%*`xUOz9fYfNzs6O% z-{30U!MI9y2(Ho{imP;o;VRv4ah2|HT%|h#SLu$#Rl1{amF{R!>5j!!y5n$_ z?s#0K`yH;*oq(%!C*msI?{SsxBwVFC8CU5}!Bx6bah2{gT%|i5SLx2cRk|~AmF^F? zN_Q5n(w&W~bm!nI-MP3*cOI_NosX+@7vL)0g}6$05w6l*jH`5);40mvxJq{!uF_qO zt8`c3D&3X1N_Q2m(p`v5It23)1P5m)K{ zf~#~l;VRwDxJq{muF~C#t8};FD&6h4N_PjY()|@z>F&f;y1Q_d?rvPAy9Zb4?!{HQ z`*4-+eq5z{09WZA#8tY7aFy<1T%~&iSLq(bRl3J;mF{s|rF#Nb>HdbRbWh?c-QRJQ z?jN{H_Y|(uJ&mh$&)_QEv$#t4Ph6#Y4p-@($5px)aFy;wT%~&nSLt5HRk~MjmF`ts zrF#um>0ZZGx;Jo@?oC{!dka_T-o{nBcW{;NU${#5F0RtOhpTk&<0{<;xJvgSuF`#k zt8^dZD%~fzO7|(Q(tU=jbf4oY-50n@_a&~H@HgoEw0l28&~Q6gR6A^ z#Z|ih;VRvCxJoy|1OtMMh^w3%30LVx##OpeaFuRUT%{WgSLsH_Rk|^7m2OO2r5g)Z z>Bh!Yx^ZxoZd_cY8xL3M#>Z8<32>EeLR_Vr2v_MQ##OpWaFuRST&0@~SLr6lRk|r~ zm2OI0rJD*@>88e2x@mBgZdzQWn+{j$rpHyf8E}E^~&x_NMwZeCoan-5p%=EqgK1#p#aL0qL<2v_MA##OpS zaFuRRT%}tKSLqhVRk|f`m2OE~rCSPD>6XS-x@B;cZdqKVTMk$0md929kCA!W0>Cf; z7+Tx5ZM$8$+O}=m)@s|fZQHhOYsnX+4|%&My7_UHZUJ1STM$?27Q$7!g>jW`5nQGF zFRs!pimP;s;VRwYxJtJKuF@@ut8`1@D&5k!O1BKI(k+Xtbj#r?-SW6fw*s!xt%$31 zE8!~L%D76m3a-+vimP<1;VRwgxJtJMuF|cEt8{DOD&5++O1BQK(yfcDbnD?N-TJsn zw*juwZHTLM8{sP5#<)ti39iy@imP;+;VRwcxJtJLuF`FZt8`o8D&5w&O1BNJ(rt^Y zblc%7-S)Ujw*#)y?TD*%JK-wb&bUgq3$D`bimP!>5j!!y5n$_?s#0KI{{bePQ+EZlW>*pWL%{?1y|`##Z|h~ zaFyCVMfy7O?A?tEOOy8u_|F2q&3i*S|hVqB%W z1Xt-U#Z|h?aFyrMm`K>8{09y6bS2?s{CMy8&0}Zp2l( zn{buxW?ZGa1y|{A#Z|i7aFyF&ii6;hj5kdVO*tq1Xt-E#Z|h;aFy7K<^ zy613}?s;6LdjVJJUc^E6Xvy7zFE?tNUP`v6zzKEzeJk8qXlV_c>C1Xt-k#Z|h`aFyAuBPy6{0_Uj!KtSGgMqSLp`ERk}fNm2Oa6r5g-a=?2GD zx*>3tZb)3E8wywHhQ?L8VQ`ghSX`wW4p-@h$5px!aFuRET%{WcSLsH^Rk~4dm2OmA zr5g=b=|;y@x-oE-ZcJRI8w*$I#>Q2;ad4GxTwJ9a4_E2N$5pxsaFuRCT&0@`SLr6k zRk}%Vm2Og8rJD>_=_bcjx+!p#Zc1FGn+jLyrp8seX>gTpT3n@@4p-@>$5px+aFuRG zT&0@{SLtTPRk~Slm2OsCrJD^`>1M}Ox;b!_ZcbdKn+sRz=EhaJd2p3(UR2||ay4`V=ZVz0g+Y?vm_QF-Vy>XRpA6%u|7gy=_!&SQdah2`>T%|h@SLqJI zRl0+5mF^H+r8^W?=?=qHy2Ejm?g(6^I}%svj>1*Cqj8n)f4E9_46f20i>q|U;VRwn zxJq{duF{=|t8^#fD&5JrN_Psb(w&N{bf@7e-RZbWcLuJ~or$Y-XW=T{*|q|!;VRwvxJq{cuF_qIt8^FPD&57nN_Ppa(p`$HbeG{O-Q~DScLlD}U5Tr7SK%t% z)woJ`4X)B%i>q|k;VRwrxJq{euF~Czt8_QvD&5VvN_Pvc(%p)ybhqIu-R-zacL%Q0 z-HEGoci}4C-MC7353bVPi>q|^;VRwzxJvf`uF^e-t8@?HD&51lO7{q^(mjf+bdTXG z-Q&1Q_XMueJ&CJyPvI)v)3{3a46f2Wi>q|c;VRwpxJvf|uF}1Tt8_2nD&5PtO7{w` z(!GkSbg$tm-RrnY_Xe)gy@{)IZ{aH4+qg>i4zAL@i>q|+;VRwxxJvf{uF`#ot8^dX zD&5DpO7{t_(tV1nbf4iW-RHPU_XV!feTl1dU*Rg<*SJde4X)CCi>q|s;VRwtxJvf} zuG0O8t8_o%D&5bxO7{z{(*267bid&$-S4E_2(x&?5RZb4k7TL@R_7RFV&MR1kw zzqm@bD6Y~ihO2ao<0{<}xJtJquF@@qt8`1_D%~=;O1CVo(k+Lpbj#x^-3qu$w<506 zt%R#|E8{BND!59wDz4J4hO2a|<0{=6xJtJsuF|cAt8{DQD&0D`O1Cbq(yfQ9bnD|P z-3GWyw;`_5ZG@|I8{;b7Cb&wsDX!9OhO2a&<0{=2xJtJruF`FVt8`oAD&01?O1CYp z(rt&Ublc-9-43`)wD&7BZmF^f^r8^c^>5juyy5n(`?gU(=I}umuPQq2XlW~>q6kMe{6<6s_ z!&SP|ah2{2T%|h`SLx2eRl2irmF^r|r8^f_>CVGdy7O_B?gCt;yAW6DF2Ys1i*c3i z5?rOb6j$jk!&SP=ah2{0T&24bSLv?8Rl2KjmF^l`rMnha>8`_7y6bV3?gm_?yAfCE zZo*Z%n{k!y7F?yf6<6tQ!&SQ5ah2{4T&24cSLyD;Rl2)zmF^x~rMnkb>F&c-y8CgJ z?g3n-dk|OY9>P_+hjEqe5nQEv6j$jU!&SP+ah2`~T%~&wSLvR@Rl28fmF^i_rF#}v z>7K(?y616~?gd<>dl6UZUcyznmvNQu6E6Rty7zIF?gLz<`w&;@KEhSHk8zdm6I`YH6j$j!!&SP^ah2{1T&4RG zSLwdORl2WnmF^o{rTZ3F>Au5Ny6^^e!^9{pK+D$7hI+L6<6tg!&SQ9 zah2{5T&4RHSLy!3Rl2`%mF^#0r5j-6e-UIrT;*;cT%{WrSLp`9Rk}fOm2NOxr5hYq z>4v~nx*>6uZYW%(8yZ*XhQU?3VR4miI9#P09#`o`z*V{tag}Z)T%{WsSLsHBhiSx-oH;ZY*4-8yi>Y#=%v(adDMyJY1z4A6Mxnz*V{lag}Z&T&0^B zSLr6fRk}%Wm2NUzrJEdA>88L{x+!s$ZYo@*n;KW?romOZX>pZqI$Wij9#`pRz*V{# zag}Z+T&0^CSLtTKRk~Smm2Ng%rJEgB>E^&yx;b%`ZZ2G zZcSXJTMJj|*2Y!3b#Rq#U0kJG4_E2d$5pxwaFuRDT&3FxSLrs!Rk}@Zm2Oj9rP~Zw z={Cnzx-D>(ZcALH+X`3dw#HSuZE%%tTU@2v4p-^6$5px=aFuRHT&3FySLt@fRk~ep zm2OvDrP~cx>2}9ex;=1}ZckjL+Y49e_QqAZeQ=d-UtFcz4_E2-$5pxmaFy;rT%|h* zSLqJMRk}lPmF`enr8^8)=?=$Lx+8Fv?nqpvI|^6nj>c8G|KTd#F}O;1EUwZWhpTkQ z<0{<=xJq{-uF{=^t8^#hD%~l#N_Q%*(w&B@bf@Dg-5Iz_cP6gVorSA(XX7f}Ik-x9 zF0Rs@hpTkw<0{<+xJq{+uF_qEt8^FRD%~ZxN_Q!)(p`qDbeH2Q-4(b>cO|aUU4^T3 zSK}((HMmN5Ew0jChpTkg<0{<^xJq{;uF~Cvt8_QxD%~x(N_Q)+(%puubhqOw-5t0} zcPFmW-G!@kcjGGEJ-AADFRs$vhpTk=<0{<)xJvgRuF^e(t8@?JD%~TvO7|$P(mjT& zbdTdI-4nP<_av^;J%y`uPva`xGq_6kEUwZ$hpTkY<0{H@HgoEw0jihpTko<0{<` zxJvgUuG0O4t8_o(D%~%*O7|{e`P^f8#3MKe$Raz$pJB z$bh)Y-9WfXH!!Z!4T7t5gW@XPV7N**IIhwSfva>w;ws%xxJoxPuF?&It8~NSD&26n zN;f>N(v5(tbR*&_-AK4fH!`l$je@Imqv9&vXt+u@I=;ws%# zxJoxQuF_3|t8~-iD&2IrN;f^O(#?RYbTi^A-AuSjH#4r%&4R0Rv*Iet&FR5tKcf#s<=wG8m`i;40mb zxJq{vuF@Tit91XvRk~wvmF`$vr8^E+>5j)$x)X4f?nGRrI|*0mPR3QbQ*f2;R9vMy z4Oi(-$5pyBaFy;%T%|h;SLx2iRl0LCVShx(jfX?m}Fpy9ih5F2+^5 zOK_F$Qe36G3|Hwc$5py3aFy;#T&24TSLv?CRk~|%mF`+xrMnJS>8{6Bx*Kqn?nYdt zy9rn6ZpKx*TX2=`R$QgK4Oi)I$5pyJaFy;(T&24USLyD?Rl0j{mF`|#rMnMT>F&o> zx(9HT?m=9odk9zQ9>!I=M{t$yQCy{a3|HwM$5px~aFy;!T%~&oSLvR{Rk~+zmF`(w zrF#xn>7K_`x)*Sj?nPXsdkI(RUdC0rS8$c?Ra~We4Oi)2$5pyFaFy;&T%~&pSLxoy zRl0X@mF`_!rF#!o>E6dxx({%b?n7Lq`v_O*KE_qLPjHp)Q(UF{3|Hws$5py7aFy;$ zT&4R8SLwdSRl09*mF`AuHRx*u?r?nhju`w3U+e#TY0UvQP~S6rq04Oi)Y z$5pyNaFy;)T&4R9SLy!7Rl0w0m2QAh|3#1iah1D)aFuRgT%{WXSLp`DRl31&m2Plc zr5gfQ>4wBrx}k8DZfIPk8wOYDhQ(F7;c%61cwD6$0axip#8tYHaFuRkT%{WYSLsH@ zRl3n|m2Pxgr5giR>BhuWy0LJTZfsno8wXeE#>G{-@o<%Hd|aiQ09WZI#8tY9aFuRi zT&0@?SLr6jRl3P=m2PrerJDj*>88Y0x~XuLZfabmn+8|uro~md>2Q^9dR(QO0axi} z#8tYPaFuRmT&0@@SLtTORl3=5m2P%irJDm+>E^^$y18(bZf;zqn+I3v=EYUI`EZr) zKe$RaKd#a(fU9&1;ws%jxJtJ$uF@@nt91XxRk}rSm2NRyrCS_V>6XA%x+QUyZYf-) zTN+pCmcdoJWpR~mIb5Y%9#`pBz*V{xag}Z*T%}tXSLs&4Rk~Gim2Nd$rCS|W>DIti zx;1f?ZY^A;TN_vD*1=V}b#aw$JzS+*A6Mx%z*V{pag}Z(T&3F>SLrsvRk}@am2NX! zrP~}=>9)XCx-D^)ZYx}++ZtEtw!u}pZE=-uJ6xsP9#`phz*V{(ag}Z-T&3F?SLt@a zRk~eqm2Nj&rQ01>>Gr@?x;=4~ZZBM=+Z$Ku_Q6%UeQ}j;KU}5TA6MxPz*V{fah2{M zT%|i0SLqJHRk}lQmF_THr8^u~>5jlvx+8Iw?kHTPI~rH%{)ek{$KWd6vA9Zi9InzG zkE?Vi;40mTxJq{tuF{>1t8}N}D&48LN_QHr(w&a0bZ6iy-I=&bcNVVFosFw>=in;c zxwuMq9t8|axD&3>FO7|G9 z(mjr=bWh+a-IKUV_Y|(uJ&mh$&)_QEv$#t49InzmkE?Vq;40mVxJvgDuF}1Xt8}m6 zD&4ENO7|MB(!GwWbZ_7)-J7^d_ZF_wy^X7M@8BxkySPgC9D&42JO7|JA(tVDrbYI{q-IusZ_Z69-ORX3Hw&)P&5EmZv*9Y;?6^ud z2d>i1iK}#T;VRwSxJowD&2o@m2Q4qrCR`3=@!IQx`l9+Zed)dTLf3> z{)?-0i{dKXVz^4TIIhwyfva>&;ws%zxJtJ)uF@@ot8~laD&2CpO1C_&(yf52bSvU2 z-AcGhw=%BMt%9p`tKur%YPd?bI|;ws%%xJtJ*uF`FTt90Aq zD&2OtO1C|(((Qn&bUWfI-A=elw==HN?SiXxyW%R{Zn#RfJFe30fva?T;ws%! z;ws%yxJq|4uG0MvSLu$yRk~wwmF_rPr8^#1=}y2^x)X7g?j&5LI~iB$PQg{WQ*o8< zG+d=S9arhjz*V|4ah2{YT%|i3SLx2dRl0L=mF_%Tr8^&2=`O%kx(jiY?jl^JyBJsL zF2Pm0OL3L%GF+v*99QYCz*V{{ah2{WT&24jSLv?7Rk~|&mF_xRrMn(i>2APPx*Kto z?j~HNyBSyMZoyT$TXB`{He98<9arh@z*V|Cah2{aT&24kSLyD-Rl0j|mF_-VrMn+j z=^nsUx(9KU?jc;Idl*;g9>G<*M{$+zF0ZE9x)*Vk?j>BMdl^^hUcptmS83+afx*u_s?k8NO`x#g1e!*3`UvZW0H(aIr z9ari8z*V|Gah2{bT&4RPSLy!2Rk{I2{}(|9#8vJF!d1F~ag}ZmT%{WnSLp`BRl31( zm2L=Jr5h4g>4w5px}kBEZWvsp8x~jThQn35;c=C21YD&X5m)I(!d1GFag}ZqT%{Wo zSLsH>Rl3n}m2M1Nr5h7h>BhoUy0LMUZX8^t8y8pU#=}**@o|-I0$in=5Lf9Y!d1G7 zag}ZoT&0^7SLr6hRl3P>m2L`LrJE90>88R}x~XxMZW>&rn-*8;ro&ab>2Z~A23)0^ z5m)JE!d1GNag}ZsT&0^8SLtTMRl3=6m2M7PrJEC1>E^;!y18+cZXR5vn-^E<=EGIG z|KKX!{J2WD0It$4h^ur9;VRw2xJtJOuG0M%SLqhTRl3D+m2PodrCS15>6XM*x}|WH zZfRVlTLxF@mc>=N<#3g5d0eGi0axi(#8tYLaFuRlT%}tDSLs&8Rl3!1m2P!hrCS46 z>DI(my0vhXZf#tpTL)L^*2Pu2^>CGLeO#s609WZY#8tYDaFuRjT&3FtSLrszRl3b^ zm2PufrP~5m>9)jGx~*`PZfjhn+Xh$Zw#8Mt?QoTDdt9a40axjE#8tYTaFuRnT&3Fu zSLt@eRl419m2P)jrP~8n>Gs4`y1j6fZf{(r+Xq+a_Qh4Y{cx3Te_W+I09WY_#8tY3 zaFy<0T%|h%SLqJLRl37)mF{p{r8@#w>5jxzx}$KF?r2=4`yZ~-9fPZM$Kop8akxr% zJg(B6fU9&T;ws%qxJq|2uF{=?t8}O0D&1+gN_RT0(w%{;bZ6o!-C4LwcQ&rlor9}% z=i(~edALexm-Gi%i_u?wueYi?@Kd#a}fU9&5;ws%kxJvghuF^e%t8|azD&1qa zO7}Rf(mjEzbWh?c-BY+q_cX53J%g)s&*CcGbGSyXKCaSzfU9&L;ws%o zxJvgiuF`#it8|~@D&1$eO7}Ug(tUxebYJ2s-B-9u_cgB4eS@oX-{LCWceqOTJ+9LI zfU9&r;ws%wxJvgkuG0O2t8~BOD&23mO7}ai(*1#}bbsP1-Cwv$_cyN6{e!D?1B~%6 zf((eO+zo`QbOYlm-5|J1Hz=;s4Th_9gX1dQ5V%S=B(Bm8g{yQ!<0{=SxJoxHuF?&M zt8~NTD%}XUN;e{|(v5_xbR**`-6*(9H!7~ujfSgqqvI;w7`RF|Ca%(rg{yR9<0{=a zxJoxJuF{Q%t90YzD%}LQN;e^{(oKY`bQ9w$-6Xh5Hz}^tO@^y8(yfTA zbSvR1-O9L1w+gP(t%|F3tKll$>bOd`2CmYriK}#L;VRwQxJtJUuF|cGt90w(D&6|H zO1A;7(rt*VbQ|F+-Nv{|w+XJ&ZHlXOo8c~2d>iXiK}#b;VRwU zxJtJVuF~y`t91L}D&79LN_POR(jADabO+%o-NCp@cL=W19g3@Thv6#S;kZh71g_E@ ziK}!+;VRwHxJvgwT%|h(SLu$$Rl4JFmF{?4r8@yv=}yE|x|48~?qpo0I|WziPQ_Ka z({PpUbX=u716S$J#8tYpaFy2AbT zx|?v7?q*!2y9HP2ZpBr)+i;ccc3h>q16S$p#8tYxaFyRl56dmF|9A zrF#HZ=^n&Yx`%L;?qOV|djwbM9>rC<$8eSIaa^T)0$1st#8tYdaFy<9T%~&kSLvR` zRl4VJmF{_5rF#Ka>0ZQDx|eX3?qyu1dj(hNUd2_q*Kn2YbzG%;16S$Z#8tYtaFy3+mjx}R{B?q^)3`vq6&e#KR~-*A=g zcU-0W16S$(#8tY#aFy4wHtx?ymYZdhEU8xB|LhR0R95pb1mL|mmC30LVx##OpeaFuRU zT%{WgSLsH_Rk|^7m2OO2r5g)Z>Bh!Yx^ZxoZd_cY8xL3M#>Z8<32>EeLR_Vr2v_MQ z##OpWaFuRST&0@~SLr6lRk|r~m2OI0rJD*@>88e2x@mBgZdzQWn+{j$rpHyf8E}E^~&x_NMwZeCoan-5p% z{)4M@^W!Sr0=P=IAg6XG( zx}|ZIZW&yqTNYR8mcv!L<#Cm61ze?D5m)I}!d1GJag}ZrT%}tTSLs&6Rl3!2m2M4O zrCSqM>DIzky0vkYZXH~uTNhX9*27i0^>LMM16-xs5Lf9o!d1GBag}ZpT&3F-SLrsx zRl3b_m2L}MrP~r$>9)dEx~*}QZW~;s+ZI>pw!>Ar?QxZE2VAAw5m)JU!d1GRag}Zt zT&3F;SLt@cRl41Am2MAQrP~u%>Gr}^y1j9gZXaBw+ZR{q_QO@W{c)A<09>Uz5Lf9A z!d1G1ah2{6T%|h{SLqJJRl37*mF@^!r8^Q=>5jrxx}$NG?ti#ScMPu59gC}U$Kfj7 z@wiHN0A_YAJmJ&UV!&*3WF^SDa)0(tU}mbYI~r-PgEE_YJPneT%Df-{C6V_qa;; z1Fq8jh^urz;VRwFxJvg6uG0OAt8~BND&6n6O7{n@(*236bbsM0-QT!M_Ybbp4KUWf z2r?k9ayJmJ(hZEObc5h3-JrNiHyEzc4UVgHL*Odikhn@W6t2<@jjMFS;40m)xJox1 zuF?&Ut8^paD&2^?rCSJB=@!OSx~tK%x&8n{ZgCa%)0g{yRH<0{=cxJtJ!uF|cCt90w* zD%}RSO1B}d(rtvRbQ|L;-6pt7w<)gDZHB9Ko8v0o7Pv~cC9cwKg{yR1<0{=YxJtJz zuF`FXt90ArD%}paO1C4f((Qz+bUWiJ-7dIFw=1sF?S`v#yW=X|9=J-kC$7@%g{yRX z<0{=gxJtJ#uF~y?t91M0D%}CNN_QZx(jA1WbO+-q-66P2cPOsX9fqrPhvO>U5x7cs zB(BmOg{yQ&<0{?%aFy;DT%|h}SLu$!Rl4JGmF@&wr8^N<=}y8`x|4C0?i5_5I~7;y zPQz8Y({YvV3|yr<6IbcZ!d1Gnah2{IT%|h~SLx2fRl4(WmF@yurMnPU=`O-mx{Gm@ z?h;(3yA)UHF2hy2%W;+N3S6bT5?AT2!d1Gfah2{GT&24fSLv?9Rl4hOmF@;yrMnSV z>2AVRx|?y8?iO67yA@aIZo^f&+i{id4qTZ0-$8nYJ30$Rn5?AS-!d1Gbah2{FT%~&! zSLvR^Rl4VKmF@*xrF#)q>0ZKBx|ea4?iF06dlgsdUc*(o*Kw8Z4P2#r6Ibcp!d1Gr zah2{JT%~&#SLxovRl4_amF@#vrTY+9={~|$x{q;{?h{<4`xIB{KEqYI&vBLR3tXl9 z5?ATI!d1Gjah2{HT&4RKSLwdPRl4tSmF@>zrTY3+ghx}R~C?iXC8`xRH|e#2F| z-*J`h4_u}D6Ibc}!d1Gzah2{LT%{Xe?0*qtKwRZ+AY7#z7+2{A!Bx6Jag}Z`T%{Wv zSLuepRk|T@m2N0pr5hSo>4w2ox?ypZZa7?}8y;8bM!;3N5pk7nBwVE%8CU5>!Bx6Z zag}Z~T%{WwSLw#URk|^8m2NCtr5hVp>BhlTx^Z!pZaiG28y{EcCcss?32~KfB3z}L z7+2{g!Bx6Rag}Z|T&0^FSLvp}Rk|s0m2N6rrJEX8>88O|x@mEhZaQ40n;uu`X24at z8F7_vCS0YP8CU6M!Bx6hag}a1T&0^GSLx=!Rk}HGm2NIvrJEa9>E^*zx_NPxZa!S4 z`wy6XS-x@B;cZdqKVTMk$0md91P6>ybqMO>v@30LV>##OpiaFuRVT%}tLSLs&ARk}5B zm2OR3rCSSE>DI9)pIx@~ZkZd+WX+YVRhw#QYv9dMOyM_i@b30LWM##Opq zaFuRXT&3F$SLt@gRk}TJm2OX5rP~Wv>GsA|x_xk!ZeLub+YeXi_QzGa18|k@KwPCe z2v_M2##OpQaFy;*T%|h5j%#y8q!S-7&aIcPy^b9fzxQ z$Kxv93AjpkBCgV%gsXHX<0{=LxJq{_uF{=`t8}O1D%}~lN_Qr%(w&8?bZ6r#-8r~Q zcP_5dorkM*=i@5f1-MFgA+FM0gsXHH<0{=HxJq{^uF_qGt8|y+D%};hN_Qo$(p`nC zbXVgl-8HyMcP*~cU5Bf5*W)VP4Y*2oBd*fjgsXHn<0{=PxJq{`uF~Cxt8};HD%~Bp zN_Qu&(%prtba&$_-95NUcQ3Be-G{4m_v0$v1Gq}}AgnOW-QqlDJB@6t2=OjjMFa;40m+xJtJiuF@@!t8^>iD&2~> zO1BcO(yffEbgSSh-Kw}sw;Ha}t&Xd7Yv3x~nz%~07Ov8*jjMF);40m^xJtJkuF|cK zt8^RSD&2;-O1BZN(rt{ZberHR-KMxow;8U|ZH}vSTi`0)mbgl{6|T~4jjMFq;40m= zxJtJjuF`Fft8_cyD&3B_O1BfP((R0^bi3dx-LAMww;Qg~?T)K-d*CYFp14Z47p~In zjjMF~;40m|xJtJluF~y~t8@q8D&2v&N_P;h(jAPebcf(7-J!TjcNnhH9geGXN8l>m zk+@2C6t2=8jjMG3!&SOtaFy;@T%|h>SLu$&Rk{;!mF`4br8@~%=}yK~x>InK?o?c* zI}KOqPRCWcGjNseOkAZq3s>pR##Op=aFy;{T%|h?SLx2jRk{msmF_}ZrMn1M=`O}q zx=V1C?owQ(y9`(9F2_~6D{z(WN?fJ83Rmf_##Op&aFy;_T&24XSLv?DRk|B+mF`Ad zrMn4N>2AhVx?6CS?p9o-yA4px##Op|aFy;}T&24YSLyD@ zRk{aomF_`YrF#fh=^n;ax<_!8?onK&dkk0U9>-O>CvcVSNnE9S3Rmf###Op!aFy;^ zT%~&sSLvR|Rk{~&mF`7crF#ii>0ZWFx>sph z##Op^aFy;|T%~&tSLxozRk{ywmF`1arTYk1=|09)x=(PG?o(W)`wUm3+slx?gaW?pIu;`wds= ze#ce1KX8@qPh6$@3s>p>##Oq1aFuR=asNe-0dbYPfpC>>U|gje1Xt+>#Z|h&aFuRw zT%{WVSLuetRl1>Ym2PNUr5grU>4wEsy5Vq@Zg^a!8v$48M#NRRk#Lo6WL%{i1y|`t z#Z|h|aFuR!T%{WWSLw#YRl2com2PZYr5guV>BhxXy76$8ZhTy&n*dkoCd5^`iEx!} zVqB%01Xt-M#Z|h=aFuRyT&0@=SLvq2Rl2Egm2PTWrJDv<>88b1y6JG0ZhBm$n*mqp zX2eyxnQ)bEW?ZG41y|{2#Z|i5aFuR$T&0@>SLx=&Rl2!wm2PfarJDy=>E^{%y7_RG z?mxInH$Se@Er6?Z3*su>Lbyt|Fs{-qf~$1@#Z|gRag}Z{T%}taSLv3(Rk|f{m2N3q zrCS6XD&x@B>dZaG|~TOL>GR=`!d6>*hrC0wOj8CU66!Bx6dag}a0T%}tbSLxQk zRk}5Cm2NFurCS?U>DIwjx^;1tZarM3TOU{HHo#T74RMujBV4817+2{w!Bx6Vag}Z} zT&3F_SLwFERk|&4m2N9srP~@;>9)aDx@~clZaZA1+a6cxcEDA-9dVUzCtRi58CU6c z!Bx6lag}a2T&3F`SLyb^Rk}TKm2NLwrP~`<>Gr`@x_xn#Za-Y5+aFiy4!~8q196q^ zAY7$87+2{I!Bx6Lah2{cT%|i4SLu$xRk|Z_mF_59r8^o|>HdeSbjRQ--LbezcO0(L z9gnMYC*UgGiMUF460XvnjH`5~;40mzxJq{#uF{>3t8{1JD&3j5N_Q5n(w&W~bm!nI z-MP3*cOI_NosX+@7vL)0g}6$05w6l*jH`5);40mvxJq{!uF_qOt8`c3D&3X1N_Q2m z(p`1A-M6?(_Z_a%eUGbj zKj13ekGM+r6Ry(zjH`6N;40m(xJvgMuG0OEt8{q|Q z;VRwmxJowyuF{Q&t8^pbD&5GqN;e9w(v6C%bfe)a-RQVVHwLcKjftytW8o^@*tkkJ z4zALTi>q|w;VRwuxJowxuF_42t8^3LD&54mN;e6v(oKr1bd%vK-Q>7RHwCWJO^K^? zQ{gJz)VNAF4X)Bni>q|g;VRwqxJowzuF}njt8_ErD&5SuN;eCx(#?vibhF_q-R!tZ zHwUiL&55gYbKxr8+_*|N53bV9i>q|=;VRvKaFuR;T%}t8SLqhSRl0?6m2P2NrCS77 z>HdqWbc^CD-D0>(w>YlSErF|aOX4csQn*UDG_KMugR6AQ;ws&8xJtJ?uF|c5t8^>k zD&0!BO1Cnu(yfB4bgSYj-Dw>qxUt%0j_YvL;1TDVHLHm=gGgR6Aw;ws&GxJtJ^ zuF`FQt8^RUD&0o7O1Ckt(rtpPberNT-DbE-w>hrTZGo$FTjDC+R=7&HHLlWagR6Ag z;ws&CxJtJ@uF~y*t8_c!D&0=FO1Cqv((Qt)bi3jz-EO!_w>z%V?SZRwd*UkHUbsrP zH?Gp{gR6A=;ws&KxJtJ_uF@TVt8@qAD&0Z2N_Q}>(j9`Ubcf<9-C?*&cQ~%n9f7NK zN8&2oQMgKXG_KP94_E1q!Bx6rah2{kT%|i6SLsf`Rk{;#mF^^5r8^l{=}y5_x>IqL z?lfGbI~`Z)&cIc=GjWyfEL^2K8&~Ph!Bx6*ah2{oT%|i7SLrUmRk{mtmF^;3rMnnc z=`O)lx=V4D?lN4ZyBt^PuE15gD{+2ASQx?6FT?lxSdyB$~Q?!Z;LJ8_lnE?lL%8&~P>!Bx6@ah2{qT&24o zSLq(WRk{apmF^*2rF$4x=^nvVx<_%9?lD}YdmLBkp1@VQCvlbTDO{y{8dvF_!Bx6v zah2{lT%~&+SLt5BRk{~(mF^{6rF$7y>0ZHAx>s?P?loMcdmUHl-oRD5H*uBjEnKC0 z8&~Px!Bx64rTZ9H={~_#x=(SH?lWAa`y5y4zQ9$w zFL9ObD_o`f8dvGQ!Bx6%ah2{nT&4RSSLuGhRk|N>mF_28rTZCI>3+dgx?gdX?l)Ye z`yE&5{=ikbKXH}rFI=Vj8&~Q6!Bx5e#{U;V2EZm2MbZr5hGk>4w8qy5Vt^ZUkJV8xdFOM#5FPk#Uu76kMen z6<6s-!&SP`ag}ZiT%{WmSLw#WRl2cpm2Mndr5hJl>BhrVy76(9ZUS7Tn-Ev&Cc;&^ ziE))~5?rO56j$jc!&SP;ag}ZgT&0^5SLvq0Rl2Ehm2MhbrJEL4>88U~y6JJ1ZU$VX zn-N#(X2MmvnQ@hF7F?y96<6tI!&SQ3ag}ZkT&0^6SLx=$Rl2!xm2MtfrJEO5>E^># zy8qxR-Tb&pw*aovEr_dh3*jo=!njJe2(Hro7gy;P#Z|h+aFuRxT%}tASLv3-Rl22c zm2PQVrCSD9>6XP+y5(?{Zh2g#TLD+;R>W1hm2j1AWn86O1y|`-#Z|i1aFuR#T%}tB zSLxQoRl2osm2PcZrCSGA>DI+ny7h3CZhc&(+W=STHpErBjc}E2V_c=%1Xt-c#Z|h^ zaFuRzT&3FrSLwFIRl2Qkm2PWXrP~Hq>9)mHy6te4ZhKs%+W}YUcEnY>op6Gs7{y8UpKZhu^*I{;Vd4#ZWu zgK(AZU|gj;1Xt+}#Z|h)aFyt8{1LD&1MQN_RG{(w&2= zbm!tK-Fdi5cRsGtU4W}}7vd`2MYu|LF|N{Gf~$0w;ws%`xJq|9uF_qBt8`c5D&1AM zN_RD`(p`hAbl2i4-F3K1cRjAs-GHlfH{vSYO}I*TGp^Fzf~$15;ws&3xJq|BuF~Cs zt8{nbD&1YUN_RJ|(%plrbob&a-F>)9cR#MuJ%Fop58^7_L%2%!Fs{-)f~$0o;ws%^ zxJvgpuF^e$t8`D|D&14KO7}Fb(mjK#bkE`{-E+7~_dKrBy@0E9FXAfQOSnq+GOp6S zf~$0|;ws&1xJvgruF}1Mt8{PTD&1SSO7}Ld(!GPLbnoIS-Fvu7_dc%DeSoWUAL1(A zN4QG&F|N{mf~$0&;ws%|xJvgquF`#ht8`!DD&1GOO7}Ic(tU%gbl>7C-FLW3_dTxC z{eY`K?fUPAY7#z7+2{A!Bx6Jag}Z`T%{WvSLuepRk|T@m2N0pr5hSo>4w2ox?ypZ zZa7?}8y;8bM!;3N5pk7nBwVE%8CU5>!Bx6Zag}Z~T%{WwSLw#URk|^8m2NCtr5hVp z>BhlTx^Z!pZaiG28y{EcCcss?32_x{fQfLGZem=en*>+sCdE~{$#9i!a$KdG0$1s# z#8tYfaFuRqT&0@^SLvq3Rl4bLm2P@mrJDg)>1M=Lx|wj5Zf0Din*~?tX2n&y*>II^ zc3h>K16S$h#8tYvaFuRuT&0@_SLx=(Rl50bmG1wH%+nSCh5^9P+O}=mU2U(nZQHhO zt+s93wry+47o-n)yC?JED&73JO1A*6f(@`BuF@@pt8@$FD%~QuO1CJk(k+Iobc^FE z-4eJ;wxJvh5T%}tPSLs&5Rl1dNm2MSW zrCSwO=~ly4y47)&ZVg9)pIx@~ZkZd+WX+YVRhw#QYv z9dMOyM_i@b30LWM##OpqaFuRXT&3F$SLt@gRk}TJm2OX5rP~Wv>GsA|x_xk!ZeLub z+YeXi_QzGQ0S>@bx&v{Q?jT&HI~Z5#4#8ErLvfYvFkGcO99QX%z*V{A_YAJmJ&UV!&*3WF z^SDa)0AD-4D1*_am;-{e-J@KjSLhFSttgE3VT0hO2bH<0{=B zxJvgYuG0O5t8{fU9&P;ws%pxJoxNuF{Qyt8}B{D&1(f zN;f*L(v5+ubYtQw-B`FvH#V-)jf1On6XA%x+QUyZYf-)TN+pCmcdoJ zWpR~mIb5Y%9#`pBz*V~c;ws&WxJtJYuF|cHt8}a2D&4BMO1B!W(yflGbZg)$-I};c zw-&C_t&OX6>)I`?TxE+``{|wzPL)aAFk5vkE?VC;40mLxJq{ruF@Th zt8|CpD&3*DN_QBp(jAVgbVuMS-I2ITcNDJD9gVAW$KWd6vA9Zi9InzGkE?Vi;40mT zxJq{tuF{>1t8}N}D&48LN_QHr(w&a0bZ6iy-I=&bcNVVFosFw>=in;cxwuMq92AkWx;t={?oM2# zy9-z8?#5NRdvKNRURb zx+idz?nzvwdkR0ZZGx;Jo@?oC{!dka_T-o{nBcW{;NU0kJm4_E2l$5pxyaFy;uT&4R6SLr^+ zRk}}bmF`nqrTYw5=|0C*x-W2*?n_*y`wCa-zQ$F$Z*Z0FTU@344p-^E$5px?aFy;y zT&4R7SLuGnRk~krmF`zurTYz6>3+vmx<7E0?oV8$`wLg;{>D|he{hv+sCdE~{$#9i!a$KdG0$1s##8tYfaFuRq zT&0@^SLvq3Rl4bLm2P@mrJDg)>1M=Lx|wj5Zf0Din*~?tX2n&y*>II^c3h>K16S$h z#8tYvaFuRuT&0@_SLx=(Rl5J+D&2gzN;f~Q(k+0ibPM7t-9orZw=k~KErP3bi{dKX zVz^4TIIhwyfva>&;ws%zxJtJ)uF@@ot8~laD&2CpO1C_&(yf52bpORwx)pJiZY5l$ zTNzjBR>4)eRdJPWHC&}z9arhrz*V|6ag}Z@T%}tZSLxQlRl0R?m2N#;rCT3Y={CSs zx(#uaZX;Z!+Zb2rHo;Z8O>vcOGhC(H99QYKz*V{}ag}Z>T&3F@SLwFFRl03)m2Nv+ zrQ04?>2|t++~e8?Msbj;nNc;40mnxJq{yuF~C&t919^D&4)fN_QWw(%p}%bPwPv z-GjJF_YkhqJ&db#kKiiZqqs`<7_QPij;nM};40mdxJvgFuF^e?t8~xcD&4cVO7|SD z(mju>bT8m4-HW(N_Y$tsy^O1Luiz@(tGG({8m`j4j;nNU;40mlxJvgHuF}1Yt90++ zD&4!dO7|YF(!GzXbRXa<-G{hJ_YtnreT=JgpWrIpr?^V@8LrZOj;nNE;40mhxJvgG zuF`#tt90MsD&4oZO7|VE(tVGsbU)xK-H*6R_Y=Q4U4OE!{I93@VH7h06XM*x}|WHZfRVlTLxF@ zmc>=N<#3g5d0eGi0axk%i>q`i;ws%rxJtJ&uF|c7t8}a4D&1GZQt%Iv{>*6ZidbmorKCaSjfU9&H;ws%nxJtJ%uF`FSt8|;7TPZG)?H+u|zScDPEnJ+9L2fU9&n;ws%vxJtJ(uF~y-t8}~K zD&20lO1C?%((Qq(bbI0|-Cnp#w>PfR?Srdy`{F9yez;1vKd#apfU9%|;ws%ixJq|0 zuF@TXt8|CrD&1kYN_RM}(j9@TbVuSU-BGwocQmfj9fPZM$Kop8akxr%Jg(B6fU9&T z;ws%qxJq|2uF{=?t8}O0D&1+gN_RT0(w%{;bZ6o!-C4LwcQ&rlor9}%=i(~edALe< zKCaSTfU9&D;ws%mxJq|1uG0MvSLrUnRk}-YmF_ZJrMnzg>8`+4x+`&&?kZfRyBb&N zuEABhYjKtCI$Wi@9#`pZz*V{%ah2{ST&24iSLtrSRk~YomF_lNrMn$h>F&T)x;t@| z?k-%VyBk;O?!i^MdvTTSK3t`{A6Mxfz*V{jah2{NT%~&$SLq(XRk}xUmF_WIrF$G# z>7KwE6Iqx;Jr^?k!xUdmC5j-oaJ6cX5^OJzS-GA6MxAt{Kx-W5+?kilS`x;m2zQI+xZ*i6GJ6xsv9#`ppz*V{* zah2{TT&4RNSLuGiRk~ksmF_oOrTZOM>Hfe~x<7H1?k`-W`x{s3{=rqc0VequK?cNC z?gqkDx`A<(ZV+6h8x&XR2E$dl!Eu#t2wbHb5?ASl!d1GVag}ZuT%{WpSLuesRl4DE zm2L!Fr5h1f=|;j;x{+~}ZWLUl8x>dSM#ELQ(Q%b-3|yrf6IbcR!d1Glag}ZyT%{Wq zSLw#XRl4zUm2LuDrJE2}=_bNex`}a>ZW3Ijn-o{+Cc{;_$#Io#3S6a|5?AS_!d1Gd zag}ZwT&0^9SLvq1Rl4bMm2L)HrJE5~>1M)Jx|wm6ZWdgnn-y2-X2Vsw*>RO_4qT<1 z6Ibcx!d1Gtag}Z!T&0^ASLyzPt90|>D&73JO1A*6(k+OqbPM4s-NLv^w+OD%EsCpj zi{UEW;8()|}#=~l#5x|ML1 zZe?7hTLo9?R>f7i)o_(=bzG%e16S$R#8tYraFuRtT%}tFSLxQpRl42}0bx}9*9Zf9Jj+XYwYcEwe?-Efs|cU-0016S$x#8tYzaFuRvT&3Fw zSLyb}Rl5Cfm2Q7rr8@vu=?=tIx`S|)?qFP{I|Nth4#icv!*G@Ea9pK30$1sd#8tYZ zaFy<8T%|h(SLu$$Rl4JFmF{?4r8@yv=}yE|x|48~?qpo0I|WziPQ_Ka({PpUbX=u7 z16S$J#8tYpaFy^;ws%$xJq|5uF_qDt8~}mD&2LsN_Rc3(%pcobT{HE-A%Yk zcQdZi-GZxhx8f?@ZMaHzJFe2*fva?P;ws%;xJq|7uF~Cut919`D&2j!N_Ri5(mjBy zbPwVx-9xxa_b{%~J%X!rkK!ubW4KE9IIhw?fva>+;ws%!xJvgluF^e&t8~xeD&2Fq zO7}dj(!GGIbT8s6-AlMi_cE^1y@IQBui`4*Yq(1HI-AA}e_c5;0eS)iWpW-UrXShoDIj+)ufva?1;ws%& zxJvgmuF`#jt90MuD&2RuO7}gk(*1y|bU)%M-A}km_cN~2{er7>zv3$0Z@5bLJFe3G zfva?X;ws%=xJvgouG0O3t8@cQ`Y(bEh^yQUgsXG|<0{=CxJoxDuF?&Lt8|0oD%}vc zN;f2~(hY^HbVK7R-7vUHH!QBw4Tr0A!{aL52)If&BCgVngsXHT<0{=KxJoxFuF{Q$ zt8}B|D%}{kN;f91(v5|ybYtTx-8i^PH!iNyjfbmr-8{HTH!rTz{Rda+=EGIG z`EiwQ0bHe95Lf9I!d1G3ag}ZnT%}tSSLqhRRl3D-m2L@KrCSnL>6XG(x}|ZIZW&yq zTNYR8mcv!L<#Cm61ze^3FRs$9h^urf;VRwAxJtJQuF|cFt8}a3D&6Y1O1B2C(yfWB zbZg-%-P*WHw+^n-t&6L4>)|Th`nXEB0j|<*h^urP;VRw6xJtJPuF`Fat8|;;D&6L| zO1A~B(rt;WbX(yn-PX8Dw+*h+ZHudP+ubbH|{-QKuLw-2t;?Tf2)`{63x{8`|8x~p)N?rL16 zy9QV3uEkZl>u{CsdR(Qu0axj6#8tYRaFy<6T&24OSLtrWRl3`7mF{+2rMm-H>F&f; zy1Q_d?rvPAy9Zb4?!{HQ`*4-+eq5z{09WZA#8tY7aFy<1T%~&iSLq(bRl3J;mF{s| zrF#Nb>7K+@x~FiJ?rB`5dj?nOp2bzV=Wvzod0eG?0axi>#8tYNaFy<5T%~&jSLt5G zRl3)3mF{(1rF#Qc>E6Uuy0>tZ?rmJ9dk0tP-o;hA_i&Z&eO#sc09WZg#8tYFaFy<3 zT&4R2SLr^*Rl3h`mF{y~rTYR`>Au8Oy037R?rU77`vzC(zQt9#?{Jmwdt9aa0axjM z#8tYVaFy<7T&4R3SLuGmRl47BmF{<3rTYU{>Hfr3y1#Ih?r&VB`v+I)2AJ$$1Q`%l zxf=*q=?2DCx0bIZd6>Q8x2?KM#ojUF>sY`OkAZK3s>pJ##Op;aFuRc zT%{WiSLw#bRk{gqm2N^@rJD#>=_bZix=C=AZc<#On+#X!CdXB}DR7l;N?fIz3Rmf- z##Op$aFuRaT&0^1SLvq5Rk|5)m2O5{rJD&?>1M`Nx><0QZdP2Sn+;d#X2(^!IdGM3 zPF$s%3s>pp##Op`aFuReT&4RDuF}nit90|@D%}FOO1B`c(k+CmbPMAu-6FV3wM`g)p3<>4P2#L6Ibch!d1Gpag}ZzT%}tVSLxQnRl42|_Zx}9;AZWmmo+Z9*ocEeS=-Eoy}4_u|&6Ibc>!d1Gxag}Z# zT&3F=SLyb{Rl5CgmF@ssr8^K;=?=nGx`T0*?hst1I}}&x4#QQt!*P}F2wbH*5?ASt z!d1GXah2{ET%|h}SLu$!Rl4JGmF@&wr8^N<=}y8`x|4C0?i5_5I~7;yPQz8Y({YvV z3|yr<6IbcZ!d1Gnah2{IT%|h~SLx2fRl4(WmF@yurMnPU=`O-mx{Gm@?ti#ScL}c2 zU5cx8m*Fbi<+w_B1+LOviK}#1;VRwLxJq{ouF_qLt8~}lD&6(CN_PXU(%p!wbT{ED z-Oad4cMGo4-HNMpx8W+??YK&J2d>iHiK}#X;VRwTxJq{quF~C$t919_D&76KO7{S+ z(mjZ)bPwSw-NU#__Xw`iJ&LPzkKroa$pny2CmY*iK}#P;VRwRxJvg9 zuF}1Wt90+-D&70IO7{V-(tU`lbRXd=-N(2}_X)1jeTu7epW!Oq=eSDu1+LP4iK}#9 z;VRwNxJvg8uF`#rt90MtD&60$ z2d>iniK}#f;VRwVxJvgAuF?%K`M(GT|GvF%SjJQfS z6Ry(DjH`6B;40m$xJox0uF}npt8{bVD&3s8N;em-(#?&lbo1aU-MqL;_a9uPn-5p% z=EqgK1#p#aL0qL<2v_MA##OpSaFuRRT%}tKSLqhVRk|f`m2OE~rCSPD>6XS-x@B;c zZdqKVTMk$0md91P6>ydAzqm@bBCgV{gsXHb<0{=MxJtJwuF|cBt8}a5D%~2mO1CDi z(yfK7bZg@(-8#5Rw=S;It%s|0>*Ffj2DnPMA+FMGgsXHL<0{=IxJtJvuF`FWt8|;= zD%}>iO1CAh(rtySbX(&p-8Q&Nw=J&HZHKFL+v6(T4!BCUBd*fzgsXHr<0{=QxJtJx zuF~y>t8}~LD%~EqO1CGj((Q$-bbI3}-9ETVw=b^J?T4#$`{OFz0k}$cAg8`?6x~p-O z?iyUByB1gJuESNj>v5It23)1P5m)JM!d1GPah2{CT&24eSLtrURl3`8mF^B)rMnYX z>F&Z+y1Q|e?jBsFyBAmK?!#5O`*D@-0bHef5Lf9Q!d1G5ah2{7T%~&ySLq(ZRl3J< zmF@{#rF#-r>7K$>x~FlK?ipOAdlpyep2JnT=W&(p1ze?j5m)J6!d1GLah2{BT%~&z zSLt5ERl3)4mF^8(rF#=s>E6Osy0>wa?j2mEdly&f-osV8_i>f(16-y15Lf9w!d1GD zah2{9T&4RISLr^(Rl3h{mF^2%rTY?B>Au2My03AS?i*aC`xaN}zQa|z?{Ssx2VAB5 z5m)Jc!d1GTah2{DT&4RJSLuGkRl47CmF^E*rTY_C>Hfl1y1#Li?jKyG8(@lm5oADI z8yr{ZhQL+2A#s&%C|so*8dvFt!Bx6pag}a3T%{Wx zSLsH;Rk{&zm2M0eJZZuq_8y#2a#=up&F>#e{EL^1<8&~PZ!Bx6( zag}a7T%{WySLr6eRk{grm2M(jrJER6=_bKdx=C@BZZce@n;ci^rodIYDRGr1M%Ix><3RZZ=${n;lo_=D=0D zIdPS4E?lLX8&~P(!Bx6>ah2{rxJox4uF}nqt8@$CD&2y(O1BWM(k+aubc^6B-J-Zk zw-~O{Esm>nOW-QqlDJB@6t2=OjjMFa;40m+xJtJiuF@@!t8^>iD&2o^m2O2`rCSMC z=~l*7x>azMZdF{RTMbv~R>xJkHE@+~OpZ##Op?aFuRdT%}tNSLxQrRk{su zm2N{^rP~Ns={Ckyx=nDEZc|*P+YDFfHpf-EEpU}?OI)Sf3Rmg2##Op)aFuRbT&3F% zSLwFLRk|H;m2O8|rP~Qt>2}6dx?OOUZdY8T+YMLgcE?q^J#dw7Ph6$j3s>p(##Op~ zaFuRfT&3F&SLyc0Rk{OkmF_@Xr8@{$=?=zKxSLu$&Rk{;!mF`4br8@~%=}yK~x>InK?o?c*I}KOqPRCWc zGjNseOkAZq3s>pR##Op=aFy;{T%|h?SLx2jRk{msmF_}ZrMn1M=`O}qy8q!S-6gn6 zcPXyYU52Z4m*Xnk6}U=wC9cw4g{yQ|<0{=XxJq{|uF_qHt8~}nD%}mZN_Qi!(%pos zbT{KF-7UCEcPp;a-G-}lx8o|^9k@z&C$7@ng{yRT<0{=fxJq{~uF~Cyt919{D%}IP zO7|eH(mjN$bPwYy-6Ob4_b9H?J%+1vkK-!c6SzwEB(Bmug{yQ=<0{=VxJvgduF^e+ zt8~xfD%}gXO7|kJ(!GSMbT8v7-7C0C_bRT^y@soFuj4A+8@NjMCa%)Gg{yRL<0{=d zxJvgfuF}1St90+Z{gfVj%tK)6abFs{-Kf~$0c;ws%>xJoxTuF?&G zt8_!+D&0`HN;fpF(hY;Fbi?8*-Eg={H$1M=jex6kBjPIENVrNjGOp5%f~$0+;ws%} zxJoxVuF{Qxt8`=HD&1JPN;fvH(v5?wbmQVG-FUc4H$JY?O@OO(6XGh}M7T;fF|N{0 zf~$0s;ws%_xJoxUuF_3`t8`Q1D&17LN;fsG(oKV_bkpK0-E_E0H$AS>&486XD& zx@B>dZaG|~TOL>GR=`!d|Kcj$invO*60Xv%jH`63;40m!xJtJguF|cJt8{DND&3m6 zO1BoS(yfiFbnD3t8{1JD&3j5N_Q5n(w&W~bm!nI-MP3*cOI_N zosX+@7vL)0g}6$05w6l*jH`72!&SOVaFy;-T&24VSLrUtRk|y1mF`MhrMn7O>8{3A zx@&Ni?pj=>yAD_BuE$ln8*r8GMqH)430LWE##OpoaFy;>T&24WSLtrYRk}NHmF`Yl zrMnAP>F&l=x_fYy?p|D_yAN0C?#ETS2XK|{L0qMK2v_MI##OpUaFy;+T%~&qSLq(d zRk|l|mF`JgrF#lj>7K?_x@T~e?pa)=dk$CWp2twO30LV}##OpkaFy;= zT%~&rSLt5IRk}BDmF`VkrF#ok>E6awx_5Au?p<7^dkAuEQx^Hlm?ps`?`wmy>zQHfx5x_@w$Zh)!&MUVk; zmAip(m2O~Mr5glS=?2ABy1{UjZg5UOMXk4Wm23P5Z#Z|iDaFuR& zT%{WUSLsH?Rl1RIm2PBQr5goT=|;s>y3ufzZggCw8v|GA#>7>+v2c}cY+R)q2UqFF z#Z|iTaFuR+T&0@;SLr6iRl13Am2P5OrJDp-=_bWhy2)^rZgO0un*vwqro>gcsc@BU zYFwq823P5(#Z|iLaFuR)T&0@1M@My4i4*ZgyOyn*&$r z=EPOHxp0+kZd|3C2UqFl#Z|ih;40mGxJoxauF@@lt8@$ED&0c3O1Chs(k+6kbc^CD z-D0>(w>YlSErF|aOX4csQn*UDG_KMugR6AQ;ws&8xJtJ?uF|c5t91XxRk{^%m2M?m zrCS+S=~ls2x>a$NZZ%w`TOC*F*1%P|HF1@0EnKBr8&~Pp!Bx6-ag}a8T%}tdSLrsu zRk{svm2M+krP~-+={CVtx=nGFZZlk^+Z2|?Yx?ORVZZ}+|+Z|Ww_P|xTJ#m$8FI=VD8&~P} z!Bx6_ag}aAT&3F|SLqJGRk{OlmF^&1r8^i`=?=kFxIqL?lfGbI~`Z) z&cIc=GjWyfEL^2K8&~Ph!Bx6*ah2{oT%|i7SLrUmRk{mtmF^;3rMnnc>HdeSbeG^N z-KDrncNwnIU5=}CSKun$mAFcG6|T};O7{`2(tV7pbf4fV-KV%p_ZhCzeU7ViU*Ia;m$*vz z6|T~KjjMFu;40m>xJvgOuF`#vt8_o$D&3E`O7|14(*2C9bid##-LJSx_ZzO#{f?`2 zf8Z+JpSVi*7p~I%jjMG3;40k!Q~!$~1L7)o1K}#&z_>~`2(Ho%imP;k;VRwWxJow! zuF?&Ot8_!*D&5eyN;eFy(hZBNbi?5)-SD_dHv+EGjfkssBjGCD$hb;33a-+PimP;^ z;VRwexJow$uF{Q(t8`=GD&5$)N;eL!(v6F&bmQSF-T1glHvz8FO^B;>6X7b|#JEZ~ z39iyjimP;!;VRwaxJow#uF_43t8`Q0D&5q$N;eIz(oKu2bkpG~-SoIhHv_KH&4{aX zGvO-T%(zN73$D`5imP<9;VRwixJow%uF}nkt8{bWD&5?;N;eO#(#?yjbpOFsy7_RG zZhl;)TL4$-7Q|J$g>aQ_VO*tK1Xt-6#Z|h+aFuRxT%}tASLv3-Rl22cm2PQVrCSD9 z>6XP+y5(?{Zh2g#TLD+;{)?-0E8;5MO1Mh5GOp6Cf~$0^;ws&0xJtJ=uF|c6t8{DP zD&1PRO1Czy(yfE5bnD_O-Fmo6w?3}YZGfwE8{#V6Mz~71F|N{Wf~$0!;ws%{xJtJ< zuF`FRt8`o9D&1DNO1Cwx(rtsQblc)8-FCQ2w>_@X?SQLvJK`$cPPj_9Gp^F@f~$19 z;ws&4xJtJ>uF~y+t8{zfD&1bVO1C$z((Qw*bo=5e-F~=Aw?D4Z9e}HJ2jVK-LAXkH zFs{-af~$0g;ws%?xJq|8uF@TWt8_==D&0}IN_RA_(j9}VbjRW<-Ep`|cRa4roq(%! zC*msINw`XPGOp5{f~$0=;ws%~xJq|AuF{=>t8{1LD&1MQN_RG{(w&2=bm!tK-Fdi5 zcRsGtU4W}}7vd`2MYu|LF|N}64_E0f!Bx6Tah2{eT&24lSLv?6Rk|y2mF_BBrMnte z>8`<5x@&Qj?mAqhyB=5RZopN#8*!EHCS0Yv8CU6U!Bx6jah2{iT&24mSLyD+Rk}NI zmF_NFrMnwf>F&W*x_fbz?mk?lyB}BS9>7()2XU3|AzY<<7+2{Y!Bx6Pah2{dT%~&) zSLvR>Rk|l}mF_8ArF$Az>7Kz=x@U2f?m1kgdmdNmUcgnl7jc#DC0wO@8CU6E!Bx6f zah2{hT%~&*SLxosRk}BEmF_KErF$D!>E6Lrx_5Dv?mb+kdmmTnKEPGF4{??5BV48X z7+2{&!Bx6Xah2{fT&4RQSLwdMRk|;6mF_ECrTZFJ>At~Lx^Hon?mJwi`yN;6e!x|_ zA90oLCtRib8CU6k!Bx6nah2{jT&4RRSLy!1Rk}ZMmF_QGrTZIK>Hfi0x&fy77eNNZ zRqh7DRl0$3m2MDRr5hAi=?249y1{XkZU|hZ8xmLPhQd|4p>dUN7+j?r7FX$p!&SQB zag}ZaT%{WkSLsH=Rl1RJm2MPVr5hDj=|;m1M-Ky4i7+ZVp_f zn-f>*=E7CFxp9?l9$clH7gy>2gR6A&;VRwyxJtJGuF@@tt8@$DD&4}kO1B8E(k+Us zbc^9C-Qu`Pw*;=zEs3jiOW`Wr(zr^u46f2Gi>q|Y;VRwoxJtJIuG0M%SLs&7Rl1dM zm2PERrCSA8=~l&6y47%%ZgpIxTLV|=*2Go1wQ!YgZCs^W2UqFV#Z|iXaFuR-T&3Fp zSLrsyRl1FEm2P8PrP~Bo={Chxy3KHvZgX6v+X7eVw!~Gst#FlYYh0z<23P5}#Z|iP zaFuR*T&3FqSLt@dRl1#Um2PKTrP~Ep>2}3cy4`SOLoZ(OC@ z2UqF##Z|ifaFuRbCI|5hfj>J{E zqi~h(Xk4W`23P5h#Z|iFaFy|HLlWqgR6Ak;ws&DxJvguuG0O0t8_o&D&0@GO7}Ca(*1&~bid*%-EX)`_dBlA z{ei1=f8r|LU${#5H?GqCgR67{O#3f_42Y}T4TP(71LG>)Ah=35D6Y~ChO2ag<0{<{ zxJox9uF?&Kt8_!-D%~)+N;fR7(hY~Jbi?B+-3Yi!HzKamjfAUoBjYOFD7Z>DDz4Iv zhO2a=<0{=4xJoxBuF{Q#t8`=ID&07^N;fX9(v63!bmQYH-2}KwHzBUlO@ym-6XPn~ zB)Cd9DX!8@hO2aw<0{=0xJoxAuF_3~t8`Q2D%~`=N;fU8(oKh}bkpN1-3+)&HzTgn z&4jCTGvg}VEVxQHE3VSbhO2b5<0{=8xJoxCuF}ngt8{bYD&0J|N;faA()|Zl>E^># zy7_UHZUJ1STM$?27Q$7!g>jW`5nQEP6j$jM!&SP)ag}ZfT%}tQSLv3*Rl22dm2Mea zrCSzP>6XJ)y5(_|ZUtPW`!BB2t%$31E8!~L%D76m3a-+vimP<1;VRwgxJtJMuF|cE zt8{DOD&5++O1BQK(yfcDbnD?N-TJsnw*juwZHTLM8{sP5#<)ti39iy@imP;+;VRwc zxJtJLuF`FZt8`o8D&5w&O1BNJ(rt^Yblc%7-S)Ujw*#)y?TD*%JK-wb&bUgq3$D`b zimP zrMm`K>8{09y6bS2?s{CMy8&0}Zp2l(n{buxW?ZGa1y|{A#Z|i7aFyF&ii6;hj5kdVO*tq1Xt-E#Z|h;aFy7K<^y613}?s;6LdjVJJUc^E6Xvy7zFE?tNUP`v6zzKEzeJk8qXl zV_c>C1Xt-k#Z|h`aFyAuBPy63tZb)3E8wywHhQ?L8VQ`ghSX`wW4p-@h z$5px!aFuRET%{WcSLsH^Rk~4dm2OmAr5g=b=|;y@x-oE-ZcJRI8w*$I#>Q2;ad4Gx zTwJ9a4_E2N$5pxsaFuRCT&0@`SLr6kRk}%Vm2Og8rJD>_=_bcjx+!p#Zc1FGn+jLy zrp8seX>gTpT3n@@4p-@>$5px+aFuRGT&0@{SLtTPRk~Slm2OsCrJD^`>1M}Ox;b!_ zZcbdKn+sRz=EhaJd2p3(URxJvh5T%}tPSLs&5 zRl1dNm2MSWrCSwO=~ly4y47)&ZVg2||ay4`V=ZVz0g+Y?vm_QF-Vy>XRp zA6%u|7gy=_!&SQdah2`>T%|h@SLqJIRl0+5mF^H+r8^W?=?=qHy2Ejm?g(6^I}%sv zj>1*Cqj8n)7+j@07FX$x!&SQDah2`_T%|h^SLsf|Rl1XLmF^T=r8^Z@=}yB{y3=u$ z?hIU|I}=yw&cao?vvHN~99*S47gy=d!&SQTah2`@T&24ZSLrUoRl19DmF|DIN_Ppa z(p`$HbeG{O-Q~DScLlD}U5Tr7SK%t%)woJ`4X)B%i>q|k;VRwrxJq{euF~Czt8_Qv zD&5VvN_Pvc(%p)ybhqIu-R-zacL%Q0-HEGoci}4C-MC7353bVPi>q|^;VRwzxJvf` zuF^e-t8@?HD&51lO7{q^(mjf+bdTXG-Q&1Q_XMueJ&CJyPvI)v)3{3a46f2Wi>q|c z;VRwpxJvf|uF}1Tt8_2nD&5PtO7{w`(!GkSbg$tm-RrnY_Xe)gy@{)IZ{aH4+qg>i z4zAL@i>q|+;VRwxxJvf{uF`#ot8^dXD&5DpO7{t_(tV1nbf4iW-RHPU_XV!feTl1d zU*Rg<*SJde4X)CCi>q|s;VRwtxJvf}uG0O8t8_o%D&5bxO7{z{(*267bid&$-S4G9a#UHxRDU4UDUFgWxLNptwpm7_QO{j;nM- z;40maxJow^uF?&St8~NQD&4TSN;e#?(hZNRbR*y@-H5nKHxjPWjf|^wqu?stsJKcu z8m`ifj;nNI;40mixJow`uF{Q-t90YwD&4raN;e*^(v6R+bQ9nz-GsPGHxaJVO^mB_ zli(`dq_|2q8LrYzj;nN2;40mexJow_uF_47t8~-gD&4fWN;e&@(oK)6bTi;8-HfE_2(x&?5RZb4k7TL@R_7RFV&MR1jFQCy{43|HwE$5px|aFuRJT%}tISLv36XV;x)pGh?!UN7w<506t%R#|E8{BND!59wDz4J4hO2a|<0{=6xJtJs zuF|cAt8{DQD&0D`O1Cbq(yfQ9bnD|P-3GWyw;`_5ZG@|I8{;b7Cb&wsDX!9OhO2a& z<0{=2xJtJruF`FVt8`oAD&01?O1CYp(rt&Ublc-9-43`)wD%~--N_Q--(jAAZbjRZ=-3ho# zcOtIRorJ4&C*vyJDY!~^Dz4IuF{=_t8{1MD&0A_N_Q@<(w&E^ zbm!wL-37QxcOkCQU4*N27vn13|8SM=5?rOb6j$jk!&SP=ah2{0T&24bSLv?8Rl2Kj zmF^l`rMnha>8`_7y6bV3?gm_?yAfCEZo*Z%n{k!y7F?yf6<6tQ!&SQ5ah2{4T&24c zSLyD;Rl2)zmF^x~rMnkb>F&c-y8CgJ?g3n-dk|OY9>P_+hjEqe5nQEv6j$jU!&SP+ zah2`~T%~&wSLvR@Rl28fmF^i_rF#}v>7K(?y616~?gd<>dl6UZUcyznmvNQu6E6Rty7zIF?gLz<`w&;@KEhSH zk8zdm6I`YH6j$j!!&SP^ah2{1T&4RGSLwdORl2WnmF^o{rTZ3F>Au5Ny6^^e!^9{pK+D$7hI+L6<6tg!&SQ9ah2{5T&4RHSLy!3Rl2`%mF^#0r5j*|e-UIr zT;*;cT%{WrSLp`9Rk}fOm2NOxr5hYq>4v~nx*>6uZYW%(8yZ*XhQU?3VR4miI9#P0 z9#`o`z*V{tag}Z)T%{WsSLsHBhiSx-oH;ZY*4-8yi>Y#=%v( zadDMyJY1z4A6Mxnz*V{lag}Z&T&0^BSLr6fRk}%Wm2NUzrJEdA>88L{x+!s$ZYo@* zn;KW?romOZX>pZqI$Wij9#`pRz*V{#ag}Z+T&0^CSLtTKRk~Smm2Ng%rJEgB>E^&y zx;b%`ZZ2GJIJZ%AB7yt~dZQHhOyIpPDwr$&3ZQHhO+xC(#$R6@` zPjHoPK3t`nA6MxXz*V{hag}Z%T%}tWSLqhPRk}rSm2NRyrCS_V>6XA%x+QUyZYf-) zTN+pCmcdoJWpR~mIb5Y%9#`pBz*V~c;40mUxJtJYuF|cHt8}a2D&4BMO1B!W(yflG zbZg)$-I};cw-&C_t&OX6>)I`?TxE+``{|wzPL)aAFk5vkE?VC;40mL zxJq{ruF@Tht8|CpD&3*DN_QBp(jAVgbVuMS-I2ITcNDJD9gVAW$KWd6vA9Zi9InzG zkE?Vi;40mTxJq{tuF{>1t8}N}D&48LN_QHr(w&a0bZ6iy-I=&bcNVVFosFw>=in;c zxwuMq92AkW zx;t={?oM2#y9-z8?#5NRdvKNRURbx+idz?nzvwdkR0ZZGx;Jo@?oC{!dka_T-o{nBcW{;NU0kJm4_E2l$5pxyaFy;u zT&4R6SLr^+Rk}}bmF`nqrTYw5=|0C*x-W2*?n_*y`wCa-zQ$F$Z*Z0FTU@344p-^E z$5px?aFy;yT&4R7SLuGnRk~krmF`zurTYz6>3+vmx<7E0?oV8$`wLg;{>D|he{hxV zUtFadV8;I=$bh)Y-9WfXH!!Z!4T7t5gW@XPV7N**IIhwSfva>w;ws%xxJoxPuF?&I zt8~NSD&26nN;f>N(v5(tbR*&_-AK4fH!`l$je@Imqv9&vXt+u@I=;ws%#xJoxQuF_3|t8~-iD&2IrN;f^O(#?RYbTi^A-AuSjH#4r%&4R0Rv*Ie< zY`97{JFe2rfva?L;ws%-xJoxSuF}net90|?D&2gzN;f~Q(k+0ibPM7t-9orZw=k~K zErP3bi{dKXVz^4TIIhwyfva>&;ws%zxJtJ)uF@@ot8~laD&2CpO1C_&(yf52bpOFs zx)pJiZY5l$TNzjBR>4)eRdJPWHC&}z9arhrz*V|6ag}Z@T%}tZSLxQlRl0R?m2N#; zrCT3Y={CSsx(#uaZX;Z!+Zb2rHo;Z8O>vcOGhC(H99QYKz*V{}ag}Z>T&3F@SLwFF zRl03)m2Nv+rQ04?>2|t++~e8?Msbj;nNc;40mnxJq{yuF~C&t919^D&4)fN_QWw z(%p}%bPwPv-GjJF_YkhqJ&db#kKiiZqqs`<7_QPij;nM};40mdxJvgFuF^e?t8~xc zD&4cVO7|SD(mju>bT8m4-HW(N_Y$tsy^O1Luiz@(tGG({8m`j4j;nNU;40mlxJvgH zuF}1Yt90++D&4!dO7|YF(!GzXbRXa<-G{hJ_YtnreT=JgpWrIpr?^V@8LrZOj;nNE z;40mhxJvgGuF`#tt90MsD&4oZO7|VE(tVGsbU)xK-H*6R_Y4wBrx}k8DZfIPk8wOYDhQ(F7;c%61cwD6$0axip#8tYHaFuRk zT%{WYSLsH@Rl3n|m2Pxgr5giR>BhuWy0LJTZfsno8wXeE#>G{-@o<%Hd|aiQ09WZI z#8tY9aFuRiT&0@?SLr6jRl3P=m2PrerJDj*>88Y0x~XuLZfabmn+8|uro~md>2Q^9 zdR(QO0axi}#8tYPaFuRmT&0@@SLtTORl3=5m2P%irJDm+>E^^$y18(bZf;zqn+I3v z=EYUI`EZqPeq5zn09WZ2#8tY5aFuRhT%}tCSLqhTRl3D+m2PodrCS15>6XM*x}|WH zZfRVlTLxF@mc>=N<#3g5d0eGi0axk%gR68a;ws%rxJtJ&uF|c7t8}a4D&1GZQt%Iv{>*6ZidbmorKCaSjfU9&H;ws%nxJtJ%uF`FSt8|;< zD&1zdO1C+#(rtmObX(#o-B!3tw>7TPZG)?H+u|zScDPEnJ+9L2fU9&n;ws%vxJtJ( zuF~y-t8}~KD&20lO1C?%((Qq(bbI0|-Cnp#w>PfR?Srdy`{F9yez;1vKd#apfU9%| z;ws%ixJq|0uF@TXt8|CrD&1kYN_RM}(j9@TbVuSU-BGwocQmfj9fPZM$Kop8akxr% zJg(B6fU9&T;ws%qxJq|2uF{=?t8}O0D&1+gN_RT0(w%{;bZ6o!-C4LwcQ&rlor9}% z=i(~edALe8`+4x+`&& z?kZfRyBb&NuEABhYjKtCI$Wi@9#`pZz*V{%ah2{ST&24iSLtrSRk~YomF_lNrMn$h z>F&T)x;t@|?k-%VyBk;O?!i^MdvTTSK3t`{A6Mxfz*V{jah2{NT%~&$SLq(XRk}xU zmF_WIrF$G#>7KwE6Iqx;Jr^?k!xUdmC5j-oaJ6cX5^OJzS-GA6MxAt{Kx-W5+?kilS`x;m2zQI+xZ*i6GJ6xsv z9#`ppz*V{*ah2{TT&4RNSLuGiRk~ksmF_oOrTZOM>Hfe~x<7H1?k`-W`x{s3{=rqc ze{q#=fSLb~AOqqmcLU)n-N3j?HwdoM4T`IDgW)RO;J8XR1g_EziK}!&;VRwGxJow+ zuF?&Qt8~NRD&6q7N;d+o(v66#bR*#^-N?8~Hwv!Ojf$&uqv0yu=(tKZ2CmYLiK}#D z;VRwOxJow;uF{Q*t90YxD&6?FN;d(n(oKk~bQ9q!-Nd*`HwmuNO^T~@li@1e9-ORX3Hw&)P&5EmZ zv*9Y;?6^ud2d>i1iK}#T;VRwSxJowD&73JO1A*6(k+OqbPM4s-NLv^ zw+OD%EsCpji{UEW;8()|Zl z=~l#5x|ML1Ze?7hTLo9?R>f7i)o_(=bzG%e16S$R#8tYraFuRtT%}tFSLxQpRl42}0bx}9*9Zf9Jj+XYwYcEwe?-Efs|cU-0016S$x#8tYz zaFuRvT&3FwSLyb}Rl5Cfm2Q7rr8@vu=?=tIx`S|)?qFP{I|Nth4#icv!*G@Ea9pK3 z0$1sd#8tYZaFy<8T%|h(SLu$$Rl4JFmF{?4r8@yv=}yE|x|48~?qpo0I|WziPQ_Ka z({PpUbX=u716S$J#8tYpaFy^;ws%$xJq|5uF_qDt8~}mD&2LsN_Rc3(%pco zbT{HE-A%YkcQdZi-GZxhx8f?@ZMaHzJFe2*fva?P;ws%;xJq|7uF~Cut919`D&2j! zN_Ri5(mjBybPwVx-9xxa_b{%~J%X!rkK!ubW4KE9IIhw?fva>+;ws%!xJvgluF^e& zt8~xeD&2FqO7}dj(!GGIbT8s6-AlMi_cE^1y@IQBui`4*Yq(1HI-AA}e_c5;0eS)iWpW-UrXShoDIj+)u zfva?1;ws%&xJvgmuF`#jt90MuD&2RuO7}gk(*1y|bU)%M-A}km_cN~2{er7>zv3$0 zZ@5bLJFe3Gfva?X;ws%=xJvgouG0O3t91Y3D%}9H{2xIE#8vJF!d1F~ag}ZmT%{Wn zSLp`BRl31(m2L=Jr5h4g>4w5px}kBEZWvsp8x~jThQn35;c=C21YD&X5m)I(!d1GF zag}ZqT%{WoSLsH>Rl3n}m2M1Nr5h7h>BhoUy0LMUZX8^t8y8pU#=}**@o|-I0$in= z5Lf9Y!d1G7ag}ZoT&0^7SLr6hRl3P>m2L`LrJE90>88R}x~XxMZW>&rn-*8;ro&ab z>2Z~A23)0^5m)JE!d1GNag}ZsT&0^8SLtTMRl3=6m2M7PrJEC1>E^;!y18+cZXR5v zn-^E<=EGIG`EiwQ0bHe95Lf9I!d1G3ag}ZnT%}tSSLqhRRl3D-m2L@KrCSnL>6XG( zx}|ZIZW&yqTNYR8mcv!L<#Cm61ze^353bU!h^urf;VRwAxJtJQuF|cFt8}a3D&6Y1 zO1B2C(yfWBbZg-%-P*WHw+^n-t&6L4>)|Th`nXEB0j|<*h^urP;VRw6xJtJPuF`Fa zt8|;;D&6L|O1A~B(rt;WbX(yn-PX8Dw+*h+ZHudP+ubbH|{-QKuLw-2t;?Tf2)`{63x{8`|8 zx~p)N?rL16y9QV3uEkZl>u{CsdR(Qu0axj6#8tYRaFy<6T&24OSLtrWRl3`7mF{+2 zrMm-H>F&f;y1Q_d?rvPAy9Zb4?!{HQ`*4-+eq5z{09WZA#8tY7aFy<1T%~&iSLq(b zRl3J;mF{s|rF#Nb>7K+@x~FiJ?rB`5dj?nOp2bzV=Wvzod0eG?0axi>#8tYNaFy<5 zT%~&jSLt5GRl3)3mF{(1rF#Qc>E6Uuy0>tZ?rmJ9dk0tP-o;hA_i&Z&eO#sc09WZg z#8tYFaFy<3T&4R2SLr^*Rl3h`mF{y~rTYR`>Au8Oy037R?rU77`vzC(zQt9#?{Jmw zdt9aa0axjM#8tYVaFy<7T&4R3SLuGmRl47BmF{<3rTYU{>Hfr3y1#Ih?r&VB`v+I) z{>4?g0cQO_f((eO+zo`QbOYlm-5|J1Hz=;s4Th_9gX1dQ5V%S=B(Bm8g{yQ!<0{=S zxJoxHuF?&Mt8~NTD%}XUN;e{|(v5_xbR**`-6*(9H!7~ujfSgqqvI;w7`RF|Ca%(r zg{yR9<0{=axJoxJuF{Q%t90YzD%}LQN;e^{(oKY`bQ9w$-6Xh5Hz}^tO@^yM`g)p3<>4P2#L6Ibch!d1Gpag}ZzT%}tVSLxQn zRl42|_Zx}9;AZWmmo+Z9*ocEeS=-Eoy}4_u|&6Ibc> z!d1Gxag}Z#T&3F=SLyb{Rl5CgmF@ssr8^K;=?=nGx`T0*?hst1I}}&x4#QQt!*P}F z2wbH*5?ASt!d1GXah2{ET%|h}SLu$!Rl4JGmF@&wr8^N<=}y8`x|4C0?i5_5I~7;y zPQz8Y({YvV3|yr<6IbcZ!d1Gnah2{IT%|h~SLx2fRl4(WmF@yurMnPU=`O-my8q%T z-Nm>{cL}c2U5cx8m*Fbi<+w_B1+LOviK}#1;VRwLxJq{ouF_qLt8~}lD&6(CN_PXU z(%p!wbT{ED-Oad4cMGo4-HNMpx8W+??YK&J2d>iHiK}#X;VRwTxJq{quF~C$t919_ zD&76KO7{S+(mjZ)bPwSw-NU#__Xw`iJ&LPzkKroa$pny2CmY*iK}#P z;VRwRxJvg9uF}1Wt90+-D&70IO7{V-(tU`lbRXd=-N(2}_X)1jeTu7epW!Oq=eSDu z1+LP4iK}#9;VRwNxJvg8uF`#rt90MtD&60$2d>iniK}#f;VRwVxJvgAuG0OBt8@d*_J0H!5LdYy2v_L_##OpOaFuRQ zT%{WfSLp`FRk|T?m2OB}r5g%Y>4wHtx?ymYZdhEU8xB|LhR0R95pb1mL|mmC30LVx z##OpeaFuRUT%{WgSLsH_Rk|^7m2OO2r5g)Z>Bh!Yx^ZxoZd_cY8xL3M#>Z8<32>Ee zLR_Vr2v_MQ##OpWaFuRST&0@~SLr6lRk|r~m2OI0rJD*@>88e2x@mBgZdzQWn+{j$ zrpHyf8E}E^~&x_NMw zZeCoan-5p%=EqgK1#p#aL0qL<2v_MA##OpSaFuRRT%}tKSLqhVRk|f`m2OE~rCSPD z>6XS-x@B;cZdqKVTMk$0md91P6>ydAKe$S_BCgV{gsXHb<0{=MxJtJwuF|cBt8}a5 zD%~2mO1CDi(yfK7bZg@(-8#5Rw=S;It%s|0>*Ffj2DnPMA+FMGgsXHL<0{=IxJtJv zuF`FWt8|;=D%}>iO1CAh(rtySbX(&p-8Q&Nw=J&HZHKFL+v6(T4!BCUBd*fzgsXHr z<0{=QxJtJxuF~y>t8}~LD%~EqO1CGj((Q$-bbI3}-9ETVw=b^J?T4#$`{OFz0k}$c zAg8`?6x~p-O?iyUByB1gJuESNj>v5It23)1P5m)JM!d1GPah2{CT&24eSLtrURl3`8 zmF^B)rMnYX>F&Z+y1Q|e?jBsFyBAmK?!#5O`*D@-0bHef5Lf9Q!d1G5ah2{7T%~&y zSLq(ZRl3J7K$>x~FlK?ipOAdlpyep2JnT=W&(p1ze?j5m)J6!d1GL zah2{BT%~&zSLt5ERl3)4mF^8(rF#=s>E6Osy0>wa?j2mEdly&f-osV8_i>f(16-y1 z5Lf9w!d1GDah2{9T&4RISLr^(Rl3h{mF^2%rTY?B>Au2My03AS?i*aC`xaN}zQa|z z?{Ssx2VAB55m)Jc!d1GTah2{DT&4RJSLuGkRl47CmF^E*rTY_C>Hfl1y1#Li?jKyG z`xjT~2AKW-2r?k9ayJmJ(hZEObc5h3-JrNiHyEzc4UVgHL*Odikhn@W6t2<@jjMFS z;40m)xJox1uF?&Ut8^paD&2^nOW-QqlDJB@6t2=OjjMFa;40m+xJtJiuF@@!t8^>iD&2o@ zm2O2`rCSMC=~l*7x>azMZdF{RTMbv~R>xJkHE@+~OpZ##Op?aFuRdT%}tN zSLxQrRk{sum2N{^rP~Ns={Ckyx=nDEZc|*P+YDFfHpf-EEpU}?OI)Sf3Rmg2##Op) zaFuRbT&3F%SLwFLRk|H;m2O8|rP~Qt>2}6dx?OOUZdY8T+YMLgcE?q^J#dw7Ph6$j z3s>p(##Op~aFuRfT&3F&SLyc0Rk{OkmF_@Xr8@{$=?=zKxSLu$&Rk{;!mF`4br8@~%=}yK~x>InK?o?c* zI}KOqPRCWcGjNseOkAZq3s>pR##Op=aFy;{T%|h?SLx2jRk{msmF_}ZrMn1M>HdqW zbQj|)-6gn6cPXyYU52Z4m*Xnk6}U=wC9cw4g{yQ|<0{=XxJq{|uF_qHt8~}nD%}mZ zN_Qi!(%posbT{KF-7UCEcPp;a-G-}lx8o|^9k@z&C$7@ng{yRT<0{=fxJq{~uF~Cy zt919{D%}IPO7|eH(mjN$bPwYy-6Ob4_b9H?J%+1vkK-!c6SzwEB(Bmug{yQ=<0{=V zxJvgduF^e+t8~xfD%}gXO7|kJ(!GSMbT8v7-7C0C_bRT^y@soFuj4A+8@NjMCa%)G zg{yRL<0{=dxJvgfuF}1St90+4w2ox?ypZZa7?}8y;8bM!;3N5pk7nBwVE% z8CU5>!Bx6Zag}Z~T%{WwSLw#URk|^8m2NCtr5hVp>BhlTx^Z!pZaiG28y{EcCcss? z32~KfB3z}L7+2{g!Bx6Rag}Z|T&0^FSLvp}Rk|s0m2N6rrJEX8>88O|x@mEhZaQ40 zn;uu`X24at8F7_vCS0YP8CU6M!Bx6hag}a1T&0^GSLx=!Rk}HGm2NIvrJEa9>E^*z zx_NPxZa!S4n;%!{7Qj`y1#y*bAzY6XD&x@B>dZaG|~TOL>GR=`!d|KKX!invO*60Xv%jH`63;40m!xJtJguF|cJ zt8{DND&3m6O1BoS(yfiFbnD3t8{1JD&3j5N_Q5n(w&W~bm!nI z-MP3*cOI_NosX+@7vL)0g}6$05w6nx7gy;n##OpYaFy;-T&24VSLrUtRk|y1mF`Mh zrMn7O>8{3Ax@&Ni?pj=>yAD_BuE$ln8*r8GMqH)430LWE##OpoaFy;>T&24WSLtrY zRk}NHmF`YlrMnAP>F&l=x_fYy?p|D_yAN0C?#ETS2XK|{L0qMK2v_MI##OpUaFy;+ zT%~&qSLq(dRk|l|mF`JgrF#lj>7K?_x@T~e?pa)=dk$CWp2twO30LV} z##OpkaFy;=T%~&rSLt5IRk}BDmF`VkrF#ok>E6awx_5Au?p<7^dkAuEQx^Hlm?ps`?`wmy> zzQHfx5x_@w$ z?q6J`8(_}=BglZb%H2S?N;fdB(hY*Ebc5n5-C(#%H#n}+4S}n4L*gpkP`FArG_KMO zgR6AI;ws&6xJoxXuF{Qwt8^pcD&0u9N;fjD(v5(w>YlSErF|aOX4csQn*UDG_KMugR6AQ;ws&8xJtJ?uF|c5t91Xt zRk{^%m2M?mrCS+S=~ls2x>a$NZZ%w`TOC*F*1%P|HF1@0EnKBr8&~Pp!Bx6-ag}a8 zT%}tdSLrsuRk{svm2M+krP~-+={CVtx=nGFZZlk^+Z2|?Yx?ORVZZ}+|+Z|Ww_P|xTJ#m$8 zFI=VD8&~P}!Bx6_ag}aAT&3F|SLqJGRk{OlmF^&1r8^i`=?=kFxIqL z?lfGbI~`Z)&cIc=GjWyfEL^2K8&~Ph!Bx6*ah2{oT%|i7SLrUmRk{mtmF^;3rTZ_g z(p`+JbeG^N-KDrncNwnIU5=}CSKun$mAFcG6|T};O7{`2(tV7pbf4fV-KV%p_ZhCzeU7Vi zU*Ia;m$*vz6|T~KjjMFu;40m>xJvgOuF`#vt8_o$D&3E`O7|14(*2C9bid##-LJSx z_ZzO#{f?`2f8Z+JpSVi*7p~I%jjMG3;40m}xJoy`T>nRq0dbYPfpC>>U|gje1Xt+> z#Z|h&aFuRwT%{WVSLuetRl1>Ym2PNUr5grU>4wEsy5Vq@Zg^a!8v$48M#NRRk#Lo6 zWL%{i1y|`t#Z|h|aFuR!T%{WWSLw#YRl2com2PZYr5guV>BhxXy76$8ZhTy&n*dko zCd5^`iEx!}VqB%01Xt-M#Z|h=aFuRyT&0@=SLvq2Rl2Egm2PTWrJDv<>88b1y6JG0 zZhBm$n*mqpX2eyxnQ)bEW?ZG41y|{2#Z|i5aFuR$T&0@>SLx=&Rl2!wm2PfarJDy= z>E^{%y7_RGZhl;)TL4$-7Q|J$g>aQ_VO*tK1Xt-6#Z|h+aFuRxT%}tASLv3-Rl22c zm2PQVrCSD9>6XP+y5(?{Zh2g#TLD+;{)4M@E8;5MO1Mh5GOp6Cf~$0^;ws&0xJtJ= zuF|c6t8{DPD&1PRO1Czy(yfE5bnD_O-Fmo6w?3}YZGfwE8{#V6Mz~71F|N{Wf~$0! z;ws%{xJtJ_@X?SQLvJK`$cPPj_9 zGp^F@f~$19;ws&4xJtJ>uF~y+t8{zfD&1bVO1C$z((Qw*bo=5e-F~=Aw?D4Z9e}HJ z2jVK-LAXkHFs{-af~$0g;ws%?xJq|8uF@TWt8_==D&0}IN_RA_(j9}VbjRW<-Ep`| zcRa4roq(%!C*msINw`XPGOp5{f~$0=;ws%~xJq|AuF{=>t8{1LD&1MQN_RG{(w&2= zbm!tK-Fdi5cRsGtU4W}}7vd`2MYu}$UtFcT7+2{o!Bx6Tah2{eT&24lSLv?6Rk|y2 zmF_BBrMnte>8`<5x@&Qj?mAqhyB=5RZopN#8*!EHCS0Yv8CU6U!Bx6jah2{iT&24m zSLyD+Rk}NImF_NFrMnwf>F&W*x_fbz?mk?lyB}BS9>7()2XU3|AzY<<7+2{Y!Bx6P zah2{dT%~&)SLvR>Rk|l}mF_8ArF$Az>7Kz=x@U2f?m1kgdmdNmUcgnl7jc#DC0wO@ z8CU6E!Bx6fah2{hT%~&*SLxosRk}BEmF_KErF$D!>E6Lrx_5Dv?mb+kdmmTnKEPGF z4{??5BV48X7+2{&!Bx6Xah2{fT&4RQSLwdMRk|;6mF_ECrTZFJ>At~Lx^Hon?mJwi z`yN;6e!x|_A90oLCtRib8CU6k!Bx6nah2{jT&4RRSLy!1Rk}ZMmF_QGrTZIK>Hfi0 zx_@z%Zh*P}k01l$Dt80nD&4@iN;e3u(hZ8Mbc5k4-Qc)NHw3QI4T-CCL*Xjj(6~xB z46f1*i>q|Q;VRwmxJowyuF{Q&t8^pbD&5GqN;e9w(v6C%bfe)a-RQVVHwLcKjftyt zW8o^@*tkkJ4zALTi>q|w;VRwuxJowxuF_42t8^3LD&54mN;e6v(oKr1bd%vK-Q>7R zHwCWJO^K^?Q{gJz)VNAF4X)Bni>q|g;VRwqxJowzuF}njt8_ErD&5SuN;eCx(#?vi zbhF_q-R!tZHwUiL&55gYbKxr8+_*|N53bV9i>q|=;VRwyxJtJGuF@@tt8@$DD&4}k zO1B8E(k+Usbc^9C-Qu`Pw*;=zEs3jiOW`Wr(zr^u46f2Gi>q|Y;VRwoxJtJIuG0Mn zSLs&7Rl1dMm2PERrCSA8=~l&6y47%%ZgpIxTLV|=*2Go1wQ!YgZCs^W2UqFV#Z|iX zaFuR-T&3FpSLrsyRl1FEm2P8PrP~Bo={Chxy3KHvZgX6v+X7eVw!~Gst#FlYYh0z< z23P5}#Z|iPaFuR*T&3FqSLt@dRl1#Um2PKTrP~Ep>2}3cy4`SOLoZ(OC@2UqF##Z|ifaFuRbC zI|5hfj>J{Eqi~h(Xk4W`23P5h#Z|iFaFy|HLlWqgR6Ak;ws&DxJvguuG0O0t8_o&D&0@GO7}Ca(*1&~bid*% z-EX)`_dBlA{ei1=f8r|LU${#5H?GqCgR6A^;ws$$^ZXw{2EZm2MbZr5hGk>4w8qy5Vt^ZUkJV8xdFOM#5FP zk#Uu76kMen6<6s-!&SP`ag}ZiT%{WmSLw#WRl2cpm2Mndr5hJl>BhrVy76(9ZUS7T zn-Ev&Cc;&^iE))~5?rO56j$jc!&SP;ag}ZgT&0^5SLvq0Rl2Ehm2MhbrJEL4>88U~ zy6JJ1ZU$VXn-N#(X2MmvnQ@hF7F?y96<6tI!&SQ3ag}ZkT&0^6SLx=$Rl2!xm2Mtf zrJEO5>E^>#y7_UHZUJ1STM$?27Q$7!g>jW`5nQEP6j$jM!&SP)ag}ZfT%}tQSLv3* zRl22dm2MearCSzP>6XJ)y5(_|ZUtPW`wyrMm`K>8{09y6bS2?s{CMy8&0}Zp2l(n{buxW?ZGa1y|{A#Z|i7aFyF&ii6;hj5kdVO*tq1Xt-E z#Z|h;aFy7K<^y613}?s;6LdjVJJUc^E6Xvy7zFE?tNUP`v6zz zKEzeJk8qXlV_c>C1Xt-k#Z|h`aFyAuBPy6Hfu4x&h|>KY|R1tK1EQt8@e7D%~KsN;fF3(hY{Ibc5q6-4M7+Hzcmo4TY<8L*pvl zFt|!LEUwZGhpTkM<0{<xJvgQ zT%}tPSLs&5Rl1dNm2MSWrCSwO=~ly4y47)&ZVg2||ay4`V=ZVz0g+Y?vm z_QF-Vy>XRpA6%u|7gy=_!&SQdah2`>T%|h@SLqJIRl0+5mF^H+r8^W?=?=qHy2Ejm z?g(6^I}%svj>1*Cqj8n)7+j@07FX$x!&SQDah2`_T%|h^SLsf|Rl1XLmF^T=r8^Z@ z=}yB{y3=u$?hIU|I}=yw&cao?vvHN~99*S47gy=d!&SQTah2`@T&24ZSLrUoRl5J; zD&57nN_Ppa(p`$HbeG{O-Q~DScLlD}U5Tr7SK%t%)woJ`4X)B%i>q|k;VRwrxJq{e zuF~Czt8_QvD&5VvN_Pvc(%p)ybhqIu-R-zacL%Q0-HEGoci}4C-MC7353bVPi>q|^ z;VRwzxJvf`uF^e-t8@?HD&51lO7{q^(mjf+bdTXG-Q&1Q_XMueJ&CJyPvI)v)3{3a z46f2Wi>q|c;VRwpxJvf|uF}1Tt8_2nD&5PtO7{w`(!GkSbg$tm-RrnY_Xe)gy@{)I zZ{aH4+qg>i4zAL@i>q|+;VRwxxJvf{uF`#ot8^dXD&5DpO7{t_(tV1nbf4iW-RHPU z_XV!feTl1dU*Rg<*SJde4X)CCi>q|s;VRwtxJvf}uG0O8t8_o%D&5bxO7{z{(*267 zbid&$-S4q`4%=do;84y>w8wgkF2F6voL2#9B zP+X-O3|Hv}$5px^aFuRIT%{WdSLuevRk~qtm2OyEr5g@c>4wKux)E@dZbV$A8wpqG zM#fdTQE-)RR9vMS4Oi(#$5py9aFuRMT%{WeSLw#aRl0F-m2O;Ir5g`d>Bh%Zx(RTV zZbDq8n+R9wCdO5|NpO{JQe35*3|HwU$5py1aFuRKT&0@|SLvq4Rk~?#m2O&GrJD{{ z>88h3x*2elZbn?Cn+aFxX2w;zS#XtZR$Qf<4Oi)A$5pyHaFuROT&0@}SLx=)Rl0d_ zm2O^KrJD~|>E_2(x&?5RZb4k7TL@R_7RFV&MR1jFQCy{43|HwE$5px|aFuRJT%}tI zSLv36XV;x)pGh?mxInw<506t%R#|E8{BND!59wDz4J4hO2a| z<0{=6xJtJsuF|cAt8{DQD&0D`O1Cbq(yfQ9bnD|P-3GWyw;`_5ZG@|I8{;b7Cb&ws zDX!9OhO2a&<0{=2xJtJruF`FVt8`oAD&01?O1CYp(rt&Ublc-9-43`)wD%~--N_Q--(jAAZ zbjRZ=-3ho#cOtIRorJ4&C*vyJDY!~^Dz4IuF{=_t8{1MD&0A_ zN_Q@<(w&E^bm!wL-37QxcOkCQU4*N2|HW0hi*c3i5?rOb6j$jk!&SP=ah2{0T&24b zSLv?8Rl2KjmF^l`rMnha>8`_7y6bV3?gm_?yAfCEZo*Z%n{k!y7F?yf6<6tQ!&SQ5 zah2{4T&24cSLyD;Rl2)zmF^x~rMnkb>F&c-y8CgJ?g3n-dk|OY9>P_+hjEqe5nQEv z6j$jU!&SP+ah2`~T%~&wSLvR@Rl28fmF^i_rF#}v>7K(?y616~?gd<>dl6UZUcyzn zmvNQu6E6Rty7zIF?gLz< z`w&;@KEhSHk8zdm6I`YH6j$j!!&SP^ah2{1T&4RGSLwdORl2WnmF^o{rTZ3F>Au5N zy6^^e!^9{pK+D$7hI+L6<6tg!&SQ9ah2{5T&4RHSLy!3Rl2`%mF^#0 zrTZ6G=?0kp{|GW5u5vdJuF?&Rt8|0lD&3&CN;ep;(hZKQbVJ}O-H^CSHx#bY4UMaG z!{932u((P$9Inz0kE?Ve;40mSxJow?uF{Q+t8}B_D&45KN;ev=(v6O*bYtKu-I%ya zHx{najg6~xuF_46t8|m#D&3^GN;es<(oK%5 zbW`9e-ITaWHx;hZO^vH`)8H!Iw75z)9j?+%kE?Vu;40mWxJow@uF}nnt8}yAD&4HO zN;ey>(#?*mbaUV;-JG~eHy5tb&5f&c^WZAoytqm?AFk5PkE?VG;40mMxJtJWuF@@x zt8|OtD&3;EO1BuU(k+gwbW7kW-IBOUw-m0@Esd*m%it>AvbajO9InzWkE?Vm;40mJ zaFuRFT%}tHSLs&9Rk~Ghm2OpBrCSYG=~l;8x;1c>ZcSXJTMJj|*2Y!3b#Rq#U0kJG z4_E2d$5pxwaFuRDT&3FxSLrs!Rk}@Zm2Oj9rP~Zw={Cnzx-D>(ZcALH+X`3dw#HSu zZE%%tTU@2v4p-^6$5px=aFuRHT&3FySLt@fRk~epm2OvDrP~cx>2}9ex;=1}ZckjL z+Y49e_QqAZeQ=d-UtFcz4_E2-$5pxmaFy;rT%|h*SLqJMRk}lPmF`enr8^8)=?=$L zx+8Fv?nqpvI|^6nj>c8GV{n!3SX`w$4p-@p$5px$aFy;vT%|h+SLsg1Rk~AfmF`qr zr8^B*=}yO0x-)QzI}2Co&c;=`b8waJTwJ9)4_E2V$5pxuaFy;tT&24RSLyzX zt8^FRD%~ZxN_Q!)(p`qDbeH2Q-4(b>cO|aUU4^T3SK}((HMmN5Ew0jChpTkg<0{<^ zxJq{;uF~Cvt8_QxD%~x(N_Q)+(%puubhqOw-5t0}cPFmW-G!@kcjGGEJ-AADFRs$v zhpTk=<0{<)xJvgRuF^e(t8@?JD%~TvO7|$P(mjT&bdTdI-4nP<_av^;J%y`uPva`x zGq_6kEUwZ$hpTkY<0{H@HgoEw0jihpTko<0{<`xJvgUuG0O4t8_o(D%~%*O7|{e`P^f8#3MKe$TwFRs!Ju)zNjWI$X68(^RXI@kaM<0{=C zxJoxDuF?&Lt8|0oD%}vcN;f2~(hY^HbVK7R-7vUHH!QBw4Tr0A!{aL52)If&BCgVn zgsXHT<0{=KxJoxFuF{Q$t8}B|D%}{kN;f91(v5|ybYtTx-8i^PH!iNyjfbmr&@^82oo#SFg71uC{I4wr$(CZQHhO+cuUwL3)w9?*v!r=EPOHxp0+k zZd|3C2UqFl#Z|iba20I8{J2WD0It$4h^ur9;VRw2xJtJOuF@@vt8|OuD&69^O1A{A z(k+RrbW7nX-O{*9w+yb*EsLvk%i${B^0-R30)|Tcfc0^eZUbDU+YndjHo{f9jd7K3 z6I`X+6j$js!&SP?ag}ZhT&3F*SLwFGRl2Qlm2MkcrP~%)>9)gFy6th5ZUGs1_umSty zD%}CNN_QZx(jA1WbO+-q-66P2cPOsX9fqrPhvO>U5x7csB(BmOg{yQ&<0{=TxJq{{ zuF@Tct8~ZXD%}aVN_Qfz(w&5>bSL8~-6^2AkWx;t={?oM2#y9-z8?#5NRdvKNRURfht58x`@gSblf5U$cajH`5y z;40mtxJvgJuF^e@t8`D`D&3Q~O7|45(mjo3+afx*u_s?k8NO`x#g1e!*3`UvZW0H(aIr9ari8z*V|Gah2{bT&4RP zSLp`K`wxN)gsa^B3s>m|##Oq1<0{=CxJvgQT%{WnSLp`BRl31(m2L=Jr5h4g>4w5p zx}kBE?!UN7Hw>=Q4U4OE!{I93@VH7h02Q^9dR(QO0axi}#8tYP zaFuRmT&0@@SLtTORl3=5m2P%irJDm+>E^^$y18(bZf;zqn+I3v=EYUI`EZqPeq5zn z09WZ2#8tY5aFuRhT%}tCSLqhTRl3D+m2PodrCS15>6XM*x}|WHZfRVlTLxF@mc>=N z<#3g5d0eGi0axi(#8tYLaFuRlT%}tDSLs&8Rl3!1m2P!hrCS46>DI(my0vhXZf#tp zTL)L^*2Pu2^>CGLeO#s609WZY#8tYDaFuRjT&3FtSLrszRl3b^m2PufrP~5m>9)jG zx~*`PZfjhn+Xh$Zw#8Mt?QoTDdt9a40axjE#8tYTaFuRnT&3FuSLt@eRl419m2P)j zrP~8n>Gs4`y1j6fZf{(r+Xq+a_Qh4Y{cx3Te_W+I09WY_#8tY3aFy<0T%|h%SLqJL zRl37)mF{p{r8@#w>5jxzx}$KF?r2=4I|f(jj>T2F<8YPkcwD7B0axix#8tYJaFy<4 zT%|h&SLsg0Rl3t~mF{$0r8@&x>CVJey0dVV?rdD8I|o8`|8x~p)N?rL16y9QV3uEkZl>u{Cs zdR(Qu0axj6#8tYRaFy<6T&24OSLtrWRl3`7mF{+2rMm-H>F&f;y1Q_d?rvPAy9Zb4 z?!{HQ`*4-+eq5z{09WZA#8tY7aFy<1T%~&iSLq(bRl3J;mF{s|rF#Nb>7K+@x~FiJ z?rB`5dj?nOp2bzV=Wvzod0eG?0axi>#8tYNaFy<5T%~&jSLt5GRl3)3mF{(1rF#Qc z>E6Uuy0>tZ?rmJ9dk0tP-o;hA_i&Z&eO#sc09WZg#8tYFaFy<3T&4R2SLr^*Rl3h` zmF{y~rTYR`>Au8Oy037R?rU77`vzC(zQt9#?{Jmwdt9aa0axjM#8tYVaFy<7T&4R3 zSLuGmRl47BmF{<3rTYU{>Hfr3y1#Ih?r&VB8!+EL2r>|^a`!J>r5hMm>HdwYbc5h3 z-G6YEZctpM8w^+J2FF#pA#jy$NL-~G3Rmfd##Ori;ws%RxJoxHuF?&Mt8~NTD%}XU zN;e{|(v5_xbR**`-6*(9H!7~ujfSgqqvI;w7`RF|Ca%(rg{yR9<0{=axJoxJuF{Q% zt90YzD%}LQN;e^{(oKY`bQ9w$-6Xh5Hz}^tO@^y1M)Jx|wm6ZWdgnn-y2-X2Vsw*>RO_4qT<1 z6Ibcx!d1Gtag}Z!T&0^ASLx=%Rl50cm2LrCrCShJ=@!COx`lC-ZV_CiTNGF67QM`g)p3<>4P2#L6Ibch!d1Gpag}ZzT%}tVSLxQnRl42|_Zx}9;AZWmmo+Z9*ocEeS=-Eoy}4_u|&6Ibc>!d1Gxag}Z#T&3F=SLyb{ zRl5CgmF@ssr8^K;=?=nGx`T0*?hst1I}}&x4#QQt!*P}F2wbH*5?ASt!d1GXah2{E zT%|h}SLu$!Rl4JGmF@&wr8^N<=}y8`x|4C0?i5_5I~7;yPQz8Y({YvV3|yr<6IbcZ z!d1Gnah2{IT%|h~SLx2fRl4(WmF@yurMnPU=`O-mx{Gm@?h;(3yA)UHF2hy2%W;+N z3S6bT5?AT2!d1Gfah2{GT&24fSLv?9Rl4hOmF@;yrMnSV>2AVRx|?y8?iO67yA@aI zZo^f&+i{id4qTZ0-$8nYJ30$Rn5?AS-!d1Gbah2{FT%~&!SLvR^Rl4VKmF@*xrF#)q z>0ZKBx|ea4?iF06dlgsdUc*(o*Kw8Z4P2#r6Ibcp!d1Grah2{JT%~&#SLxovRl4_a zmF@#vrTY+9={~|$x{q;{?h{<4`xIB{KEqYI&vBLR3tXl95?ATI!d1Gjah2{HT&4RK zSLwdPRl4tSmF@>zrTY3+ghx}R~C?iXC8`xRH|e#2F|-*J`h4_u}D6Ibc}!d1Gz zag}bs{Qn@xK)A}?zi^dqU|gm9H?GnRf~$1@!Bx6Jag}Z`T%{WvSLuepRk|T@m2N0p zr5hSo>HdqWbi?2(-LSYyHyp0g4UemIBj76Ch`35O60XvXjH`5`;40myxJow~uF{Q; zt8`=FD&3g4N;ej+(v6L)bmQPE-MF|)Hy*CijgPBz6W}V{gt$sK5w6lrjH`5$;40mu zxJow}uF_48t8`P~D&3U0N;eg*(oK!4bpOLux@mBgZdzQWn+{j$rpHyf8E}E^~&x_NMwZeCoan-5p%=EqgK z1#p#aL0qL<2v_MA##OpSaFuRRT%}tKSLqhVRk|f`m2OE~rCSPD>6XS-x@B;cZdqKV zTMk$0md91P6>ybqMO>v@30LV>##OpiaFuRVT%}tLSLs&ARk}5Bm2OR3rCSSE>DI9)pIx@~ZkZd+WX+YVRhw#QYv9dMOyM_i@b30LWM##OpqaFuRXT&3F$SLt@g zRk}TJm2OX5rP~Wv>GsA|x_xk!ZeLub+YeXi_QzGa18|k@KwPCe2v_M2##OpQaFy;* zT%|h5j%#x?^ya?pR!lEH6L6L8L|mmi30LV( z##OpgaFy;CVPgx^r-q?p$1@I}cas&c{`{3viY0 zLR_W02v_MY##OpYaFy;-T&24VSLrUtRk|y1mF`MhrMn7O>8{3Ax@&Ni?pj=>yAD_B zuE$ln8*r8GMqH)430LWE##OpoaFy;>T&24WSLtrYRk}NHmF`YlrMnAP>F&l=x_fYy z?p|D_yAN0C?#ETS2XK|{L0qMK2v_MI##OpUaFy;+T%~&qSLq(dRk|l|mF`JgrF#lj z>7K?_x@T~e?pa)=dk$CWp2twO30LV}##OpkaFy;=T%~&rSLt5IRk}BD zmF`VkrF#ok>E6awx_5Au?p<7^dkAuEQx^Hlm?ps`?`wmy>zQHfx5x&aIPgCGOpDtG_FRl0$3mG0lTN;e3u z()|Zl=?2ABy1{UjZg5UOMXk4ZHFRs!JgR6AI;ws&6xJoxXuF{Qw zt8^pcD&0u9N;fjD(v51M%Ix><3RZZ=${n;lo_=D=0D zIdPS4E?lLX8&~P(!Bx6>ag}a9T&0^ISLqhORk{Unm2M$irCS(R=@!9Nxa$NZZ%w`TOC*F*1%P|HF1@0EnKBr8&~Pp!Bx6-ag}a8T%}tdSLrsuRk{svm2M+k zrP~-+={CVtx=nGFZZlk^+Z2|?Yx?ORVZZ}+|+Z|Ww_P|xTJ#m$8FI=VD8&~P}!Bx6_ag}aA zT&3F|SLqJGRk{OlmF^&1r8^i`=?=kFxIqL?lfGbI~`Z)&cIc=GjWyf zEL^2K8&~Ph!Bx6*ah2{oT%|i7SLrUmRk{mtmF^;3rMnnc=`O)lx=V4D?lN4ZyBt^P zuE15gD{+2ASQx?6FT z?lxSdyB$~Q?!Z;LJ8_lnE?lL%8&~P>!Bx6@ah2{qT&24oSLq(WRk{apmF^*2rF$4x z=^nvVx<_%9?lD}YdmLBkp1@VQCvlbTDO{y{8dvF_!Bx6vah2{lT%~&+SLt5BRk{~( zmF^{6rF$7y>0ZHAx>s?P?loMcdmUHl-oRD5H*uBjEnKC08&~Px!Bx64rTZ9H={~_#x=(SH?lWAa`y5y4zQ9$wFL9ObD_o`f8dvGQ!Bx6% zah2{nT&4RSSLuGhRk|N>mF_28rTZCI>3+dgx?gdX?l)Ye`yE&5{=ikbKXH}rFI=Vj z8&~NDEcg$C41}xP{R>y=2F6vof8#3MAh=5RA6%sy6j$j6!&SP$ag}ZeT%{WlSLuer zRl1>ZmF~Z|N;eFy(hZBNbi?5)-SD_dHv+EGjfkssBjGCD$hb;33a-+PimP;^;VRwe zxJow$uF{Q(t8`=GD&5$)N;eL!(v6F&bmQSF-T1glHvz8FO^B;>6X7b|#JEZ~39iyj zimP;!;VRwaxJow#uF_43t8`Q0D&5q$O7}lprJDv<>88b1y6JG0ZhBm$n*mqpX2eyx znQ)bEW?ZG41y|{2#Z|i5aFuR$T&0@>SLx=&Rl2!wm2PfarJDy=>E^{%y7_RGZhl;) zTL4$-7Q|J$g>aQ_VO*tK1Xt-6#Z|h+aFuRxT%}tASLv3-Rl22cm2PQVrCSD9>6XP+ zy5(?{Zh2g#TLD+;R>W1hm2j1AWn86O1y|`-#Z|i1aFuR#T%}tBSLxQoRl2osm2PcZ zrCSGA>DI+ny7h3CZhc&(+W=STHpErBjc}E2V_c=%1Xt-c#Z|h^aFuRzT&3FrSLwFI zRl2Qkm2PWXrP~Hq>9)mHy6te4ZhKs%+W}YUcEnY>op6Gs7{y8UpKZhu^*I{;Vd4#ZWugK(AZU|gj;1Xt+} z#Z|h)aFy!>5j!!y5n$_?s#0KI{{bePQ+EZlW>*p zWL%{?1y|`##Z|h~aFyCVMfy7O?A?tEOOy8u_| zF2q&3i*S|hVqB%W1Xt-U#Z|h?aFyrMm`K>8{09y6bS2 z?s{CMy8&0}Zp2l(n{buxW?ZGa1y|{A#Z|i7aFyF&ii6;hj5kdVO*tq1Xt-E#Z|h;aFy7K<^y613}?s;6LdjVJJUc^E6Xvy7zFE?tNUP`v6zzKEzeJk8qXlV_c>C1Xt-k#Z|h` zaFyAuBPy63tZb)3E8wywHhQ?L8|Kcj$Ft|!LEUwZGhpTkM<0{<< zxJox7uF{Q!t8^pdD%~i!N;fL5(v60zbfe=c-59t^HzuyqjfJapW8*5_IJinTF0Rsz zhpTks<0{<*xJox6uF_3}t8^3ND%~WwN;fI4(oKe|bd%#M-4wV=HzlspO@*s;Q{yV# z|8SLV8eFBD7FX$}!&SQJag}ZcT&0^4SLtTLRl1pRm2MVXrJEI3>1M-Ky4i7+ZVp_f zn-f>*=E7CFxp9?l9$clH7gy=#!&SQZag}ZXT%}tOSLqhQRl0?7m2MGSrCStN=@!FP zy2WvoZV6naTM}34mcmuKrE!&R8C<1X7FX$(!&SQFag}ZbT%}tPSLs&5Rl1dNm2MSW zrCSwO=~ly4y47)&ZVg2||ay4`V=ZVz0g+Y?vm_QF-Vy>XRpA6%u|7gy=_ z!&SQdah2`>T%|h@SLqJIRl0+5mF^H+r8^W?=?=qHy2Ejm?g(6^I}%svj>1*Cqj8n) z7+j@07FX$x!&SQDah2`_T%|h^SLsf|Rl1XLmF^T=r8^Z@=}yB{y3=u$?hIU|I}=yw z&cao?vvHN~99*S47gy=d!&SQTah2`@T&24ZSLrUoRl19DmF^N;rMnbY=`O=ny328u z?h0I`yAoIFuEJHit8ta?8eFBj7FX%6!&SQLah2`{T&24aSLtrTRl1vTmF^Z?rMneZ z>2AYSy4!J;?hag~yAxOG?!r~NyK$B79$cln7gy=-!&SQbah2`?T%~&uSLq(YRl0|9 kmF^K-rF#@t=^n#Xy2o*q?g?C_dlFaap2AhSr*W0;|07emYybcN literal 0 HcmV?d00001 diff --git a/crates/recursion/circuit-v2/src/merkle_tree.rs b/crates/recursion/circuit-v2/src/merkle_tree.rs index 4769ec5949..57493bf524 100644 --- a/crates/recursion/circuit-v2/src/merkle_tree.rs +++ b/crates/recursion/circuit-v2/src/merkle_tree.rs @@ -3,6 +3,7 @@ use std::fmt::Debug; use itertools::Itertools; use p3_field::Field; use p3_util::{reverse_bits_len, reverse_slice_index_bits}; +use serde::{Deserialize, Serialize}; use sp1_core_machine::utils::log2_strict_usize; use sp1_recursion_compiler::ir::Builder; @@ -12,7 +13,9 @@ use crate::{ CircuitConfig, }; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(bound(serialize = "HV::Digest: Serialize"))] +#[serde(bound(deserialize = "HV::Digest: Deserialize<'de>"))] pub struct MerkleTree> { /// The height of the tree, not counting the root layer. This is the same as the logarithm of the /// number of leaves. diff --git a/crates/stark/src/prover.rs b/crates/stark/src/prover.rs index 35c98eaa30..89851370f8 100644 --- a/crates/stark/src/prover.rs +++ b/crates/stark/src/prover.rs @@ -266,7 +266,7 @@ pub trait MachineProver>: /// A proving key for any [`MachineAir`] that is agnostic to hardware. pub trait MachineProvingKey: Send + Sync { /// The main commitment. - fn commit(&self) -> Com; + fn preprocessed_commit(&self) -> Com; /// The start pc. fn pc_start(&self) -> Val; @@ -853,7 +853,7 @@ where PcsProverData: Send + Sync + Serialize + DeserializeOwned, Com: Send + Sync, { - fn commit(&self) -> Com { + fn preprocessed_commit(&self) -> Com { self.commit.clone() } From 1aa1d7aa7d14dd3694b756139518a3c7e50acfab Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Wed, 18 Sep 2024 15:42:43 -0700 Subject: [PATCH 183/268] fix: low memory shards (#1524) --- crates/core/machine/src/riscv/shape.rs | 20 ++++++++++---------- crates/prover/merkle_tree.bin | Bin 2097136 -> 4194288 bytes crates/prover/scripts/build_compress_vks.rs | 2 +- crates/prover/vk_map.bin | Bin 725128 -> 1802888 bytes 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/core/machine/src/riscv/shape.rs b/crates/core/machine/src/riscv/shape.rs index ef1d55ca2d..56f415fdb0 100644 --- a/crates/core/machine/src/riscv/shape.rs +++ b/crates/core/machine/src/riscv/shape.rs @@ -306,16 +306,16 @@ impl Default for CoreShapeConfig { ]); // Get the heights for the short shape cluster (for small shards). - let cpu_heights = vec![Some(10), Some(16)]; - let divrem_heights = vec![None, Some(10), Some(16)]; - let add_sub_heights = vec![None, Some(10), Some(16)]; - let bitwise_heights = vec![None, Some(10), Some(16)]; - let mul_heights = vec![None, Some(10), Some(16)]; - let shift_right_heights = vec![None, Some(10), Some(16)]; - let shift_left_heights = vec![None, Some(10), Some(16)]; - let lt_heights = vec![None, Some(10), Some(16)]; - let memory_local_heights = vec![Some(16), Some(21)]; - let syscall_heights = vec![None, Some(16)]; + let cpu_heights = vec![Some(16), Some(19)]; + let divrem_heights = vec![None, Some(10), Some(16), Some(19)]; + let add_sub_heights = vec![None, Some(10), Some(16), Some(19)]; + let bitwise_heights = vec![None, Some(10), Some(16), Some(19)]; + let mul_heights = vec![None, Some(10), Some(16), Some(19)]; + let shift_right_heights = vec![None, Some(10), Some(16), Some(19)]; + let shift_left_heights = vec![None, Some(10), Some(16), Some(19)]; + let lt_heights = vec![None, Some(10), Some(16), Some(19)]; + let memory_local_heights = vec![Some(16), Some(20)]; + let syscall_heights = vec![None, Some(19)]; let short_allowed_log_heights = HashMap::from([ (RiscvAir::Cpu(CpuChip::default()), cpu_heights), diff --git a/crates/prover/merkle_tree.bin b/crates/prover/merkle_tree.bin index b74509cbb325bc7664a58e2f51ca0d81566ba0a2..2d833832a10ac522a20c792795045e0850d9a756 100644 GIT binary patch literal 4194288 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

    9jf7#7Jb`kG) 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

    _G(k8y~tQO09y}DQ!{s#;;=}R#>5%a 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

    C<;@~tG|j3r?UgN2tl_X%;Rx|- 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

    ~{ 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
    p31Au^^RnZNxLjAksYDfIE33qW2 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

    `s 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

    ( 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 Z01uv4kgi0>2e`IQ94K&#BFv^Sflw! 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

    JxF%sHwW&F%%yAe1QQIsPgpmMC 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%0D=K6jVon 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

    i+`1r;knEg6e0Z}JFwQFK%2T74#=H%$me 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 ^N2k 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

    HN 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

    >h~w9pM^BZNBk0>CgLwPa7<(()J@ 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�E&=DIE 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

    ;-=g4Rp>;L22X9?h|r3JUjp5!(#pE zigIv6Q$J+VPESfuR#caKiz)ObX=4q?KXs2?DJg^mQaz+IFKK{x^iQ$A@nLr|xDD3E zkO?DS8*}UbzEI^b-5|NwYE~+NVML3RdStw&(rL;JN>E><*Hd2$PD$ZQTOEfR%u1W3 zyf4kfSro3&1!DJxgG!{W|5W5o0ylRAel!Zlq6A#Uju@2|0GJPEi~1FK~E0NZ$BE+dr}iQigHI6EKT(+@KwdCHBRrH1ZP{6 z!zyFk*I!RBY)_`j9!Nhg1x;1!rV~mPn^^FV16z>3luvRX?-Z=ojCLrbHgo-GoH1!R z9tnZB(L_|)I1Y1>8xHb*i#9Z5k1FZ0=|z={=3MZm+zj#twL(5mYGO|-Fc3E1T|6aO zpaRxah&n;nmmS6Orr zXaxF+3dmo-qYp0tOg>7$kPq+8nv*9a*QfCLPQ7whj@2ycA8;%sbsGSQxQP z;{|*mQ8JG1N-1XOF(?mHnmFpGPFB)NB|<>EZX*7f^9RB#iFB1|1Y;ZTBuh2&kTn@; z-!2M;1WXoWrg6`O25KVc&Ij;aCkP2s+;?M?7yKQWwmLVlXhQk1~W^TQL2@F$)9d0Wlk*`xLu3 z&?7*YN>?YTN>>SZfdRKbrAh)epekG2m|7ZFJVv?T?@e%<5J{w>oNMc=^AL%i0R#zV z+f6^>Lue1P1`uL*sY~^ywqIzPiwwGv|`^d-cy#5waxv>21As zkvFMtx>dbZ_;vsb(lA9khz-|kwl;=m2wUN)H5ODHLM-(d2Um?)-w=LyL}^A$r$TI9 zqbvkpSzxx&Tt5b0EfO1Bdn_?4K}+MctyL|q&2lYiTT>pacnm2XOLPE~(KKrDG%=!I zHyBEw{|Sd3`9Kkkoi^y8eJoi|1yMf>k7&;M6>{SsIS>9Asw-w;y#!BIM|2QuhDCdP z7dA15>IgOj*#~qd2VuBc7DTvpI#`g2m( z7drWSNJ7#A2TM;5@>Q*H)+vhjQxkic5DAOw1WTQMk0cStod-&5plUX(@NrS4cPyA> zh7xIZ3LjaJOf}a)b`p4U{UmvDtp+&um?zeSktuyEz(OE_x;WX}a3Ff0s%DYcY+lxP zuOYXnQXFvJj9CMv1!Nm9+!eMj0bd9fm`c*I{9Mudx+MuB13YgHXjK!GOKaM7;tu#= z>Pu%YjAg;W`U9&R_aMmM5?=$KzgnO1Mm(r9^j0&pUuS7|;AvJxEKZ_AE=J;?(Q68o zC<#qKF92CtRt~KXpKcCE-FF?*sskbJVpN$}b|eVXDOsfqCQjs{uUAG5cL%%kO$8zO zf)3rRf=kK|zcyq`i9ew)mvZ{MEhLuAuLl5@zbegN_z+himt99@VK)?{=R%(K2n^C) z4rd<-6au5J3M}TP6L%;_QwPbwQ(Ek@+(k%YkOxTFSq{#nYf;zf=q}r!R9nm*%T5oW z-WRTIC0odm`2*LApDI@~h%a34loM}GwMTD5+dELcLK=}0dtc#2nGlr4(xngg4n8=3}N8kUMQb_!Mo4qX5TB>i{39bvfvyE(khh-c_`* z2z861Knq>SBuvJ^2_yGxq+I;k@lG;WI|;i2f^{?8$|!SRf?E1B1tDF>#{{OaQC!=% zZ6QgqSSnX}KIB}gR!v($O!z1%8%uYB=cXFR$0dr%fp%ym;yIzl}ReL?FZ{ZEuNpkEGmAXv7s&=UV# z@=fGyX&p+N>o6**Ax-gVSy~TLUsP~YL21xZ(=Bu7X+$ub4+an@s}5@sp;k>0a2myx zxdB2y?pq|<24DYfEfQ`VE-q1R!Y&+S3>!cBtsRiQ&SAnE9!SH%J1fF$GXRGb{}X)! zYdO%k!flN;z+GsZcX#G{%Rz;SI!ss8129$sJt+QLNdl6IY;k@2GdT(ODmJ@lW<_m1 zCK%C{@&+IlQ3|HOr&N4>Mp?0SCTfWbK^6q3XKX_J3{}v|#bn3CYa5~VtvA+@hH&=4 z<}nT^cxP$e03BWI4>-5$jbN|+?O)oFcq0iV7(;M)AqlnIT>=0fvtfkA+-Qug;YnWr zgjJIEu5r&DsYe{lOaL!KLtw+_{C@AHmXg+ENv;i3ey<|oDa3(-BO%7ic(f}PZ z>TClA90bmOs9qz^N;MVS4^!&#mUSX%5(*dAJ!*nyUt;dtzf@54x>sVtBW@wsk`0F6 zOGjLuD;FvM;dQC)j9WhQ6G)fVX z=wq-~eM$W`1x{=C1qm6zYZ&_Ymvy+pU3c;vZ*W6UBsqNy3?zUKDsUBdk`|o`9tmp> z&o3$t5-nI_$7A!mN+(G*pK5bS|d8WC`-qye^|xeqAPV zp)k(o%@t|!qaQBR+EaP~D=p1yw`pwXB1}#JLP22ECR4HcW(=$~`zChIvK2@l_b^$Y zcMQz8AYX#>-$AKXbtml8{%&cf_(4(A!xRr9vPglGb*Cjx1O2NHDF#xh*_xgIf<{cxrT_)yjsEOKyI=wSuT5o6(O^dh*39}!FM z;YG)i=4s(uCltB}dq@bSS#a{HMr|Yc2SHK5upFQ1D@KKIvQF~`-b7_ex)*}V+Af)c zKpjE|VL?HU;6SI>!gfW+l`DE;TMHU)s{m-oUljTCQx3InUot*Z;5yTiJXOL<)pM7* z=4{uHY(gW%EL0j_l5Drj=00=PSs^cq7!f^g$^;wYrE9#~{TY3=G#2>RpKba6@&+dm zmTK&}Q5YKKb9c8f3kpm}5J0g2_G+X??idtqL^qicm~;B~a6B0}$wrAe8gK60=4C)* z)CJ~gaseR6s#rc@P3|y>{D?dJ@03OP1 zv|YhN@LhFR-cAnjqa3oc6fO7vf>X6sMgyO0;df5;9A20|hjR5NUj#b1svROO)JVr? zmKEbC>jRlvD^wHeb{i>*Vi4)@i77wUN=(2CR~h(Tgh-cX4nWiCktzXDcvW>tkXEgD zEh018cs!6>$oQmKC&r(MG~_wOd?VT{L2~plu{(@I3H09Ct;)Cul~j zP!Wh~rZ+2{{YLI=nIT3oLQzQj$xdO!98=%ra5z#&BU6mGcLVsu^lz|L4LZ9Iu2quh zZco2WrB-jy(>ou{06G_yv~YmLM_)$2rAJpA4`qMj7G~PhVQx#2SU$|YkT&iG!3ti+MnHGIJXDWC zCPDldwLPS6>Kgq^6j-W~m|g!Np&~v1*L4T=2o<}2uUzRtmlD71HCBWdp&5Figaicc z+73t2J0kcKN@UKXH(*P}YGgPJZBM!%vjGM63TY2%4q=BeNoT_sc648R zluQOwe>R=~M=<(z+9wbuju{^2-9}9KQvzb1BLczxLt=$a`w5pR{~=BPIY7+S++T#^ zY;@pBsVScZA83xSiWQtGVs@S?hC1XLNLkQ)URFZX(Gj(C<{ef4)@w;)4QL%nPar~T!4IOIJp}acDrPoOI18$s2vUGqq8M!uw-#@G77B$A4+s=WE(uiC zbV;h?d=QI${2)KuBx!!v!#8-4s7ptY(P_DFb^ kR_I!xFdJTvqsWiWj3U4BOa_b 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:xJ6n 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

  • )y%z(KHA`uoI3J-INzMSB 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 OX`xOUUcaLNm^l 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%0AE`=4AR^X`$vW;J55= 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 jh0L=AA#P({h_, + + /// The shard size to use for the prover. + #[arg(long)] + pub shard_size: Option, + + /// Whether to post results to Slack. + #[arg(long, default_missing_value="true", num_args=0..=1)] + pub post_to_slack: Option, + + /// The Slack channel ID to post results to, only used if post_to_slack is true. + #[arg(long)] + pub slack_channel_id: Option, + + /// The Slack bot token to post results to, only used if post_to_slack is true. + #[arg(long)] + pub slack_token: Option, + + /// Whether to post results to GitHub PR. + #[arg(long, default_missing_value="true", num_args=0..=1)] + pub post_to_github: Option, + + /// The GitHub token for authentication, only used if post_to_github is true. + #[arg(long)] + pub github_token: Option, + + /// The GitHub repository owner. + #[arg(long)] + pub repo_owner: Option, + + /// The GitHub repository name. + #[arg(long)] + pub repo_name: Option, + + /// The GitHub PR number. + #[arg(long)] + pub pr_number: Option, + + /// The name of the pull request. + #[arg(long)] + pub pr_name: Option, + + /// The name of the branch. + #[arg(long)] + pub branch_name: Option, + + /// The commit hash. + #[arg(long)] + pub commit_hash: Option, + + /// The author of the commit. + #[arg(long)] + pub author: Option, +} + +pub async fn evaluate_performance() -> Result<(), Box> +{ + let args = EvalArgs::parse(); + + // Set environment variables to configure the prover. + if let Some(shard_size) = args.shard_size { + std::env::set_var("SHARD_SIZE", format!("{}", 1 << shard_size)); + } + + // Choose which programs to evaluate. + let programs: Vec<&TesterProgram> = if args.programs.is_empty() { + PROGRAMS.iter().collect() + } else { + PROGRAMS + .iter() + .filter(|p| args.programs.iter().any(|arg| arg.eq_ignore_ascii_case(p.name))) + .collect() + }; + + // Run the evaluations on each program. + let mut reports = Vec::new(); + for program in &programs { + println!("Evaluating program: {}", program.name); + let report = run_evaluation::(program.name, program.elf, program.input); + reports.push(report); + println!("Program: {} completed", program.name); + } + + // Prepare and format the results. + let reports_len = reports.len(); + let success_count = reports.iter().filter(|r| r.success).count(); + let results_text = format_results(&args, &reports); + + // Print results + println!("{}", results_text.join("\n")); + + // Post to Slack if applicable + if args.post_to_slack.unwrap_or(false) { + match (&args.slack_token, &args.slack_channel_id) { + (Some(token), Some(channel)) => { + for message in &results_text { + post_to_slack(token, channel, message).await?; + } + } + _ => println!("Warning: post_to_slack is true, required Slack arguments are missing."), + } + } + + // Post to GitHub PR if applicable + if args.post_to_github.unwrap_or(false) { + match (&args.repo_owner, &args.repo_name, &args.pr_number, &args.github_token) { + (Some(owner), Some(repo), Some(pr_number), Some(token)) => { + let message = format_github_message(&results_text); + post_to_github_pr(owner, repo, pr_number, token, &message).await?; + } + _ => { + println!("Warning: post_to_github is true, required GitHub arguments are missing.") + } + } + } + + // Exit with an error if any programs failed. + let all_successful = success_count == reports_len; + if !all_successful { + println!("Some programs failed. Please check the results above."); + std::process::exit(1); + } + + Ok(()) +} + +#[derive(Debug, Serialize)] +pub struct PerformanceReport { + program: String, + cycles: u64, + exec_khz: f64, + core_khz: f64, + compressed_khz: f64, + time: f64, + success: bool, +} + +fn run_evaluation( + program_name: &str, + elf_path: &str, + input_path: &str, +) -> PerformanceReport { + let (elf, stdin) = load_program(elf_path, input_path); + let cycles = get_cycles(&elf, &stdin); + + let prover = SP1Prover::::new(); + let (pk, vk) = prover.setup(&elf); + + let opts = SP1ProverOpts::default(); + let context = SP1Context::default(); + + let (_, exec_duration) = time_operation(|| prover.execute(&elf, &stdin, context.clone())); + + let (core_proof, core_duration) = + time_operation(|| prover.prove_core(&pk, &stdin, opts, context).unwrap()); + + let (_, compress_duration) = + time_operation(|| prover.compress(&vk, core_proof, vec![], opts).unwrap()); + + let total_duration = exec_duration + core_duration + compress_duration; + + PerformanceReport { + program: program_name.to_string(), + cycles, + exec_khz: calculate_khz(cycles, exec_duration), + core_khz: calculate_khz(cycles, core_duration), + compressed_khz: calculate_khz(cycles, compress_duration), + time: total_duration.as_secs_f64(), + success: true, + } +} + +fn format_results(args: &EvalArgs, results: &[PerformanceReport]) -> Vec { + let mut detail_text = String::new(); + if let Some(pr_name) = &args.pr_name { + detail_text.push_str(&format!("*PR*: {}\n", pr_name)); + } + if let Some(branch_name) = &args.branch_name { + detail_text.push_str(&format!("*Branch*: {}\n", branch_name)); + } + if let Some(commit_hash) = &args.commit_hash { + detail_text.push_str(&format!("*Commit*: {}\n", &commit_hash[..8])); + } + if let Some(author) = &args.author { + detail_text.push_str(&format!("*Author*: {}\n", author)); + } + + let mut table_text = String::new(); + table_text.push_str("```\n"); + table_text.push_str("| program | cycles | execute (mHz) | core (kHZ) | compress (KHz) | time | success |\n"); + table_text.push_str("|-------------------|-------------|----------------|----------------|----------------|--------|----------|"); + + for result in results.iter() { + table_text.push_str(&format!( + "\n| {:<17} | {:>11} | {:>14.2} | {:>14.2} | {:>14.2} | {:>6} | {:<7} |", + result.program, + result.cycles, + result.exec_khz / 1000.0, + result.core_khz, + result.compressed_khz, + format_duration(result.time), + if result.success { "✅" } else { "❌" } + )); + } + table_text.push_str("\n```"); + + vec!["*SP1 Performance Test Results*\n".to_string(), detail_text, table_text] +} + +pub fn time_operation T>(operation: F) -> (T, Duration) { + let start = Instant::now(); + let result = operation(); + let duration = start.elapsed(); + (result, duration) +} + +fn calculate_khz(cycles: u64, duration: Duration) -> f64 { + let duration_secs = duration.as_secs_f64(); + if duration_secs > 0.0 { + (cycles as f64 / duration_secs) / 1_000.0 + } else { + 0.0 + } +} + +fn format_duration(duration: f64) -> String { + let secs = duration.round() as u64; + let minutes = secs / 60; + let seconds = secs % 60; + + if minutes > 0 { + format!("{}m{}s", minutes, seconds) + } else if seconds > 0 { + format!("{}s", seconds) + } else { + format!("{}ms", (duration * 1000.0).round() as u64) + } +} + +async fn post_to_slack(slack_token: &str, slack_channel_id: &str, message: &str) -> Result<()> { + let slack_api_client = default_client(); + let request = PostMessageRequest { + channel: slack_channel_id.to_string(), + text: Some(message.to_string()), + ..Default::default() + }; + + post_message(&slack_api_client, &request, slack_token).await.expect("slack api call error"); + + Ok(()) +} + +fn format_github_message(results_text: &[String]) -> String { + let mut formatted_message = String::new(); + + if let Some(title) = results_text.first() { + // Add an extra asterisk for GitHub bold formatting + formatted_message.push_str(&title.replace('*', "**")); + formatted_message.push('\n'); + } + + if let Some(details) = results_text.get(1) { + // Add an extra asterisk for GitHub bold formatting + formatted_message.push_str(&details.replace('*', "**")); + formatted_message.push('\n'); + } + + if let Some(table) = results_text.get(2) { + // Remove the triple backticks as GitHub doesn't require them for table formatting + let cleaned_table = table.trim_start_matches("```").trim_end_matches("```"); + formatted_message.push_str(cleaned_table); + } + + formatted_message +} + +async fn post_to_github_pr( + owner: &str, + repo: &str, + pr_number: &str, + token: &str, + message: &str, +) -> Result<(), Box> { + let client = Client::new(); + let base_url = format!("https://api.github.com/repos/{}/{}", owner, repo); + + // Get all comments on the PR + let comments_url = format!("{}/issues/{}/comments", base_url, pr_number); + let comments_response = client + .get(&comments_url) + .header("Authorization", format!("token {}", token)) + .header("User-Agent", "sp1-perf-bot") + .send() + .await?; + + let comments: Vec = comments_response.json().await?; + + // Look for an existing comment from our bot + let bot_comment = comments.iter().find(|comment| { + comment["user"]["login"] + .as_str() + .map(|login| login == "github-actions[bot]") + .unwrap_or(false) + }); + + if let Some(existing_comment) = bot_comment { + // Update the existing comment + let comment_url = existing_comment["url"].as_str().unwrap(); + let response = client + .patch(comment_url) + .header("Authorization", format!("token {}", token)) + .header("User-Agent", "sp1-perf-bot") + .json(&json!({ + "body": message + })) + .send() + .await?; + + if !response.status().is_success() { + return Err(format!("Failed to update comment: {:?}", response.text().await?).into()); + } + } else { + // Create a new comment + let response = client + .post(&comments_url) + .header("Authorization", format!("token {}", token)) + .header("User-Agent", "sp1-perf-bot") + .json(&json!({ + "body": message + })) + .send() + .await?; + + if !response.status().is_success() { + return Err(format!("Failed to post comment: {:?}", response.text().await?).into()); + } + } + + Ok(()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_format_results() { + let dummy_reports = vec![ + PerformanceReport { + program: "fibonacci".to_string(), + cycles: 11291, + exec_khz: 29290.0, + core_khz: 30.0, + compressed_khz: 0.1, + time: 622.385, + success: true, + }, + PerformanceReport { + program: "super-program".to_string(), + cycles: 275735600, + exec_khz: 70190.0, + core_khz: 310.0, + compressed_khz: 120.0, + time: 812.285, + success: true, + }, + ]; + + let args = EvalArgs { + programs: vec!["fibonacci".to_string(), "super-program".to_string()], + shard_size: None, + post_to_slack: Some(false), + slack_channel_id: None, + slack_token: None, + post_to_github: Some(true), + github_token: Some("abcdef1234567890".to_string()), + repo_owner: Some("succinctlabs".to_string()), + repo_name: Some("sp1".to_string()), + pr_number: Some("123456".to_string()), + pr_name: Some("Test PR".to_string()), + branch_name: Some("feature-branch".to_string()), + commit_hash: Some("abcdef1234567890".to_string()), + author: Some("John Doe".to_string()), + }; + + let formatted_results = format_results(&args, &dummy_reports); + + for line in &formatted_results { + println!("{}", line); + } + + assert_eq!(formatted_results.len(), 3); + assert!(formatted_results[0].contains("SP1 Performance Test Results")); + assert!(formatted_results[1].contains("*PR*: Test PR")); + assert!(formatted_results[1].contains("*Branch*: feature-branch")); + assert!(formatted_results[1].contains("*Commit*: abcdef12")); + assert!(formatted_results[1].contains("*Author*: John Doe")); + assert!(formatted_results[2].contains("fibonacci")); + assert!(formatted_results[2].contains("super-program")); + } +} diff --git a/crates/eval/src/main.rs b/crates/eval/src/main.rs new file mode 100644 index 0000000000..e0e5b78881 --- /dev/null +++ b/crates/eval/src/main.rs @@ -0,0 +1,8 @@ +use anyhow::Result; +use sp1_eval::evaluate_performance; +use sp1_prover::components::DefaultProverComponents; + +#[tokio::main] +async fn main() -> Result<(), Box> { + evaluate_performance::().await +} diff --git a/crates/eval/src/program.rs b/crates/eval/src/program.rs new file mode 100644 index 0000000000..49d576a9e2 --- /dev/null +++ b/crates/eval/src/program.rs @@ -0,0 +1,37 @@ +use sp1_sdk::SP1Stdin; +use std::fs::File; +use std::io::Read; + +#[derive(Clone)] +pub struct TesterProgram { + pub name: &'static str, + pub elf: &'static str, + pub input: &'static str, +} + +impl TesterProgram { + const fn new(name: &'static str, elf: &'static str, input: &'static str) -> Self { + Self { name, elf, input } + } +} + +pub const PROGRAMS: &[TesterProgram] = &[ + TesterProgram::new("fibonacci", "fibonacci/elf", "fibonacci/input.bin"), + TesterProgram::new("ssz-withdrawals", "ssz-withdrawals/elf", "ssz-withdrawals/input.bin"), + TesterProgram::new("tendermint", "tendermint/elf", "tendermint/input.bin"), +]; + +pub fn load_program(elf_path: &str, input_path: &str) -> (Vec, SP1Stdin) { + let elf_path = format!("./programs/{}", elf_path); + let input_path = format!("./programs/{}", input_path); + + let mut elf_file = File::open(elf_path).expect("failed to open elf"); + let mut elf = Vec::new(); + elf_file.read_to_end(&mut elf).expect("failed to read elf"); + + let input_file = File::open(input_path).expect("failed to open input"); + let stdin: SP1Stdin = + bincode::deserialize_from(input_file).expect("failed to deserialize input"); + + (elf, stdin) +} diff --git a/crates/sdk/Cargo.toml b/crates/sdk/Cargo.toml index df0c759144..1d296f94bf 100644 --- a/crates/sdk/Cargo.toml +++ b/crates/sdk/Cargo.toml @@ -13,21 +13,21 @@ categories = { workspace = true } prost = "0.12" serde = { version = "1.0.204", features = ["derive"] } serde_json = "1.0.121" -twirp = { package = "twirp-rs", version = "0.3.0-succinct" } +twirp = { package = "twirp-rs", version = "0.3.0-succinct" , optional=true } async-trait = "0.1.81" -reqwest-middleware = "0.3.2" +reqwest-middleware = { version = "0.3.2", optional = true } reqwest = { version = "0.12.4", features = [ "rustls-tls", "trust-dns", "stream", -] } +], optional = true } anyhow = "1.0.83" sp1-prover = { workspace = true } sp1-core-machine = { workspace = true } -sp1-cuda = { workspace = true } +sp1-cuda = { workspace = true , optional = true} futures = "0.3.30" bincode = "1.3.3" -tokio = { version = "1.39.2", features = ["full"] } +tokio = { version = "1.39.2", features = ["full"], optional = true} p3-matrix = { workspace = true } p3-commit = { workspace = true } p3-field = { workspace = true } @@ -37,14 +37,14 @@ indicatif = "0.17.8" tracing = "0.1.40" hex = "0.4.3" log = "0.4.22" -axum = "=0.7.4" +axum = { version = "=0.7.4", optional = true } alloy-sol-types = { version = "0.7.7", optional = true } sha2 = "0.10.8" dirs = "5.0.1" tempfile = "3.10.1" num-bigint = "0.4.6" cfg-if = "1.0" -ethers = { version = "2", default-features = false } +ethers = { version = "2", default-features = false, optional = true} strum_macros = "0.26.4" strum = "0.26.3" thiserror = "1.0.63" @@ -52,6 +52,7 @@ hashbrown = "0.14.5" sysinfo = "0.30.13" sp1-core-executor = { workspace = true } sp1-stark = { workspace = true } +getrandom = { version = "0.2.15", features = ["custom", "js"] } [features] default = ["network"] @@ -59,8 +60,8 @@ neon = ["sp1-core-machine/neon"] native-gnark = ["sp1-prover/native-gnark"] # TODO: Once alloy has a 1.* release, we can likely remove this feature flag, as there will be less # dependency resolution issues. -network = ["dep:alloy-sol-types"] -cuda = [] +network = ["dep:alloy-sol-types", "dep:tokio", "dep:ethers", "dep:reqwest", "dep:twirp", "dep:reqwest-middleware"] +cuda = ["sp1-cuda"] [build-dependencies] vergen = { version = "8", default-features = false, features = [ diff --git a/crates/sdk/src/artifacts.rs b/crates/sdk/src/artifacts.rs index 6bf52aaab4..5718e45512 100644 --- a/crates/sdk/src/artifacts.rs +++ b/crates/sdk/src/artifacts.rs @@ -1,9 +1,15 @@ -use std::{cmp::min, fs::File, io::Write, path::PathBuf}; +use std::path::PathBuf; use anyhow::{Context, Result}; -use futures::StreamExt; -use indicatif::{ProgressBar, ProgressStyle}; -use reqwest::Client; + +#[cfg(feature = "network")] +use { + futures::StreamExt, + indicatif::{ProgressBar, ProgressStyle}, + reqwest::Client, + std::{cmp::min, fs::File, io::Write}, +}; + pub use sp1_prover::build::build_plonk_bn254_artifacts_with_dummy; use crate::install::try_install_circuit_artifacts; @@ -66,6 +72,7 @@ pub fn export_solidity_groth16_bn254_verifier(output_dir: impl Into) -> Ok(()) } +#[cfg(feature = "network")] pub async fn download_file( client: &Client, url: &str, diff --git a/crates/sdk/src/install.rs b/crates/sdk/src/install.rs index d0cbf87cae..4b7ed858db 100644 --- a/crates/sdk/src/install.rs +++ b/crates/sdk/src/install.rs @@ -1,23 +1,28 @@ -use std::{cmp::min, io::Write, path::PathBuf, process::Command}; - -use futures::StreamExt; -use indicatif::{ProgressBar, ProgressStyle}; -use reqwest::Client; -use sp1_cuda::block_on; +use cfg_if::cfg_if; +use std::path::PathBuf; + +#[cfg(feature = "network")] +use { + crate::block_on, + futures::StreamExt, + indicatif::{ProgressBar, ProgressStyle}, + reqwest::Client, + std::{cmp::min, io::Write, process::Command}, +}; use crate::SP1_CIRCUIT_VERSION; /// The base URL for the S3 bucket containing the ciruit artifacts. pub const CIRCUIT_ARTIFACTS_URL_BASE: &str = "https://sp1-circuits.s3-us-east-2.amazonaws.com"; -/// Gets the directory where the circuit artifacts are installed. -fn circuit_artifacts_dir() -> PathBuf { +/// The directory where the circuit artifacts will be stored. +pub fn install_circuit_artifacts_dir() -> PathBuf { dirs::home_dir().unwrap().join(".sp1").join("circuits").join(SP1_CIRCUIT_VERSION) } /// Tries to install the circuit artifacts if they are not already installed. pub fn try_install_circuit_artifacts() -> PathBuf { - let build_dir = circuit_artifacts_dir(); + let build_dir = install_circuit_artifacts_dir(); if build_dir.exists() { println!( @@ -25,12 +30,16 @@ pub fn try_install_circuit_artifacts() -> PathBuf { build_dir.display() ); } else { - println!( - "[sp1] circuit artifacts for version {} do not exist at {}. downloading...", - SP1_CIRCUIT_VERSION, - build_dir.display() - ); - install_circuit_artifacts(build_dir.clone()); + cfg_if! { + if #[cfg(feature = "network")] { + println!( + "[sp1] circuit artifacts for version {} do not exist at {}. downloading...", + SP1_CIRCUIT_VERSION, + build_dir.display() + ); + install_circuit_artifacts(build_dir.clone()); + } + } } build_dir } @@ -39,6 +48,7 @@ pub fn try_install_circuit_artifacts() -> PathBuf { /// /// This function will download the latest circuit artifacts from the S3 bucket and extract them /// to the directory specified by [plonk_bn254_artifacts_dir()]. +#[cfg(feature = "network")] pub fn install_circuit_artifacts(build_dir: PathBuf) { // Create the build directory. std::fs::create_dir_all(&build_dir).expect("failed to create build directory"); @@ -66,12 +76,8 @@ pub fn install_circuit_artifacts(build_dir: PathBuf) { println!("[sp1] downloaded {} to {:?}", download_url, build_dir.to_str().unwrap(),); } -/// The directory where the circuit artifacts will be stored. -pub fn install_circuit_artifacts_dir() -> PathBuf { - dirs::home_dir().unwrap().join(".sp1").join("circuits").join(SP1_CIRCUIT_VERSION) -} - /// Download the file with a progress bar that indicates the progress. +#[cfg(feature = "network")] pub async fn download_file( client: &Client, url: &str, diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index d699a4c4be..da73835c01 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -6,6 +6,7 @@ //! in the official SP1 documentation for a quick start guide. #[rustfmt::skip] +#[cfg(feature = "network")] pub mod proto { pub mod network; } @@ -29,8 +30,12 @@ use cfg_if::cfg_if; pub use proof::*; pub use provers::SP1VerificationError; use sp1_prover::components::DefaultProverComponents; + use std::env; +#[cfg(feature = "network")] +use {std::future::Future, tokio::task::block_in_place}; + pub use provers::{CpuProver, MockProver, Prover}; pub use sp1_core_executor::{ExecutionReport, HookEnv, SP1Context, SP1ContextBuilder}; @@ -267,6 +272,22 @@ impl Default for ProverClient { } } +/// Utility method for blocking on an async function. +/// +/// If we're already in a tokio runtime, we'll block in place. Otherwise, we'll create a new +/// runtime. +#[cfg(feature = "network")] +pub fn block_on(fut: impl Future) -> T { + // Handle case if we're already in an tokio runtime. + if let Ok(handle) = tokio::runtime::Handle::try_current() { + block_in_place(|| handle.block_on(fut)) + } else { + // Otherwise create a new runtime. + let rt = tokio::runtime::Runtime::new().expect("Failed to create a new runtime"); + rt.block_on(fut) + } +} + #[cfg(test)] mod tests { diff --git a/crates/sdk/src/network/prover.rs b/crates/sdk/src/network/prover.rs index cd267cc2bc..0b0759fcca 100644 --- a/crates/sdk/src/network/prover.rs +++ b/crates/sdk/src/network/prover.rs @@ -11,10 +11,11 @@ use crate::{ use anyhow::Result; use serde::de::DeserializeOwned; use sp1_core_machine::io::SP1Stdin; -use sp1_cuda::block_on; use sp1_prover::{components::DefaultProverComponents, SP1Prover, SP1_CIRCUIT_VERSION}; use sp1_stark::SP1ProverOpts; -use tokio::time::sleep; + +#[cfg(feature = "network")] +use {crate::block_on, tokio::time::sleep}; use crate::provers::{CpuProver, ProofOpts, ProverType}; diff --git a/crates/stark/Cargo.toml b/crates/stark/Cargo.toml index e9c76632e1..e00ab29903 100644 --- a/crates/stark/Cargo.toml +++ b/crates/stark/Cargo.toml @@ -37,6 +37,8 @@ itertools = "0.13.0" tracing = "0.1.40" rayon-scan = "0.1.1" arrayref = "0.3.8" +getrandom = { version = "0.2.15", features = ["custom"] } + [dev-dependencies] sp1-zkvm = { workspace = true } diff --git a/crates/zkvm/entrypoint/Cargo.toml b/crates/zkvm/entrypoint/Cargo.toml index bd9fed0147..82affe885f 100644 --- a/crates/zkvm/entrypoint/Cargo.toml +++ b/crates/zkvm/entrypoint/Cargo.toml @@ -12,7 +12,7 @@ categories = { workspace = true } [dependencies] bincode = "1.3.3" cfg-if = "1.0.0" -getrandom = { version = "0.2.14", features = ["custom"] } +getrandom = { version = "0.2.15", features = ["custom"] } once_cell = "1.19.0" rand = "0.8.5" serde = { version = "1.0.204", features = ["derive"] } From d342d6d6b712723d6ce1b2f40b575d6b2babec6c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 14:48:40 -0700 Subject: [PATCH 133/268] change to 1 --- crates/prover/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 53f033b1db..46c3548e85 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -496,7 +496,7 @@ impl SP1Prover { ) -> Result, SP1RecursionProverError> { // Set the batch size for the reduction tree. let batch_size = 2; - let first_layer_batch_size = 2; + let first_layer_batch_size = 1; let shard_proofs = &proof.proof.0; // Get the leaf challenger. From b4e59338f766822a8fb03f688bd23241f1ba2e6c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 14:59:02 -0700 Subject: [PATCH 134/268] same as before --- crates/prover/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 46c3548e85..53f033b1db 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -496,7 +496,7 @@ impl SP1Prover { ) -> Result, SP1RecursionProverError> { // Set the batch size for the reduction tree. let batch_size = 2; - let first_layer_batch_size = 1; + let first_layer_batch_size = 2; let shard_proofs = &proof.proof.0; // Get the leaf challenger. From 05bbd72c9ebaf08098fbab2ceaaa8d56c29f5a2a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 15:17:11 -0700 Subject: [PATCH 135/268] chore: merge dev (#1442) Co-authored-by: Shaked Regev Co-authored-by: John Guibas Co-authored-by: Yuwen Zhang Co-authored-by: Matt Stam <15695189+mattstam@users.noreply.github.com> Co-authored-by: shakedregev <35384901+shakedregev@users.noreply.github.com> Co-authored-by: Chris T. --- Cargo.lock | 48 +++++++++---------- Cargo.toml | 48 +++++++++---------- crates/build/CHANGELOG.md | 2 +- crates/cli/CHANGELOG.md | 7 ++- crates/core/executor/src/lib.rs | 1 + crates/core/executor/src/state.rs | 17 +++---- .../utils/serde.rs => executor/src/utils.rs} | 2 +- crates/core/machine/CHANGELOG.md | 4 +- crates/core/machine/src/utils/mod.rs | 2 - crates/derive/CHANGELOG.md | 2 +- crates/eval/CHANGELOG.md | 36 ++++++++++++++ crates/helper/CHANGELOG.md | 2 +- crates/primitives/CHANGELOG.md | 2 +- crates/prover/CHANGELOG.md | 9 +++- crates/recursion/circuit/CHANGELOG.md | 2 +- crates/recursion/compiler/CHANGELOG.md | 2 +- crates/recursion/core/CHANGELOG.md | 2 +- crates/recursion/derive/CHANGELOG.md | 2 +- crates/recursion/gnark-cli/CHANGELOG.md | 7 ++- crates/recursion/gnark-ffi/CHANGELOG.md | 4 +- crates/recursion/program/CHANGELOG.md | 2 +- crates/sdk/CHANGELOG.md | 4 +- crates/zkvm/entrypoint/CHANGELOG.md | 2 +- crates/zkvm/lib/CHANGELOG.md | 2 +- tests/bls12381-decompress/Cargo.lock | 6 +-- 25 files changed, 134 insertions(+), 83 deletions(-) rename crates/core/{machine/src/utils/serde.rs => executor/src/utils.rs} (95%) create mode 100644 crates/eval/CHANGELOG.md diff --git a/Cargo.lock b/Cargo.lock index cd185896b6..ab9b79ca6e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5921,7 +5921,7 @@ dependencies = [ [[package]] name = "sp1-build" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "anyhow", "cargo_metadata", @@ -5932,7 +5932,7 @@ dependencies = [ [[package]] name = "sp1-cli" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "anstyle", "anyhow", @@ -5967,7 +5967,7 @@ dependencies = [ [[package]] name = "sp1-core-executor" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "bincode", "bytemuck", @@ -6002,7 +6002,7 @@ dependencies = [ [[package]] name = "sp1-core-machine" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "anyhow", "arrayref", @@ -6069,7 +6069,7 @@ dependencies = [ [[package]] name = "sp1-cuda" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "bincode", "ctrlc", @@ -6090,7 +6090,7 @@ dependencies = [ [[package]] name = "sp1-curves" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "curve25519-dalek", "dashu", @@ -6110,7 +6110,7 @@ dependencies = [ [[package]] name = "sp1-derive" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "proc-macro2", "quote", @@ -6119,7 +6119,7 @@ dependencies = [ [[package]] name = "sp1-eval" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "anyhow", "bincode", @@ -6139,14 +6139,14 @@ dependencies = [ [[package]] name = "sp1-helper" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "sp1-build", ] [[package]] name = "sp1-lib" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "anyhow", "bincode", @@ -6158,7 +6158,7 @@ dependencies = [ [[package]] name = "sp1-primitives" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "itertools 0.13.0", "lazy_static", @@ -6170,7 +6170,7 @@ dependencies = [ [[package]] name = "sp1-prover" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "anyhow", "bincode", @@ -6208,7 +6208,7 @@ dependencies = [ [[package]] name = "sp1-recursion-circuit" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "bincode", "ff 0.13.0", @@ -6240,7 +6240,7 @@ dependencies = [ [[package]] name = "sp1-recursion-circuit-v2" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "bincode", "ff 0.13.0", @@ -6279,7 +6279,7 @@ dependencies = [ [[package]] name = "sp1-recursion-compiler" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "backtrace", "criterion", @@ -6312,7 +6312,7 @@ dependencies = [ [[package]] name = "sp1-recursion-core" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "arrayref", "backtrace", @@ -6349,7 +6349,7 @@ dependencies = [ [[package]] name = "sp1-recursion-core-v2" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "arrayref", "backtrace", @@ -6389,7 +6389,7 @@ dependencies = [ [[package]] name = "sp1-recursion-derive" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "proc-macro2", "quote", @@ -6398,7 +6398,7 @@ dependencies = [ [[package]] name = "sp1-recursion-gnark-cli" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "bincode", "clap", @@ -6407,7 +6407,7 @@ dependencies = [ [[package]] name = "sp1-recursion-gnark-ffi" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "anyhow", "bincode", @@ -6432,7 +6432,7 @@ dependencies = [ [[package]] name = "sp1-recursion-program" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "itertools 0.13.0", "p3-air", @@ -6462,7 +6462,7 @@ dependencies = [ [[package]] name = "sp1-sdk" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "alloy-sol-types", "anyhow", @@ -6508,7 +6508,7 @@ dependencies = [ [[package]] name = "sp1-stark" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "arrayref", "getrandom 0.2.15", @@ -6538,7 +6538,7 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "1.2.0-rc1" +version = "1.2.0-rc2" dependencies = [ "bincode", "cfg-if", diff --git a/Cargo.toml b/Cargo.toml index 61029a2038..f9c989051b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "1.2.0-rc1" +version = "1.2.0-rc2" edition = "2021" license = "MIT OR Apache-2.0" repository = "https://github.com/succinctlabs/sp1" @@ -48,29 +48,29 @@ debug-assertions = true [workspace.dependencies] # sp1 -sp1-build = { path = "crates/build", version = "1.2.0-rc1" } -sp1-cli = { path = "crates/cli", version = "1.2.0-rc1", default-features = false } -sp1-core-machine = { path = "crates/core/machine", version = "1.2.0-rc1" } -sp1-core-executor = { path = "crates/core/executor", version = "1.2.0-rc1" } -sp1-curves = { path = "crates/curves", version = "1.2.0-rc1" } -sp1-derive = { path = "crates/derive", version = "1.2.0-rc1" } -sp1-eval = { path = "crates/eval", version = "1.2.0-rc1" } -sp1-helper = { path = "crates/helper", version = "1.2.0-rc1", default-features = false } -sp1-primitives = { path = "crates/primitives", version = "1.2.0-rc1" } -sp1-prover = { path = "crates/prover", version = "1.2.0-rc1" } -sp1-recursion-compiler = { path = "crates/recursion/compiler", version = "1.2.0-rc1" } -sp1-recursion-core = { path = "crates/recursion/core", version = "1.2.0-rc1", default-features = false } -sp1-recursion-core-v2 = { path = "crates/recursion/core-v2", version = "1.2.0-rc1", default-features = false } -sp1-recursion-circuit-v2 = { path = "crates/recursion/circuit-v2", version = "1.2.0-rc1", default-features = false } -sp1-recursion-derive = { path = "crates/recursion/derive", version = "1.2.0-rc1", default-features = false } -sp1-recursion-gnark-ffi = { path = "crates/recursion/gnark-ffi", version = "1.2.0-rc1", default-features = false } -sp1-recursion-program = { path = "crates/recursion/program", version = "1.2.0-rc1", default-features = false } -sp1-recursion-circuit = { path = "crates/recursion/circuit", version = "1.2.0-rc1", default-features = false } -sp1-sdk = { path = "crates/sdk", version = "1.2.0-rc1" } -sp1-cuda = { path = "crates/cuda", version = "1.2.0-rc1" } -sp1-stark = { path = "crates/stark", version = "1.2.0-rc1" } -sp1-lib = { path = "crates/zkvm/lib", version = "1.2.0-rc1", default-features = false } -sp1-zkvm = { path = "crates/zkvm/entrypoint", version = "1.2.0-rc1", default-features = false } +sp1-build = { path = "crates/build", version = "1.2.0-rc2" } +sp1-cli = { path = "crates/cli", version = "1.2.0-rc2", default-features = false } +sp1-core-machine = { path = "crates/core/machine", version = "1.2.0-rc2" } +sp1-core-executor = { path = "crates/core/executor", version = "1.2.0-rc2" } +sp1-curves = { path = "crates/curves", version = "1.2.0-rc2" } +sp1-derive = { path = "crates/derive", version = "1.2.0-rc2" } +sp1-eval = { path = "crates/eval", version = "1.2.0-rc2" } +sp1-helper = { path = "crates/helper", version = "1.2.0-rc2", default-features = false } +sp1-primitives = { path = "crates/primitives", version = "1.2.0-rc2" } +sp1-prover = { path = "crates/prover", version = "1.2.0-rc2" } +sp1-recursion-compiler = { path = "crates/recursion/compiler", version = "1.2.0-rc2" } +sp1-recursion-core = { path = "crates/recursion/core", version = "1.2.0-rc2", default-features = false } +sp1-recursion-core-v2 = { path = "crates/recursion/core-v2", version = "1.2.0-rc2", default-features = false } +sp1-recursion-circuit-v2 = { path = "crates/recursion/circuit-v2", version = "1.2.0-rc2", default-features = false } +sp1-recursion-derive = { path = "crates/recursion/derive", version = "1.2.0-rc2", default-features = false } +sp1-recursion-gnark-ffi = { path = "crates/recursion/gnark-ffi", version = "1.2.0-rc2", default-features = false } +sp1-recursion-program = { path = "crates/recursion/program", version = "1.2.0-rc2", default-features = false } +sp1-recursion-circuit = { path = "crates/recursion/circuit", version = "1.2.0-rc2", default-features = false } +sp1-sdk = { path = "crates/sdk", version = "1.2.0-rc2" } +sp1-cuda = { path = "crates/cuda", version = "1.2.0-rc2" } +sp1-stark = { path = "crates/stark", version = "1.2.0-rc2" } +sp1-lib = { path = "crates/zkvm/lib", version = "1.2.0-rc2", default-features = false } +sp1-zkvm = { path = "crates/zkvm/entrypoint", version = "1.2.0-rc2", default-features = false } # p3 p3-air = "0.1.3-succinct" diff --git a/crates/build/CHANGELOG.md b/crates/build/CHANGELOG.md index 971ec16ea6..90563fbe0b 100644 --- a/crates/build/CHANGELOG.md +++ b/crates/build/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - use C++ toolchain when building programs that need C ([#1092](https://github.com/succinctlabs/sp1/pull/1092)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-build-v1.0.0-rc.1...sp1-build-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-build-v1.0.0-rc1...sp1-build-v1.0.0-rc1) - 2024-07-19 ### Fixed diff --git a/crates/cli/CHANGELOG.md b/crates/cli/CHANGELOG.md index 8dd86ddcba..6a82f83389 100644 --- a/crates/cli/CHANGELOG.md +++ b/crates/cli/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.2.0-rc2](https://github.com/succinctlabs/sp1/compare/sp1-cli-v1.2.0-rc1...sp1-cli-v1.2.0-rc2) - 2024-08-29 + +### Other +- update Cargo.lock dependencies + ## [1.1.0](https://github.com/succinctlabs/sp1/compare/sp1-cli-v1.0.1...sp1-cli-v1.1.0) - 2024-08-02 ### Added @@ -21,7 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - *(deps)* bump anstyle from 1.0.7 to 1.0.8 ([#1194](https://github.com/succinctlabs/sp1/pull/1194)) - Merge branch 'main' into dev -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-cli-v1.0.0-rc.1...sp1-cli-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-cli-v1.0.0-rc1...sp1-cli-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/core/executor/src/lib.rs b/crates/core/executor/src/lib.rs index e45a5ea6c7..eb9b850246 100644 --- a/crates/core/executor/src/lib.rs +++ b/crates/core/executor/src/lib.rs @@ -36,6 +36,7 @@ mod report; mod state; pub mod subproof; pub mod syscalls; +mod utils; pub use context::*; pub use executor::*; diff --git a/crates/core/executor/src/state.rs b/crates/core/executor/src/state.rs index aa97dc2793..40e2065950 100644 --- a/crates/core/executor/src/state.rs +++ b/crates/core/executor/src/state.rs @@ -13,6 +13,7 @@ use crate::{ events::MemoryRecord, record::{ExecutionRecord, MemoryAccessRecord}, syscalls::SyscallCode, + utils::{deserialize_hashmap_as_vec, serialize_hashmap_as_vec}, ExecutorMode, }; @@ -39,18 +40,18 @@ pub struct ExecutionState { /// The memory which instructions operate over. Values contain the memory value and last shard /// + timestamp that each memory address was accessed. - // #[serde( - // serialize_with = "serialize_hashmap_as_vec", - // deserialize_with = "deserialize_hashmap_as_vec" - // )] + #[serde( + serialize_with = "serialize_hashmap_as_vec", + deserialize_with = "deserialize_hashmap_as_vec" + )] pub memory: HashMap>, /// Uninitialized memory addresses that have a specific value they should be initialized with. /// SyscallHintRead uses this to write hint data into uninitialized memory. - // #[serde( - // serialize_with = "serialize_hashmap_as_vec", - // deserialize_with = "deserialize_hashmap_as_vec" - // )] + #[serde( + serialize_with = "serialize_hashmap_as_vec", + deserialize_with = "deserialize_hashmap_as_vec" + )] pub uninitialized_memory: HashMap>, /// A stream of input values (global to the entire program). diff --git a/crates/core/machine/src/utils/serde.rs b/crates/core/executor/src/utils.rs similarity index 95% rename from crates/core/machine/src/utils/serde.rs rename to crates/core/executor/src/utils.rs index fa7fdcef98..2b1448a893 100644 --- a/crates/core/machine/src/utils/serde.rs +++ b/crates/core/executor/src/utils.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use hashbrown::HashMap; use nohash_hasher::BuildNoHashHasher; use serde::{Deserialize, Deserializer, Serialize, Serializer}; diff --git a/crates/core/machine/CHANGELOG.md b/crates/core/machine/CHANGELOG.md index 8d1e6df781..d989945fb2 100644 --- a/crates/core/machine/CHANGELOG.md +++ b/crates/core/machine/CHANGELOG.md @@ -54,11 +54,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - generate dep optimizations ([#1125](https://github.com/succinctlabs/sp1/pull/1125)) - add audit reports ([#1142](https://github.com/succinctlabs/sp1/pull/1142)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-core-v1.0.0-rc.1...sp1-core-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-core-v1.0.0-rc1...sp1-core-v1.0.0-rc1) - 2024-07-19 ### Added -- 1.0.0-rc.1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) +- 1.0.0-rc1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) - multi-threaded tracing ([#1124](https://github.com/succinctlabs/sp1/pull/1124)) - parallel recursion tracegen ([#1095](https://github.com/succinctlabs/sp1/pull/1095)) - publish sp1 to crates.io ([#1052](https://github.com/succinctlabs/sp1/pull/1052)) diff --git a/crates/core/machine/src/utils/mod.rs b/crates/core/machine/src/utils/mod.rs index 6c08a56569..38d6500528 100644 --- a/crates/core/machine/src/utils/mod.rs +++ b/crates/core/machine/src/utils/mod.rs @@ -4,14 +4,12 @@ mod logger; #[cfg(any(test, feature = "programs"))] mod programs; mod prove; -mod serde; mod span; mod tracer; pub use buffer::*; pub use logger::*; pub use prove::*; -pub use serde::*; use sp1_curves::params::Limbs; pub use span::*; pub use tracer::*; diff --git a/crates/derive/CHANGELOG.md b/crates/derive/CHANGELOG.md index 449fe7ad87..63727ac0c2 100644 --- a/crates/derive/CHANGELOG.md +++ b/crates/derive/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - update tg ([#1214](https://github.com/succinctlabs/sp1/pull/1214)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-derive-v1.0.0-rc.1...sp1-derive-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-derive-v1.0.0-rc1...sp1-derive-v1.0.0-rc1) - 2024-07-19 ### Other diff --git a/crates/eval/CHANGELOG.md b/crates/eval/CHANGELOG.md new file mode 100644 index 0000000000..dfd5cda08e --- /dev/null +++ b/crates/eval/CHANGELOG.md @@ -0,0 +1,36 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [1.2.0-rc2](https://github.com/succinctlabs/sp1/compare/sp1-eval-v1.2.0-rc1...sp1-eval-v1.2.0-rc2) - 2024-08-29 + +### Added +- performance test + add to CI ([#1426](https://github.com/succinctlabs/sp1/pull/1426)) +- restore acknolwedgements +- update tg ([#1214](https://github.com/succinctlabs/sp1/pull/1214)) +- v1.0.1 ([#1165](https://github.com/succinctlabs/sp1/pull/1165)) +- new README img ([#226](https://github.com/succinctlabs/sp1/pull/226)) +- readme updates ([#205](https://github.com/succinctlabs/sp1/pull/205)) +- more final touches ([#194](https://github.com/succinctlabs/sp1/pull/194)) +- curtaup + release system + cargo prove CLI updates ([#178](https://github.com/succinctlabs/sp1/pull/178)) +- (perf) updates from Plonky3 and verifier refactor ([#156](https://github.com/succinctlabs/sp1/pull/156)) +- developer experience improvements ([#145](https://github.com/succinctlabs/sp1/pull/145)) +- toolchain build from source & install ([#113](https://github.com/succinctlabs/sp1/pull/113)) +- io::read io::write ([#126](https://github.com/succinctlabs/sp1/pull/126)) +- tracing, profiling, benchmarking ([#99](https://github.com/succinctlabs/sp1/pull/99)) + +### Other +- update sp1 banner ([#1260](https://github.com/succinctlabs/sp1/pull/1260)) +- update docs ([#1240](https://github.com/succinctlabs/sp1/pull/1240)) +- final touches for public release ([#239](https://github.com/succinctlabs/sp1/pull/239)) +- update docs with slight nits ([#224](https://github.com/succinctlabs/sp1/pull/224)) +- sp1 rename ([#212](https://github.com/succinctlabs/sp1/pull/212)) +- enshrine AlignedBorrow macro ([#209](https://github.com/succinctlabs/sp1/pull/209)) +- readme cleanup ([#196](https://github.com/succinctlabs/sp1/pull/196)) +- rename succinct to curta ([#192](https://github.com/succinctlabs/sp1/pull/192)) +- better curta graphic ([#184](https://github.com/succinctlabs/sp1/pull/184)) +- Initial commit diff --git a/crates/helper/CHANGELOG.md b/crates/helper/CHANGELOG.md index 8b47f9b844..a42a349613 100644 --- a/crates/helper/CHANGELOG.md +++ b/crates/helper/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - update tg ([#1214](https://github.com/succinctlabs/sp1/pull/1214)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-helper-v1.0.0-rc.1...sp1-helper-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-helper-v1.0.0-rc1...sp1-helper-v1.0.0-rc1) - 2024-07-19 ### Fixed diff --git a/crates/primitives/CHANGELOG.md b/crates/primitives/CHANGELOG.md index 34c35c3d0c..7c34732264 100644 --- a/crates/primitives/CHANGELOG.md +++ b/crates/primitives/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - update tg ([#1214](https://github.com/succinctlabs/sp1/pull/1214)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-primitives-v1.0.0-rc.1...sp1-primitives-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-primitives-v1.0.0-rc1...sp1-primitives-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/prover/CHANGELOG.md b/crates/prover/CHANGELOG.md index 161cfb8942..469c6b6705 100644 --- a/crates/prover/CHANGELOG.md +++ b/crates/prover/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.2.0-rc2](https://github.com/succinctlabs/sp1/compare/sp1-prover-v1.2.0-rc1...sp1-prover-v1.2.0-rc2) - 2024-08-29 + +### Other +- update Cargo.lock dependencies + ## [1.1.0](https://github.com/succinctlabs/sp1/compare/sp1-prover-v1.0.1...sp1-prover-v1.1.0) - 2024-08-02 ### Added @@ -25,11 +30,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - *(deps)* bump thiserror from 1.0.61 to 1.0.63 ([#1136](https://github.com/succinctlabs/sp1/pull/1136)) - add audit reports ([#1142](https://github.com/succinctlabs/sp1/pull/1142)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-prover-v1.0.0-rc.1...sp1-prover-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-prover-v1.0.0-rc1...sp1-prover-v1.0.0-rc1) - 2024-07-19 ### Added -- 1.0.0-rc.1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) +- 1.0.0-rc1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) - parallel recursion tracegen ([#1095](https://github.com/succinctlabs/sp1/pull/1095)) - result instead of exit(1) on trap in recursion ([#1089](https://github.com/succinctlabs/sp1/pull/1089)) - publish sp1 to crates.io ([#1052](https://github.com/succinctlabs/sp1/pull/1052)) diff --git a/crates/recursion/circuit/CHANGELOG.md b/crates/recursion/circuit/CHANGELOG.md index ee32d93bd9..c2e0a0af20 100644 --- a/crates/recursion/circuit/CHANGELOG.md +++ b/crates/recursion/circuit/CHANGELOG.md @@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - prover trait cleanup ([#1170](https://github.com/succinctlabs/sp1/pull/1170)) - add audit reports ([#1142](https://github.com/succinctlabs/sp1/pull/1142)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-circuit-v1.0.0-rc.1...sp1-recursion-circuit-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-circuit-v1.0.0-rc1...sp1-recursion-circuit-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/recursion/compiler/CHANGELOG.md b/crates/recursion/compiler/CHANGELOG.md index 0826ab86d7..b703c6065f 100644 --- a/crates/recursion/compiler/CHANGELOG.md +++ b/crates/recursion/compiler/CHANGELOG.md @@ -15,7 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - BabyBear range check Gnark ([#1225](https://github.com/succinctlabs/sp1/pull/1225)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-compiler-v1.0.0-rc.1...sp1-recursion-compiler-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-compiler-v1.0.0-rc1...sp1-recursion-compiler-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/recursion/core/CHANGELOG.md b/crates/recursion/core/CHANGELOG.md index 1f859293d0..f2e143afe1 100644 --- a/crates/recursion/core/CHANGELOG.md +++ b/crates/recursion/core/CHANGELOG.md @@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - *(deps)* bump arrayref from 0.3.7 to 0.3.8 ([#1154](https://github.com/succinctlabs/sp1/pull/1154)) - add audit reports ([#1142](https://github.com/succinctlabs/sp1/pull/1142)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-core-v1.0.0-rc.1...sp1-recursion-core-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-core-v1.0.0-rc1...sp1-recursion-core-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/recursion/derive/CHANGELOG.md b/crates/recursion/derive/CHANGELOG.md index 05c7977501..ba875412f8 100644 --- a/crates/recursion/derive/CHANGELOG.md +++ b/crates/recursion/derive/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - update tg ([#1214](https://github.com/succinctlabs/sp1/pull/1214)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-derive-v1.0.0-rc.1...sp1-recursion-derive-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-derive-v1.0.0-rc1...sp1-recursion-derive-v1.0.0-rc1) - 2024-07-19 ### Other diff --git a/crates/recursion/gnark-cli/CHANGELOG.md b/crates/recursion/gnark-cli/CHANGELOG.md index 6084a52d03..c833e51050 100644 --- a/crates/recursion/gnark-cli/CHANGELOG.md +++ b/crates/recursion/gnark-cli/CHANGELOG.md @@ -7,12 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.2.0-rc2](https://github.com/succinctlabs/sp1/compare/sp1-recursion-gnark-cli-v1.2.0-rc1...sp1-recursion-gnark-cli-v1.2.0-rc2) - 2024-08-29 + +### Other +- update Cargo.lock dependencies + ## [1.1.0](https://github.com/succinctlabs/sp1/compare/sp1-recursion-gnark-cli-v1.0.1...sp1-recursion-gnark-cli-v1.1.0) - 2024-08-02 ### Added - update tg ([#1214](https://github.com/succinctlabs/sp1/pull/1214)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-gnark-cli-v1.0.0-rc.1...sp1-recursion-gnark-cli-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-gnark-cli-v1.0.0-rc1...sp1-recursion-gnark-cli-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/recursion/gnark-ffi/CHANGELOG.md b/crates/recursion/gnark-ffi/CHANGELOG.md index 1d7abddc03..37ee6833d1 100644 --- a/crates/recursion/gnark-ffi/CHANGELOG.md +++ b/crates/recursion/gnark-ffi/CHANGELOG.md @@ -18,11 +18,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Other - *(deps)* bump serde_json from 1.0.120 to 1.0.121 ([#1196](https://github.com/succinctlabs/sp1/pull/1196)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-gnark-ffi-v1.0.0-rc.1...sp1-recursion-gnark-ffi-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-gnark-ffi-v1.0.0-rc1...sp1-recursion-gnark-ffi-v1.0.0-rc1) - 2024-07-19 ### Added -- 1.0.0-rc.1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) +- 1.0.0-rc1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) - publish sp1 to crates.io ([#1052](https://github.com/succinctlabs/sp1/pull/1052)) - update verifier contract templates ([#963](https://github.com/succinctlabs/sp1/pull/963)) - circuit version in proof ([#926](https://github.com/succinctlabs/sp1/pull/926)) diff --git a/crates/recursion/program/CHANGELOG.md b/crates/recursion/program/CHANGELOG.md index 11ab52f1c5..7a5991ce79 100644 --- a/crates/recursion/program/CHANGELOG.md +++ b/crates/recursion/program/CHANGELOG.md @@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - prover trait cleanup ([#1170](https://github.com/succinctlabs/sp1/pull/1170)) - add audit reports ([#1142](https://github.com/succinctlabs/sp1/pull/1142)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-program-v1.0.0-rc.1...sp1-recursion-program-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-recursion-program-v1.0.0-rc1...sp1-recursion-program-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/sdk/CHANGELOG.md b/crates/sdk/CHANGELOG.md index 99b25672aa..80c7c4d277 100644 --- a/crates/sdk/CHANGELOG.md +++ b/crates/sdk/CHANGELOG.md @@ -26,11 +26,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - *(deps)* bump tokio from 1.38.0 to 1.38.1 ([#1137](https://github.com/succinctlabs/sp1/pull/1137)) - add audit reports ([#1142](https://github.com/succinctlabs/sp1/pull/1142)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-sdk-v1.0.0-rc.1...sp1-sdk-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-sdk-v1.0.0-rc1...sp1-sdk-v1.0.0-rc1) - 2024-07-19 ### Added -- 1.0.0-rc.1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) +- 1.0.0-rc1 ([#1126](https://github.com/succinctlabs/sp1/pull/1126)) - publish sp1 to crates.io ([#1052](https://github.com/succinctlabs/sp1/pull/1052)) - critical constraint changes ([#1046](https://github.com/succinctlabs/sp1/pull/1046)) - cycle limit ([#1027](https://github.com/succinctlabs/sp1/pull/1027)) diff --git a/crates/zkvm/entrypoint/CHANGELOG.md b/crates/zkvm/entrypoint/CHANGELOG.md index 752b8e6467..6d65a13a77 100644 --- a/crates/zkvm/entrypoint/CHANGELOG.md +++ b/crates/zkvm/entrypoint/CHANGELOG.md @@ -15,7 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - mutable static ref warning in halt syscall ([#1217](https://github.com/succinctlabs/sp1/pull/1217)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-zkvm-v1.0.0-rc.1...sp1-zkvm-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-zkvm-v1.0.0-rc1...sp1-zkvm-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/crates/zkvm/lib/CHANGELOG.md b/crates/zkvm/lib/CHANGELOG.md index 0e0ca7d60d..f822f98805 100644 --- a/crates/zkvm/lib/CHANGELOG.md +++ b/crates/zkvm/lib/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - update tg ([#1214](https://github.com/succinctlabs/sp1/pull/1214)) -## [1.0.0-rc.1](https://github.com/succinctlabs/sp1/compare/sp1-lib-v1.0.0-rc.1...sp1-lib-v1.0.0-rc.1) - 2024-07-19 +## [1.0.0-rc1](https://github.com/succinctlabs/sp1/compare/sp1-lib-v1.0.0-rc1...sp1-lib-v1.0.0-rc1) - 2024-07-19 ### Added diff --git a/tests/bls12381-decompress/Cargo.lock b/tests/bls12381-decompress/Cargo.lock index 1dacc7f0db..03a6649fdf 100644 --- a/tests/bls12381-decompress/Cargo.lock +++ b/tests/bls12381-decompress/Cargo.lock @@ -34,7 +34,7 @@ dependencies = [ [[package]] name = "bls-decompress-test" -version = "1.0.0-rc.1" +version = "1.0.0-rc1" dependencies = [ "sp1-zkvm", ] @@ -335,7 +335,7 @@ dependencies = [ [[package]] name = "sp1-lib" -version = "1.0.0-rc.1" +version = "1.0.0-rc1" dependencies = [ "anyhow", "bincode", @@ -347,7 +347,7 @@ dependencies = [ [[package]] name = "sp1-zkvm" -version = "1.0.0-rc.1" +version = "1.0.0-rc1" dependencies = [ "bincode", "cfg-if", From 23f14fd3b5648894a5077bb62c52c8856f4d95a9 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 15:40:09 -0700 Subject: [PATCH 136/268] chore: merge dev (#1443) Co-authored-by: Shaked Regev Co-authored-by: John Guibas Co-authored-by: Yuwen Zhang Co-authored-by: Matt Stam <15695189+mattstam@users.noreply.github.com> Co-authored-by: shakedregev <35384901+shakedregev@users.noreply.github.com> Co-authored-by: Chris T. From 2b3c1a8d115eea9c38ba927189899f7abaebe10b Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 15:40:46 -0700 Subject: [PATCH 137/268] Revert "chore: merge dev" (#1448) From 5d82c18e283248c873fe00846f30952d28875bb6 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 16:55:34 -0700 Subject: [PATCH 138/268] digest --- .../circuit-v2/src/machine/compress.rs | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 6f67f90279..fc9330acae 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -84,10 +84,6 @@ where builder: &mut Builder, machine: &StarkMachine, input: SP1CompressWitnessVariable, - // TODO: add vk correctness check. - // vk_root: SC::Digest, - // Inclusion proof for the compressed vk. - // vk_inclusion_proof: proof, ) { // Read input. let SP1CompressWitnessVariable { vks_and_proofs, is_complete } = input; @@ -247,14 +243,13 @@ where // Assert that the current values match the accumulated values. - // // Assert that the start deferred digest is equal to the current deferred digest. - // for (digest, current_digest) in reconstruct_deferred_digest.iter().zip_eq( - // current_public_values - // .start_reconstruct_deferred_digest - // .iter(), - // ) { - // builder.assert_felt_eq(*digest, *current_digest); - // } + // Assert that the start deferred digest is equal to the current deferred digest. + for (digest, current_digest) in reconstruct_deferred_digest + .iter() + .zip_eq(current_public_values.start_reconstruct_deferred_digest.iter()) + { + builder.assert_felt_eq(*digest, *current_digest); + } // // Consistency checks for all accumulated values. @@ -367,15 +362,6 @@ where { *digest = *current_digest; } - - // Less nice version of above but simialr to original code: - // #[allow(clippy::needless_range_loop)] - // for i in 0..deferred_proofs_digest.len() { - // builder.assign( - // deferred_proofs_digest[i], - // current_public_values.deferred_proofs_digest[i], - // ); - // } } // Update the deferred proof digest. From c754efbe5133fea98fb1e4e045156cc1fc88c932 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 18:35:48 -0700 Subject: [PATCH 139/268] more constraints --- .../circuit-v2/src/machine/compress.rs | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index fc9330acae..c6dd19e8b5 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -185,13 +185,16 @@ where // Initiallize start pc. compress_public_values.start_pc = current_public_values.start_pc; + pc = current_public_values.start_pc; // Initialize start shard. compress_public_values.start_shard = current_public_values.start_shard; + shard = current_public_values.start_shard; // Initialize start execution shard. compress_public_values.start_execution_shard = current_public_values.start_execution_shard; + execution_shard = current_public_values.start_execution_shard; // Initialize the MemoryInitialize address bits. for (bit, (first_bit, current_bit)) in init_addr_bits.iter_mut().zip( @@ -254,19 +257,18 @@ where // // Consistency checks for all accumulated values. // Assert that the sp1_vk digest is always the same. - // for (digest, current) in - // sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { - // builder.assert_felt_eq(*digest, current); - // } + for (digest, current) in sp1_vk_digest.iter().zip(current_public_values.sp1_vk_digest) { + builder.assert_felt_eq(*digest, current); + } - // // Assert that the start pc is equal to the current pc. - // builder.assert_felt_eq(pc, current_public_values.start_pc); + // Assert that the start pc is equal to the current pc. + builder.assert_felt_eq(pc, current_public_values.start_pc); - // // Verify that the shard is equal to the current shard. - // builder.assert_felt_eq(shard, current_public_values.start_shard); + // Verify that the shard is equal to the current shard. + builder.assert_felt_eq(shard, current_public_values.start_shard); - // // Verfiy that the exeuction shard is equal to the current execution shard. - // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + // Verfiy that the exeuction shard is equal to the current execution shard. + builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); // // Assert that the leaf challenger is always the same. From ed1ed9eb24298d21423516bbe8aeafcb1aff8253 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 18:43:51 -0700 Subject: [PATCH 140/268] function name --- crates/recursion/circuit-v2/src/machine/compress.rs | 7 +------ crates/recursion/core-v2/src/runtime/instruction.rs | 2 +- crates/recursion/core-v2/src/runtime/mod.rs | 2 +- crates/recursion/core-v2/src/runtime/record.rs | 2 +- crates/recursion/core/src/air/public_values.rs | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index c6dd19e8b5..06638cd6ed 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -270,7 +270,7 @@ where // Verfiy that the exeuction shard is equal to the current execution shard. builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); - // // Assert that the leaf challenger is always the same. + // Assert that the leaf challenger is always the same. // // Assert that the MemoryInitialize address bits are the same. // for (bit, current_bit) in @@ -289,11 +289,6 @@ where // Assert that the leaf challenger is always the same. - // assert_challenger_eq_pv( - // builder, - // &leaf_challenger, - // current_public_values.leaf_challenger, - // ); // // Assert that the current challenger matches the start reconstruct challenger. // assert_challenger_eq_pv( // builder, diff --git a/crates/recursion/core-v2/src/runtime/instruction.rs b/crates/recursion/core-v2/src/runtime/instruction.rs index a565cf9e34..6a7dbc8725 100644 --- a/crates/recursion/core-v2/src/runtime/instruction.rs +++ b/crates/recursion/core-v2/src/runtime/instruction.rs @@ -206,7 +206,7 @@ pub fn fri_fold( pub fn commit_public_values( public_values_a: &RecursionPublicValues, ) -> Instruction { - let pv_a = public_values_a.to_vec().map(|pv| Address(F::from_canonical_u32(pv))); + let pv_a = public_values_a.as_array().map(|pv| Address(F::from_canonical_u32(pv))); let pv_address: &RecursionPublicValues> = pv_a.as_slice().borrow(); Instruction::CommitPublicValues(Box::new(CommitPublicValuesInstr { diff --git a/crates/recursion/core-v2/src/runtime/mod.rs b/crates/recursion/core-v2/src/runtime/mod.rs index e9072f0d41..6c392d2fe2 100644 --- a/crates/recursion/core-v2/src/runtime/mod.rs +++ b/crates/recursion/core-v2/src/runtime/mod.rs @@ -461,7 +461,7 @@ where } Instruction::CommitPublicValues(instr) => { - let pv_addrs = instr.pv_addrs.to_vec(); + let pv_addrs = instr.pv_addrs.as_array(); let pv_values: [F; RECURSIVE_PROOF_NUM_PV_ELTS] = array::from_fn(|i| self.memory.mr(pv_addrs[i]).val[0]); self.record.public_values = *pv_values.as_slice().borrow(); diff --git a/crates/recursion/core-v2/src/runtime/record.rs b/crates/recursion/core-v2/src/runtime/record.rs index 59bb10ad7c..0835ce590e 100644 --- a/crates/recursion/core-v2/src/runtime/record.rs +++ b/crates/recursion/core-v2/src/runtime/record.rs @@ -59,7 +59,7 @@ impl MachineRecord for ExecutionRecord { } fn public_values(&self) -> Vec { - let pv_elms = self.public_values.to_vec(); + let pv_elms = self.public_values.as_array(); let ret: [T; PROOF_MAX_NUM_PVS] = array::from_fn(|i| { if i < pv_elms.len() { diff --git a/crates/recursion/core/src/air/public_values.rs b/crates/recursion/core/src/air/public_values.rs index 3a30efc84f..3997ab1002 100644 --- a/crates/recursion/core/src/air/public_values.rs +++ b/crates/recursion/core/src/air/public_values.rs @@ -138,7 +138,7 @@ pub struct RecursionPublicValues { /// Converts the public values to an array of elements. impl RecursionPublicValues { - pub fn to_vec(&self) -> [F; RECURSIVE_PROOF_NUM_PV_ELTS] { + pub fn as_array(&self) -> [F; RECURSIVE_PROOF_NUM_PV_ELTS] { let mut ret = [F::default(); RECURSIVE_PROOF_NUM_PV_ELTS]; let pv: &mut RecursionPublicValues = ret.as_mut_slice().borrow_mut(); From 2ae7f15b6f483ba3784bbb1137332ac9a6d0a57d Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 21:08:16 -0700 Subject: [PATCH 141/268] execution shard --- .../recursion/circuit-v2/src/machine/compress.rs | 2 +- crates/recursion/core/src/air/public_values.rs | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 06638cd6ed..669439d56b 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -268,7 +268,7 @@ where builder.assert_felt_eq(shard, current_public_values.start_shard); // Verfiy that the exeuction shard is equal to the current execution shard. - builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); // Assert that the leaf challenger is always the same. diff --git a/crates/recursion/core/src/air/public_values.rs b/crates/recursion/core/src/air/public_values.rs index 3997ab1002..ac380016c3 100644 --- a/crates/recursion/core/src/air/public_values.rs +++ b/crates/recursion/core/src/air/public_values.rs @@ -11,7 +11,7 @@ use sp1_stark::{air::POSEIDON_NUM_WORDS, Word, PROOF_MAX_NUM_PVS}; use static_assertions::const_assert_eq; use std::{ borrow::BorrowMut, - mem::{size_of, transmute}, + mem::{size_of, transmute, MaybeUninit}, }; pub const PV_DIGEST_NUM_WORDS: usize = 8; @@ -137,12 +137,13 @@ pub struct RecursionPublicValues { } /// Converts the public values to an array of elements. -impl RecursionPublicValues { +impl RecursionPublicValues { pub fn as_array(&self) -> [F; RECURSIVE_PROOF_NUM_PV_ELTS] { - let mut ret = [F::default(); RECURSIVE_PROOF_NUM_PV_ELTS]; - let pv: &mut RecursionPublicValues = ret.as_mut_slice().borrow_mut(); - - *pv = *self; - ret + unsafe { + let mut ret = [MaybeUninit::::zeroed().assume_init(); RECURSIVE_PROOF_NUM_PV_ELTS]; + let pv: &mut RecursionPublicValues = ret.as_mut_slice().borrow_mut(); + *pv = *self; + ret + } } } From e830deccf67aa5bb721eaf36de03eb6f66633643 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 21:30:27 -0700 Subject: [PATCH 142/268] leaf challenger --- .../circuit-v2/src/machine/compress.rs | 6 +++- .../recursion/core/src/air/public_values.rs | 34 +++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 669439d56b..dadceb7161 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -220,7 +220,6 @@ where // Initialize the leaf challenger public values. leaf_challenger_values = current_public_values.leaf_challenger; - // Initialize the reconstruct challenger public values. // Initialize the initial reconstruct challenger public values. initial_reconstruct_challenger_values = @@ -271,6 +270,11 @@ where // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); // Assert that the leaf challenger is always the same. + for (current, expected) in + leaf_challenger_values.into_iter().zip(current_public_values.leaf_challenger) + { + builder.assert_felt_eq(current, expected); + } // // Assert that the MemoryInitialize address bits are the same. // for (bit, current_bit) in diff --git a/crates/recursion/core/src/air/public_values.rs b/crates/recursion/core/src/air/public_values.rs index ac380016c3..95c14d51a8 100644 --- a/crates/recursion/core/src/air/public_values.rs +++ b/crates/recursion/core/src/air/public_values.rs @@ -16,7 +16,7 @@ use std::{ pub const PV_DIGEST_NUM_WORDS: usize = 8; -pub const CHALLENGER_STATE_NUM_ELTS: usize = 50; +pub const CHALLENGER_STATE_NUM_ELTS: usize = size_of::>(); pub const RECURSIVE_PROOF_NUM_PV_ELTS: usize = size_of::>(); @@ -46,7 +46,7 @@ pub struct ChallengerPublicValues { pub output_buffer: [T; PERMUTATION_WIDTH], } -impl ChallengerPublicValues { +impl ChallengerPublicValues { pub fn set_challenger>( &self, challenger: &mut DuplexChallenger, @@ -59,6 +59,18 @@ impl ChallengerPublicValues { let num_outputs = self.num_outputs.as_canonical_u32() as usize; challenger.output_buffer = self.output_buffer[..num_outputs].to_vec(); } + + pub fn as_array(&self) -> [T; CHALLENGER_STATE_NUM_ELTS] + where + T: Copy, + { + unsafe { + let mut ret = [MaybeUninit::::zeroed().assume_init(); CHALLENGER_STATE_NUM_ELTS]; + let pv: &mut ChallengerPublicValues = ret.as_mut_slice().borrow_mut(); + *pv = *self; + ret + } + } } /// The PublicValues struct is used to store all of a reduce proof's public values. @@ -147,3 +159,21 @@ impl RecursionPublicValues { } } } + +impl IntoIterator for RecursionPublicValues { + type Item = T; + type IntoIter = std::array::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.as_array().into_iter() + } +} + +impl IntoIterator for ChallengerPublicValues { + type Item = T; + type IntoIter = std::array::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.as_array().into_iter() + } +} From 10aa6bb0400259fcc6a2e69efb0da4dd8aed57dd Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 21:51:46 -0700 Subject: [PATCH 143/268] execution shard --- .../circuit-v2/src/machine/compress.rs | 2 +- .../recursion/circuit-v2/src/machine/core.rs | 24 +++++++------------ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index dadceb7161..4aa8bd7f89 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -267,7 +267,7 @@ where builder.assert_felt_eq(shard, current_public_values.start_shard); // Verfiy that the exeuction shard is equal to the current execution shard. - // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); // Assert that the leaf challenger is always the same. for (current, expected) in diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 20a0c15918..afe02e2500 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -124,7 +124,7 @@ where // Initialize execution shard variables. let mut initial_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; - let mut current_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + let mut previous_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; // Initialize program counter variables. let mut start_pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; @@ -168,7 +168,6 @@ where // Verify proofs. for (i, shard_proof) in shard_proofs.into_iter().enumerate() { - let contains_cpu = shard_proof.contains_cpu(); let _contains_memory_init = shard_proof.contains_memory_init(); let _contains_memory_finalize = shard_proof.contains_memory_finalize(); @@ -186,7 +185,6 @@ where // Execution shard. initial_execution_shard = public_values.execution_shard; - current_execution_shard = public_values.execution_shard; // Program counter. start_pc = public_values.start_pc; @@ -291,13 +289,18 @@ where { // If the shard has a "CPU" chip, then the execution shard should be incremented by // 1. - if contains_cpu { + if shard_proof.contains_cpu() && i != 0 { // Assert that the shard of the proof is equal to the current shard. // builder.assert_felt_eq(current_execution_shard, // public_values.execution_shard); - current_execution_shard = builder.eval(current_execution_shard + C::F::one()); + builder.assert_felt_eq( + public_values.execution_shard, + previous_execution_shard + C::F::one(), + ); } + + previous_execution_shard = public_values.execution_shard; } // Program counter constraints. @@ -533,7 +536,7 @@ where recursion_public_values.start_shard = initial_shard; recursion_public_values.next_shard = current_shard; recursion_public_values.start_execution_shard = initial_execution_shard; - recursion_public_values.next_execution_shard = current_execution_shard; + recursion_public_values.next_execution_shard = previous_execution_shard; recursion_public_values.previous_init_addr_bits = initial_previous_init_addr_bits; recursion_public_values.last_init_addr_bits = current_init_addr_bits; recursion_public_values.previous_finalize_addr_bits = @@ -552,15 +555,6 @@ where // TODO: set the digest according to the previous values. recursion_public_values.digest = array::from_fn(|_| builder.eval(C::F::zero())); - // // If the proof represents a complete proof, make completeness assertions. - // // - // // *Remark*: In this program, this only happends if there is one shard and the - // program has // no deferred proofs to verify. However, the completeness - // check is independent of these // facts. - // builder.if_eq(is_complete, C::N::one()).then(|builder| { - // assert_complete(builder, recursion_public_values, &reconstruct_challenger) - // }); - SC::commit_recursion_public_values(builder, *recursion_public_values); } } From 28d10a2165c3f173a7332a52a67117229f8f4a82 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 21:57:52 -0700 Subject: [PATCH 144/268] print --- crates/recursion/circuit-v2/src/machine/core.rs | 2 ++ crates/recursion/circuit-v2/src/machine/deferred.rs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index afe02e2500..be998851ae 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -301,6 +301,8 @@ where } previous_execution_shard = public_values.execution_shard; + builder.print_f(previous_execution_shard); + builder.print_f(public_values.execution_shard); } // Program counter constraints. diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 0246480cc2..5a4d6e51e6 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -142,7 +142,7 @@ where let current_public_values: &RecursionPublicValues> = shard_proof.public_values.as_slice().borrow(); - // // Assert that the proof is complete. + // Assert that the proof is complete. // builder.assert_felt_eq(current_public_values.is_complete, C::F::one()); // Update deferred proof digest From f75d6beae31b4e3ed04006c2097c97042dab1708 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 22:04:45 -0700 Subject: [PATCH 145/268] execution shard --- .../circuit-v2/src/machine/compress.rs | 2 +- .../recursion/circuit-v2/src/machine/core.rs | 22 +++++-------------- 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 4aa8bd7f89..dadceb7161 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -267,7 +267,7 @@ where builder.assert_felt_eq(shard, current_public_values.start_shard); // Verfiy that the exeuction shard is equal to the current execution shard. - builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); // Assert that the leaf challenger is always the same. for (current, expected) in diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index be998851ae..b847ffcf25 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -124,7 +124,7 @@ where // Initialize execution shard variables. let mut initial_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; - let mut previous_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; + let mut current_execution_shard: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; // Initialize program counter variables. let mut start_pc: Felt<_> = unsafe { MaybeUninit::zeroed().assume_init() }; @@ -285,24 +285,14 @@ where } // Execution shard constraints. - // let execution_shard = felt2var(builder, public_values.execution_shard); { // If the shard has a "CPU" chip, then the execution shard should be incremented by // 1. - if shard_proof.contains_cpu() && i != 0 { - // Assert that the shard of the proof is equal to the current shard. - // builder.assert_felt_eq(current_execution_shard, - // public_values.execution_shard); - - builder.assert_felt_eq( - public_values.execution_shard, - previous_execution_shard + C::F::one(), - ); - } + if shard_proof.contains_cpu() { + builder.assert_felt_eq(current_execution_shard, public_values.execution_shard); - previous_execution_shard = public_values.execution_shard; - builder.print_f(previous_execution_shard); - builder.print_f(public_values.execution_shard); + current_execution_shard = builder.eval(current_execution_shard + C::F::one()); + } } // Program counter constraints. @@ -538,7 +528,7 @@ where recursion_public_values.start_shard = initial_shard; recursion_public_values.next_shard = current_shard; recursion_public_values.start_execution_shard = initial_execution_shard; - recursion_public_values.next_execution_shard = previous_execution_shard; + recursion_public_values.next_execution_shard = current_execution_shard; recursion_public_values.previous_init_addr_bits = initial_previous_init_addr_bits; recursion_public_values.last_init_addr_bits = current_init_addr_bits; recursion_public_values.previous_finalize_addr_bits = From 76ae162c03994d9e921a5e08f6b210484f7d9398 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 22:12:01 -0700 Subject: [PATCH 146/268] execution shard --- crates/recursion/circuit-v2/src/machine/core.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index b847ffcf25..3c2d122adb 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -185,6 +185,7 @@ where // Execution shard. initial_execution_shard = public_values.execution_shard; + current_execution_shard = public_values.execution_shard; // Program counter. start_pc = public_values.start_pc; From cbed5659d785e0b6db6269ae943905bdf41cde51 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 22:12:49 -0700 Subject: [PATCH 147/268] execution shard test --- crates/prover/src/verify.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index d095b90fb1..a9750608a3 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -117,6 +117,9 @@ impl SP1Prover { )); } } + if public_values.execution_shard != current_execution_shard { + return Err(MachineVerificationError::InvalidPublicValues("execution shard test for values : {current_execution_shard} != {public_values.execution_shard}")); + } } // Program counter constraints. From fbf6c1bb05e81a41730f8766898f4c8e80c9838b Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 22:29:28 -0700 Subject: [PATCH 148/268] clean --- crates/prover/src/verify.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/crates/prover/src/verify.rs b/crates/prover/src/verify.rs index a9750608a3..d095b90fb1 100644 --- a/crates/prover/src/verify.rs +++ b/crates/prover/src/verify.rs @@ -117,9 +117,6 @@ impl SP1Prover { )); } } - if public_values.execution_shard != current_execution_shard { - return Err(MachineVerificationError::InvalidPublicValues("execution shard test for values : {current_execution_shard} != {public_values.execution_shard}")); - } } // Program counter constraints. From d985749a2ae1715ecb2415bf79951102cb023d34 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 22:36:53 -0700 Subject: [PATCH 149/268] clippy --- crates/recursion/circuit-v2/src/machine/compress.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index dadceb7161..bb84d3cd12 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -194,7 +194,8 @@ where // Initialize start execution shard. compress_public_values.start_execution_shard = current_public_values.start_execution_shard; - execution_shard = current_public_values.start_execution_shard; + // TODO: comment back in. + // execution_shard = current_public_values.start_execution_shard; // Initialize the MemoryInitialize address bits. for (bit, (first_bit, current_bit)) in init_addr_bits.iter_mut().zip( From 03352af8c490bfd46e5d94b92c5b92dded2a9543 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 23:01:27 -0700 Subject: [PATCH 150/268] init --- .../circuit-v2/src/machine/complete.rs | 10 ++++ .../circuit-v2/src/machine/compress.rs | 47 ++++++++++--------- .../recursion/circuit-v2/src/machine/core.rs | 2 +- .../recursion/circuit-v2/src/machine/mod.rs | 7 +-- 4 files changed, 37 insertions(+), 29 deletions(-) create mode 100644 crates/recursion/circuit-v2/src/machine/complete.rs diff --git a/crates/recursion/circuit-v2/src/machine/complete.rs b/crates/recursion/circuit-v2/src/machine/complete.rs new file mode 100644 index 0000000000..007aaff8e9 --- /dev/null +++ b/crates/recursion/circuit-v2/src/machine/complete.rs @@ -0,0 +1,10 @@ +use sp1_recursion_compiler::ir::Builder; + +use crate::{BabyBearFriConfigVariable, CircuitConfig}; + +fn assert_complete(builder: &mut Builder) +where + SC: BabyBearFriConfigVariable, + C: CircuitConfig, +{ +} diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index bb84d3cd12..3213a5ee6a 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -225,6 +225,7 @@ where // Initialize the initial reconstruct challenger public values. initial_reconstruct_challenger_values = current_public_values.start_reconstruct_challenger; + reconstruct_challenger_values = current_public_values.start_reconstruct_challenger; // Assign the commited values and deferred proof digests. for (word, current_word) in committed_value_digest @@ -268,8 +269,24 @@ where builder.assert_felt_eq(shard, current_public_values.start_shard); // Verfiy that the exeuction shard is equal to the current execution shard. + // TODO: comment back in. // builder.assert_felt_eq(execution_shard, current_public_values.start_execution_shard); + // Assert that the MemoryInitialize address bits are the same. + for (bit, current_bit) in + init_addr_bits.iter().zip(current_public_values.previous_init_addr_bits.iter()) + { + builder.assert_felt_eq(*bit, *current_bit); + } + + // Assert that the MemoryFinalize address bits are the same. + for (bit, current_bit) in finalize_addr_bits + .iter() + .zip(current_public_values.previous_finalize_addr_bits.iter()) + { + builder.assert_felt_eq(*bit, *current_bit); + } + // Assert that the leaf challenger is always the same. for (current, expected) in leaf_challenger_values.into_iter().zip(current_public_values.leaf_challenger) @@ -277,29 +294,13 @@ where builder.assert_felt_eq(current, expected); } - // // Assert that the MemoryInitialize address bits are the same. - // for (bit, current_bit) in - // init_addr_bits.iter().zip(current_public_values.previous_init_addr_bits.iter()) - // { - // builder.assert_felt_eq(*bit, *current_bit); - // } - - // // Assert that the MemoryFinalize address bits are the same. - // for (bit, current_bit) in finalize_addr_bits - // .iter() - // .zip(current_public_values.previous_finalize_addr_bits.iter()) - // { - // builder.assert_felt_eq(*bit, *current_bit); - // } - - // Assert that the leaf challenger is always the same. - - // // Assert that the current challenger matches the start reconstruct challenger. - // assert_challenger_eq_pv( - // builder, - // &reconstruct_challenger, - // current_public_values.start_reconstruct_challenger, - // ); + // Assert that the current challenger matches the start reconstruct challenger. + for (current, expected) in reconstruct_challenger_values + .into_iter() + .zip(current_public_values.start_reconstruct_challenger) + { + builder.assert_felt_eq(current, expected); + } // Digest constraints. { diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 3c2d122adb..4557bb45d9 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -487,7 +487,7 @@ where // Update the reconstruct challenger. reconstruct_challenger.observe(builder, shard_proof.commitment.main_commit); - for element in shard_proof.public_values.iter() { + for element in shard_proof.public_values.iter().take(machine.num_pv_elts()) { reconstruct_challenger.observe(builder, *element); } diff --git a/crates/recursion/circuit-v2/src/machine/mod.rs b/crates/recursion/circuit-v2/src/machine/mod.rs index 3acdb19d79..7befd04dbc 100644 --- a/crates/recursion/circuit-v2/src/machine/mod.rs +++ b/crates/recursion/circuit-v2/src/machine/mod.rs @@ -1,10 +1,11 @@ +mod complete; mod compress; mod core; mod deferred; mod vkey_proof; mod witness; -#[allow(unused_imports)] +pub use complete::*; pub use compress::*; pub use core::*; pub use deferred::*; @@ -12,7 +13,3 @@ pub use vkey_proof::*; #[allow(unused_imports)] pub use witness::*; - -pub use sp1_recursion_program::machine::{ - SP1CompressMemoryLayout, SP1DeferredMemoryLayout, SP1RecursionMemoryLayout, -}; From e3db11e535be05492aff8c68a96664477e14140a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 23:17:38 -0700 Subject: [PATCH 151/268] committed value digest --- .../circuit-v2/src/machine/compress.rs | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 3213a5ee6a..dbdd7397b2 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -304,8 +304,32 @@ where // Digest constraints. { - // // If `commited_value_digest` is not zero, then - // `public_values.commited_value_digest // should be the current + // If `commited_value_digest` is not zero, then `public_values.commited_value_digest + // should be the current. + + // Set a flag to indicate whether `commited_value_digest` is non-zero. The flag is + // initialized to 1, and then get multiplied by each element of the array. If all + // elements are zero, then the flag will be zero. + let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + for word in committed_value_digest { + for byte in word { + is_non_zero = builder.eval(is_non_zero * byte); + } + } + + // Using the flag `is_non_zero`, we can constrain the equality. + for (word_current, word_public) in committed_value_digest + .into_iter() + .zip(current_public_values.committed_value_digest) + { + for (byte_current, byte_public) in word_current.into_iter().zip(word_public) { + builder.assert_felt_eq( + is_non_zero * (byte_current - byte_public), + C::F::zero(), + ); + } + } + // value. let is_zero: Var<_> = builder.eval(C::N::one()); // #[allow(clippy::needless_range_loop)] // for i in 0..committed_value_digest.len() { From 3c3a9228c7eb9f0761db79704c197d75998abc0b Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 23:23:19 -0700 Subject: [PATCH 152/268] deferred digest --- .../circuit-v2/src/machine/compress.rs | 61 ++++++------------- 1 file changed, 18 insertions(+), 43 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index dbdd7397b2..ad27db5f4b 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -330,28 +330,6 @@ where } } - // value. let is_zero: Var<_> = builder.eval(C::N::one()); - // #[allow(clippy::needless_range_loop)] - // for i in 0..committed_value_digest.len() { - // for j in 0..WORD_SIZE { - // let d = felt2var(builder, committed_value_digest[i][j]); - // builder.if_ne(d, C::N::zero()).then(|builder| { - // builder.assign(is_zero, C::N::zero()); - // }); - // } - // } - // builder.if_eq(is_zero, C::N::zero()).then(|builder| { - // #[allow(clippy::needless_range_loop)] - // for i in 0..committed_value_digest.len() { - // for j in 0..WORD_SIZE { - // builder.assert_felt_eq( - // committed_value_digest[i][j], - // current_public_values.committed_value_digest[i][j], - // ); - // } - // } - // }); - // Update the committed value digest. for (word, current_word) in committed_value_digest .iter_mut() @@ -362,25 +340,21 @@ where } } - // // If `deferred_proofs_digest` is not zero, then - // `public_values.deferred_proofs_digest // should be the current - // value. let is_zero: Var<_> = builder.eval(C::N::one()); - // #[allow(clippy::needless_range_loop)] - // for i in 0..deferred_proofs_digest.len() { - // let d = felt2var(builder, deferred_proofs_digest[i]); - // builder.if_ne(d, C::N::zero()).then(|builder| { - // builder.assign(is_zero, C::N::zero()); - // }); - // } - // builder.if_eq(is_zero, C::N::zero()).then(|builder| { - // #[allow(clippy::needless_range_loop)] - // for i in 0..deferred_proofs_digest.len() { - // builder.assert_felt_eq( - // deferred_proofs_digest[i], - // current_public_values.deferred_proofs_digest[i], - // ); - // } - // }); + // // If `deferred_proofs_digest` is not zero, then the current value should be + // `public_values.deferred_proofs_digest`. We will use a similar approach as above. + let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + for element in deferred_proofs_digest { + is_non_zero = builder.eval(is_non_zero * element); + } + for (digest_current, digest_public) in deferred_proofs_digest + .into_iter() + .zip(current_public_values.deferred_proofs_digest) + { + builder.assert_felt_eq( + is_non_zero * (digest_current - digest_public), + C::F::zero(), + ); + } // Update the deferred proofs digest. for (digest, current_digest) in deferred_proofs_digest @@ -391,7 +365,9 @@ where } } - // Update the deferred proof digest. + // Update the accumulated values. + + // Update the reconstruct deferred proof digest. for (digest, current_digest) in reconstruct_deferred_digest .iter_mut() .zip_eq(current_public_values.end_reconstruct_deferred_digest.iter()) @@ -399,7 +375,6 @@ where *digest = *current_digest; } - // Update the accumulated values. // Update pc to be the next pc. pc = current_public_values.next_pc; From 5063d0b6bef48a1d59b1b2b6bc4d89c1026649ac Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 23:41:31 -0700 Subject: [PATCH 153/268] core constraints --- .../recursion/circuit-v2/src/machine/core.rs | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 4557bb45d9..3df574c0b3 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -168,8 +168,9 @@ where // Verify proofs. for (i, shard_proof) in shard_proofs.into_iter().enumerate() { - let _contains_memory_init = shard_proof.contains_memory_init(); - let _contains_memory_finalize = shard_proof.contains_memory_finalize(); + let contains_cpu = shard_proof.contains_cpu(); + let contains_memory_init = shard_proof.contains_memory_init(); + let contains_memory_finalize = shard_proof.contains_memory_finalize(); // Get the public values. let public_values: &PublicValues>, Felt<_>> = @@ -189,6 +190,7 @@ where // Program counter. start_pc = public_values.start_pc; + current_pc = public_values.start_pc; // Memory initialization & finalization. for ((bit, pub_bit), first_bit) in current_init_addr_bits @@ -247,12 +249,11 @@ where let mut challenger = leaf_challenger.copy(builder); StarkVerifier::verify_shard(builder, &vk, machine, &mut challenger, &shard_proof); - // // First shard has a "CPU" constraint. - // { - // builder.if_eq(shard, C::N::one()).then(|builder| { - // builder.assert_var_eq(contains_cpu, C::N::one()); - // }); - // } + // Assert that first shard has a "CPU". Equivalently, assert that if the shard does + // not have a "CPU", then the current shard is not 1. + if !contains_cpu { + builder.assert_felt_ne(current_shard, C::F::one()); + } // // CPU log degree bound check constraints. // { @@ -289,7 +290,7 @@ where { // If the shard has a "CPU" chip, then the execution shard should be incremented by // 1. - if shard_proof.contains_cpu() { + if contains_cpu { builder.assert_felt_eq(current_execution_shard, public_values.execution_shard); current_execution_shard = builder.eval(current_execution_shard + C::F::one()); @@ -304,18 +305,17 @@ where // builder.assert_felt_eq(public_values.start_pc, vk.pc_start); // }); - // // Assert that the start_pc of the proof is equal to the current pc. - // builder.assert_felt_eq(current_pc, public_values.start_pc); + // Assert that the start_pc of the proof is equal to the current pc. + builder.assert_felt_eq(current_pc, public_values.start_pc); - // // If it's not a shard with "CPU", then assert that the start_pc equals the - // next_pc. builder.if_ne(contains_cpu, C::N::one()).then(|builder| - // { builder.assert_felt_eq(public_values.start_pc, - // public_values.next_pc); }); - - // // If it's a shard with "CPU", then assert that the start_pc is not zero. - // builder.if_eq(contains_cpu, C::N::one()).then(|builder| { - // builder.assert_felt_ne(public_values.start_pc, C::F::zero()); - // }); + // If it's not a shard with "CPU", then assert that the start_pc equals the + // next_pc. + if !contains_cpu { + builder.assert_felt_eq(public_values.start_pc, public_values.next_pc); + } else { + // If it's a shard with "CPU", then assert that the start_pc is not zero. + builder.assert_felt_ne(public_values.start_pc, C::F::zero()); + } // Update current_pc to be the end_pc of the current proof. current_pc = public_values.next_pc; From e933a79b72963d9af1859b3dda89de3b8eb04865 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Thu, 29 Aug 2024 23:55:50 -0700 Subject: [PATCH 154/268] core recursion constraints --- .../recursion/circuit-v2/src/machine/core.rs | 187 +++++++++--------- 1 file changed, 93 insertions(+), 94 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 3df574c0b3..7ce1bb8eb5 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -11,7 +11,6 @@ use p3_commit::Mmcs; use p3_field::AbstractField; use p3_matrix::dense::RowMajorMatrix; use sp1_core_machine::riscv::RiscvAir; -use sp1_primitives::consts::WORD_SIZE; use sp1_recursion_core_v2::air::PV_DIGEST_NUM_WORDS; use sp1_stark::{ air::{PublicValues, POSEIDON_NUM_WORDS}, @@ -358,31 +357,28 @@ where builder.assert_felt_eq(*bit, *current_bit); } - // // Assert that if MemoryInit is not present, then the address bits are the same. - // builder - // .if_ne(contains_memory_init, C::N::one()) - // .then(|builder| { - // for (prev_bit, last_bit) in public_values - // .previous_init_addr_bits - // .iter() - // .zip_eq(public_values.last_init_addr_bits.iter()) - // { - // builder.assert_felt_eq(*prev_bit, *last_bit); - // } - // }); - - // // Assert that if MemoryFinalize is not present, then the address bits are the - // same. builder - // .if_ne(contains_memory_finalize, C::N::one()) - // .then(|builder| { - // for (prev_bit, last_bit) in public_values - // .previous_finalize_addr_bits - // .iter() - // .zip_eq(public_values.last_finalize_addr_bits.iter()) - // { - // builder.assert_felt_eq(*prev_bit, *last_bit); - // } - // }); + // Assert that if MemoryInit is not present, then the address bits are the same. + if !contains_memory_init { + for (prev_bit, last_bit) in public_values + .previous_init_addr_bits + .iter() + .zip_eq(public_values.last_init_addr_bits.iter()) + { + builder.assert_felt_eq(*prev_bit, *last_bit); + } + } + + // Assert that if MemoryFinalize is not present, then the address bits are the + // same. + if !contains_memory_finalize { + for (prev_bit, last_bit) in public_values + .previous_finalize_addr_bits + .iter() + .zip_eq(public_values.last_finalize_addr_bits.iter()) + { + builder.assert_felt_eq(*prev_bit, *last_bit); + } + } // Update the MemoryInitialize address bits. for (bit, pub_bit) in @@ -402,81 +398,84 @@ where // Digest constraints. { - // // If `commited_value_digest` is not zero, then - // `public_values.commited_value_digest // should be the current - // value. let is_zero: Var<_> = builder.eval(C::N::one()); - // #[allow(clippy::needless_range_loop)] - // for i in 0..committed_value_digest.len() { - // for j in 0..WORD_SIZE { - // let d = felt2var(builder, committed_value_digest[i][j]); - // builder.if_ne(d, C::N::zero()).then(|builder| { - // builder.assign(is_zero, C::N::zero()); - // }); - // } - // } - // builder.if_eq(is_zero, C::N::zero()).then(|builder| { - // #[allow(clippy::needless_range_loop)] - // for i in 0..committed_value_digest.len() { - // for j in 0..WORD_SIZE { - // builder.assert_felt_eq( - // committed_value_digest[i][j], - // public_values.committed_value_digest[i][j], - // ); - // } - // } - // }); + // // If `commited_value_digest` is not zero, then the current value should be equal + // to `public_values.commited_value_digest`. + + // Set a flag to indicate whether `commited_value_digest` is non-zero. The flag is + // initialized to 1, and then get multiplied by each element of the array. If all + // elements are zero, then the flag will be zero. + let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + for word in committed_value_digest { + for byte in word { + is_non_zero = builder.eval(is_non_zero * byte); + } + } - // // If it's not a shard with "CPU", then the committed value digest should not - // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { - // #[allow(clippy::needless_range_loop)] - // for i in 0..committed_value_digest.len() { - // for j in 0..WORD_SIZE { - // builder.assert_felt_eq( - // committed_value_digest[i][j], - // public_values.committed_value_digest[i][j], - // ); - // } - // } - // }); + // Using the flag `is_non_zero`, we can constrain the equality. + for (word_current, word_public) in + committed_value_digest.into_iter().zip(public_values.committed_value_digest) + { + for (byte_current, byte_public) in word_current.into_iter().zip(word_public) { + builder.assert_felt_eq( + is_non_zero * (byte_current - byte_public), + C::F::zero(), + ); + } + } + + // If it's not a shard with "CPU", then the committed value digest shouldn't change. + if !contains_cpu { + for (word_d, pub_word_d) in committed_value_digest + .iter() + .zip(public_values.committed_value_digest.iter()) + { + for (d, pub_d) in word_d.0.iter().zip(pub_word_d.0.iter()) { + builder.assert_felt_eq(*d, *pub_d); + } + } + } // Update the committed value digest. - #[allow(clippy::needless_range_loop)] - for i in 0..committed_value_digest.len() { - for j in 0..WORD_SIZE { - committed_value_digest[i][j] = public_values.committed_value_digest[i][j]; + for (word_d, pub_word_d) in committed_value_digest + .iter_mut() + .zip(public_values.committed_value_digest.iter()) + { + for (d, pub_d) in word_d.0.iter_mut().zip(pub_word_d.0.iter()) { + *d = *pub_d; } } - // // If `deferred_proofs_digest` is not zero, then - // `public_values.deferred_proofs_digest // should be the current - // value. let is_zero: Var<_> = builder.eval(C::N::one()); - // #[allow(clippy::needless_range_loop)] - // for i in 0..deferred_proofs_digest.len() { - // let d = felt2var(builder, deferred_proofs_digest[i]); - // builder.if_ne(d, C::N::zero()).then(|builder| { - // builder.assign(is_zero, C::N::zero()); - // }); - // } - // builder.if_eq(is_zero, C::N::zero()).then(|builder| { - // #[allow(clippy::needless_range_loop)] - // for i in 0..deferred_proofs_digest.len() { - // builder.assert_felt_eq( - // deferred_proofs_digest[i], - // public_values.deferred_proofs_digest[i], - // ); - // } - // }); + // If `deferred_proofs_digest` is not zero, then the current value should be equal + // to `public_values.deferred_proofs_digest. - // // If it's not a shard with "CPU", then the deferred proofs digest should not - // change. builder.if_ne(contains_cpu, C::N::one()).then(|builder| { - // #[allow(clippy::needless_range_loop)] - // for i in 0..deferred_proofs_digest.len() { - // builder.assert_felt_eq( - // deferred_proofs_digest[i], - // public_values.deferred_proofs_digest[i], - // ); - // } - // }); + // Set a flag to indicate whether `deferred_proofs_digest` is non-zero. The flag is + // initialized to 1, and then get multiplied by each element of the array. If all + // elements are zero, then the flag will be zero. + let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + for element in deferred_proofs_digest { + is_non_zero = builder.eval(is_non_zero * element); + } + + // Using the flag `is_non_zero`, we can constrain the equality. + for (deferred_current, deferred_public) in + deferred_proofs_digest.iter().zip(public_values.deferred_proofs_digest.iter()) + { + builder.assert_felt_eq( + is_non_zero * (*deferred_current - *deferred_public), + C::F::zero(), + ); + } + + // If it's not a shard with "CPU", then the deferred proofs digest should not + // change. + if !contains_cpu { + for (d, pub_d) in deferred_proofs_digest + .iter() + .zip(public_values.deferred_proofs_digest.iter()) + { + builder.assert_felt_eq(*d, *pub_d); + } + } // Update the deferred proofs digest. deferred_proofs_digest.copy_from_slice(&public_values.deferred_proofs_digest); From 53fc258bd5017ea1b2466cf7aa284ce2ed1df22f Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 00:11:04 -0700 Subject: [PATCH 155/268] completeness assertions --- crates/prover/src/lib.rs | 5 ++ .../circuit-v2/src/machine/complete.rs | 76 +++++++++++++++++-- .../circuit-v2/src/machine/compress.rs | 15 +--- .../circuit-v2/src/machine/deferred.rs | 2 +- .../recursion/circuit-v2/src/machine/mod.rs | 2 +- 5 files changed, 79 insertions(+), 21 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 53f033b1db..1e7f1c9f84 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -336,8 +336,13 @@ impl SP1Prover { // Get the operations. let builder_span = tracing::debug_span!("build compress program").entered(); let mut builder = Builder::::default(); + let input = input.read(&mut builder); + // Assert that the proof is complete. + builder.assert_felt_eq(input.is_complete, BabyBear::one()); + // Verify the proof, as a compress proof. SP1CompressVerifier::verify(&mut builder, self.shrink_prover.machine(), input); + let operations = builder.into_operations(); builder_span.exit(); diff --git a/crates/recursion/circuit-v2/src/machine/complete.rs b/crates/recursion/circuit-v2/src/machine/complete.rs index 007aaff8e9..7bd521c539 100644 --- a/crates/recursion/circuit-v2/src/machine/complete.rs +++ b/crates/recursion/circuit-v2/src/machine/complete.rs @@ -1,10 +1,72 @@ -use sp1_recursion_compiler::ir::Builder; +use itertools::Itertools; +use p3_field::AbstractField; -use crate::{BabyBearFriConfigVariable, CircuitConfig}; +use sp1_recursion_compiler::ir::{Builder, Config, Felt}; +use sp1_recursion_core_v2::air::RecursionPublicValues; -fn assert_complete(builder: &mut Builder) -where - SC: BabyBearFriConfigVariable, - C: CircuitConfig, -{ +/// Assertions on recursion public values which represent a complete proof. +/// +/// The assertions consist of checking all the expected boundary conditions from a compress proof +/// that represents the end of the recursion tower. +pub(crate) fn assert_complete( + builder: &mut Builder, + public_values: &RecursionPublicValues>, + is_complete: Felt, +) { + let RecursionPublicValues { + deferred_proofs_digest, + next_pc, + start_shard, + next_shard, + start_execution_shard, + next_execution_shard, + cumulative_sum, + start_reconstruct_deferred_digest, + end_reconstruct_deferred_digest, + leaf_challenger, + end_reconstruct_challenger, + .. + } = public_values; + + // Assert that `next_pc` is equal to zero (so program execution has completed) + builder.assert_felt_eq(is_complete * *next_pc, C::F::zero()); + + // Assert that start shard is equal to 1. + builder.assert_felt_eq(is_complete * (*start_shard - C::F::one()), C::F::zero()); + + // Assert that the next shard is not equal to one. This guarantees that there is at least one + // shard. + builder.assert_felt_ne(is_complete * (*next_shard - C::F::one()), C::F::zero()); + + // Assert that the start execution shard is equal to 1. + builder.assert_felt_eq(is_complete * (*start_execution_shard - C::F::one()), C::F::zero()); + + // Assert that the end reconstruct challenger is equal to the leaf challenger. + for (end_challenger_d, leaf_challenger_d) in + end_reconstruct_challenger.into_iter().zip(*leaf_challenger) + { + builder.assert_felt_eq(is_complete * (end_challenger_d - leaf_challenger_d), C::F::zero()); + } + + // Assert that next shard is not equal to one. This guarantees that there is at least one shard + // contains CPU. + builder.assert_felt_ne(is_complete * (*next_execution_shard - C::F::one()), C::F::zero()); + + // The start reconstruct deffered digest should be zero. + for start_digest_word in start_reconstruct_deferred_digest { + builder.assert_felt_eq(is_complete * *start_digest_word, C::F::zero()); + } + + // The end reconstruct deffered digest should be equal to the deferred proofs digest. + for (end_digest_word, deferred_digest_word) in + end_reconstruct_deferred_digest.iter().zip_eq(deferred_proofs_digest.iter()) + { + builder + .assert_felt_eq(is_complete * (*end_digest_word - *deferred_digest_word), C::F::zero()); + } + + // Assert that the cumulative sum is zero. + for b in cumulative_sum.iter() { + builder.assert_felt_eq(is_complete * *b, C::F::zero()); + } } diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index ad27db5f4b..533af6f7dc 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -29,6 +29,7 @@ use sp1_stark::{ use crate::{ challenger::CanObserveVariable, constraints::RecursiveVerifierConstraintFolder, + machine::assert_complete, stark::{ShardProofVariable, StarkVerifier}, utils::uninit_challenger_pv, BabyBearFriConfig, BabyBearFriConfigVariable, CircuitConfig, VerifyingKeyVariable, @@ -446,18 +447,8 @@ where // Set the exit code. compress_public_values.exit_code = exit_code; - // // If the proof is complete, make completeness assertions and set the flag. Otherwise, - // check // the flag is zero and set the public value to zero. - // builder.if_eq(is_complete, C::N::one()).then_or_else( - // |builder| { - // builder.assign(compress_public_values.is_complete, C::F::one()); - // assert_complete(builder, compress_public_values, &reconstruct_challenger) - // }, - // |builder| { - // builder.assert_var_eq(is_complete, C::N::zero()); - // builder.assign(compress_public_values.is_complete, C::F::zero()); - // }, - // ); + // If the proof is complete, make completeness assertions. + assert_complete(builder, compress_public_values, is_complete); SC::commit_recursion_public_values(builder, *compress_public_values); } diff --git a/crates/recursion/circuit-v2/src/machine/deferred.rs b/crates/recursion/circuit-v2/src/machine/deferred.rs index 5a4d6e51e6..8e9ff784d4 100644 --- a/crates/recursion/circuit-v2/src/machine/deferred.rs +++ b/crates/recursion/circuit-v2/src/machine/deferred.rs @@ -143,7 +143,7 @@ where shard_proof.public_values.as_slice().borrow(); // Assert that the proof is complete. - // builder.assert_felt_eq(current_public_values.is_complete, C::F::one()); + builder.assert_felt_eq(current_public_values.is_complete, C::F::one()); // Update deferred proof digest // poseidon2( current_digest[..8] || pv.sp1_vk_digest[..8] || diff --git a/crates/recursion/circuit-v2/src/machine/mod.rs b/crates/recursion/circuit-v2/src/machine/mod.rs index 7befd04dbc..c86f00c9c5 100644 --- a/crates/recursion/circuit-v2/src/machine/mod.rs +++ b/crates/recursion/circuit-v2/src/machine/mod.rs @@ -5,7 +5,7 @@ mod deferred; mod vkey_proof; mod witness; -pub use complete::*; +pub(crate) use complete::*; pub use compress::*; pub use core::*; pub use deferred::*; From 4ccfacbaca1b70c42ae92899fa5aa8ac7efccffb Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 00:27:45 -0700 Subject: [PATCH 156/268] fix completeness assertion --- crates/recursion/circuit-v2/src/machine/complete.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/complete.rs b/crates/recursion/circuit-v2/src/machine/complete.rs index 7bd521c539..841ea963a1 100644 --- a/crates/recursion/circuit-v2/src/machine/complete.rs +++ b/crates/recursion/circuit-v2/src/machine/complete.rs @@ -28,6 +28,9 @@ pub(crate) fn assert_complete( .. } = public_values; + // Assert that the `is_complete` flag is boolean. + builder.assert_felt_eq(is_complete * (is_complete - C::F::one()), C::F::zero()); + // Assert that `next_pc` is equal to zero (so program execution has completed) builder.assert_felt_eq(is_complete * *next_pc, C::F::zero()); @@ -36,7 +39,7 @@ pub(crate) fn assert_complete( // Assert that the next shard is not equal to one. This guarantees that there is at least one // shard. - builder.assert_felt_ne(is_complete * (*next_shard - C::F::one()), C::F::zero()); + builder.assert_felt_ne(is_complete * *next_shard, C::F::one()); // Assert that the start execution shard is equal to 1. builder.assert_felt_eq(is_complete * (*start_execution_shard - C::F::one()), C::F::zero()); @@ -48,9 +51,9 @@ pub(crate) fn assert_complete( builder.assert_felt_eq(is_complete * (end_challenger_d - leaf_challenger_d), C::F::zero()); } - // Assert that next shard is not equal to one. This guarantees that there is at least one shard - // contains CPU. - builder.assert_felt_ne(is_complete * (*next_execution_shard - C::F::one()), C::F::zero()); + // Assert that next execution shard is not equal to one. This guarantees that there is at least + // one shard that contains CPU. + builder.assert_felt_ne(is_complete * *next_execution_shard, C::F::one()); // The start reconstruct deffered digest should be zero. for start_digest_word in start_reconstruct_deferred_digest { From 8973d132826a11ee774bc1dbd7d4ee43a3779151 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 00:31:30 -0700 Subject: [PATCH 157/268] comment --- crates/recursion/circuit-v2/src/machine/core.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 7ce1bb8eb5..97d5341c63 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -235,9 +235,7 @@ where // // fresh challenger observing the verifier key and the initial pc. // let shard = felt2var(builder, public_values.shard); // builder.if_eq(shard, C::N::one()).then(|builder| { - // let mut first_initial_challenger = DuplexChallengerVariable::new(builder); - // first_initial_challenger.observe(builder, vk.commitment.clone()); - // first_initial_challenger.observe(builder, vk.pc_start); + // vk.observe_into(builder, challenger); // initial_reconstruct_challenger.assert_eq(builder, &first_initial_challenger); // }); From 511dd2564c38b416539b7cede3a639ca7d6f281c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 01:24:53 -0700 Subject: [PATCH 158/268] fix flags --- .../circuit-v2/src/machine/complete.rs | 9 +-- .../circuit-v2/src/machine/compress.rs | 58 ++++++++++-------- .../recursion/circuit-v2/src/machine/core.rs | 60 ++++++++++--------- 3 files changed, 68 insertions(+), 59 deletions(-) diff --git a/crates/recursion/circuit-v2/src/machine/complete.rs b/crates/recursion/circuit-v2/src/machine/complete.rs index 841ea963a1..d9455264db 100644 --- a/crates/recursion/circuit-v2/src/machine/complete.rs +++ b/crates/recursion/circuit-v2/src/machine/complete.rs @@ -19,7 +19,6 @@ pub(crate) fn assert_complete( start_shard, next_shard, start_execution_shard, - next_execution_shard, cumulative_sum, start_reconstruct_deferred_digest, end_reconstruct_deferred_digest, @@ -38,7 +37,9 @@ pub(crate) fn assert_complete( builder.assert_felt_eq(is_complete * (*start_shard - C::F::one()), C::F::zero()); // Assert that the next shard is not equal to one. This guarantees that there is at least one - // shard. + // shard that contains CPU. + // + // TODO: figure out if this is needed. builder.assert_felt_ne(is_complete * *next_shard, C::F::one()); // Assert that the start execution shard is equal to 1. @@ -51,10 +52,6 @@ pub(crate) fn assert_complete( builder.assert_felt_eq(is_complete * (end_challenger_d - leaf_challenger_d), C::F::zero()); } - // Assert that next execution shard is not equal to one. This guarantees that there is at least - // one shard that contains CPU. - builder.assert_felt_ne(is_complete * *next_execution_shard, C::F::one()); - // The start reconstruct deffered digest should be zero. for start_digest_word in start_reconstruct_deferred_digest { builder.assert_felt_eq(is_complete * *start_digest_word, C::F::zero()); diff --git a/crates/recursion/circuit-v2/src/machine/compress.rs b/crates/recursion/circuit-v2/src/machine/compress.rs index 533af6f7dc..1f9079e040 100644 --- a/crates/recursion/circuit-v2/src/machine/compress.rs +++ b/crates/recursion/circuit-v2/src/machine/compress.rs @@ -308,26 +308,29 @@ where // If `commited_value_digest` is not zero, then `public_values.commited_value_digest // should be the current. - // Set a flag to indicate whether `commited_value_digest` is non-zero. The flag is - // initialized to 1, and then get multiplied by each element of the array. If all - // elements are zero, then the flag will be zero. - let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + // Set a flags to indicate whether `commited_value_digest` is non-zero. The flags + // are given by the elements of the array, and they will be used as filters to + // constrain the equality. + let mut is_non_zero_flags = vec![]; for word in committed_value_digest { for byte in word { - is_non_zero = builder.eval(is_non_zero * byte); + is_non_zero_flags.push(byte); } } - // Using the flag `is_non_zero`, we can constrain the equality. - for (word_current, word_public) in committed_value_digest - .into_iter() - .zip(current_public_values.committed_value_digest) - { - for (byte_current, byte_public) in word_current.into_iter().zip(word_public) { - builder.assert_felt_eq( - is_non_zero * (byte_current - byte_public), - C::F::zero(), - ); + // Using the flags, we can constrain the equality. + for is_non_zero in is_non_zero_flags { + for (word_current, word_public) in committed_value_digest + .into_iter() + .zip(current_public_values.committed_value_digest) + { + for (byte_current, byte_public) in word_current.into_iter().zip(word_public) + { + builder.assert_felt_eq( + is_non_zero * (byte_current - byte_public), + C::F::zero(), + ); + } } } @@ -341,20 +344,23 @@ where } } - // // If `deferred_proofs_digest` is not zero, then the current value should be + // If `deferred_proofs_digest` is not zero, then the current value should be // `public_values.deferred_proofs_digest`. We will use a similar approach as above. - let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + let mut is_non_zero_flags = vec![]; for element in deferred_proofs_digest { - is_non_zero = builder.eval(is_non_zero * element); + is_non_zero_flags.push(element); } - for (digest_current, digest_public) in deferred_proofs_digest - .into_iter() - .zip(current_public_values.deferred_proofs_digest) - { - builder.assert_felt_eq( - is_non_zero * (digest_current - digest_public), - C::F::zero(), - ); + + for is_non_zero in is_non_zero_flags { + for (digest_current, digest_public) in deferred_proofs_digest + .into_iter() + .zip(current_public_values.deferred_proofs_digest) + { + builder.assert_felt_eq( + is_non_zero * (digest_current - digest_public), + C::F::zero(), + ); + } } // Update the deferred proofs digest. diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 97d5341c63..fe275c86db 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -399,25 +399,28 @@ where // // If `commited_value_digest` is not zero, then the current value should be equal // to `public_values.commited_value_digest`. - // Set a flag to indicate whether `commited_value_digest` is non-zero. The flag is - // initialized to 1, and then get multiplied by each element of the array. If all - // elements are zero, then the flag will be zero. - let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + // Set flags to indicate whether `commited_value_digest` is non-zero. The flags are + // given by the elements of the array, and they will be used as filters to constrain + // the equality. + let mut is_non_zero_flags = vec![]; for word in committed_value_digest { for byte in word { - is_non_zero = builder.eval(is_non_zero * byte); + is_non_zero_flags.push(byte); } } - // Using the flag `is_non_zero`, we can constrain the equality. - for (word_current, word_public) in - committed_value_digest.into_iter().zip(public_values.committed_value_digest) - { - for (byte_current, byte_public) in word_current.into_iter().zip(word_public) { - builder.assert_felt_eq( - is_non_zero * (byte_current - byte_public), - C::F::zero(), - ); + // Using the flags, we can constrain the equality. + for is_non_zero in is_non_zero_flags { + for (word_current, word_public) in + committed_value_digest.into_iter().zip(public_values.committed_value_digest) + { + for (byte_current, byte_public) in word_current.into_iter().zip(word_public) + { + builder.assert_felt_eq( + is_non_zero * (byte_current - byte_public), + C::F::zero(), + ); + } } } @@ -446,22 +449,25 @@ where // If `deferred_proofs_digest` is not zero, then the current value should be equal // to `public_values.deferred_proofs_digest. - // Set a flag to indicate whether `deferred_proofs_digest` is non-zero. The flag is - // initialized to 1, and then get multiplied by each element of the array. If all - // elements are zero, then the flag will be zero. - let mut is_non_zero: Felt<_> = builder.eval(C::F::one()); + // Set a flag to indicate whether `deferred_proofs_digest` is non-zero. The flags + // are given by the elements of the array, and they will be used as filters to + // constrain the equality. + let mut is_non_zero_flags = vec![]; for element in deferred_proofs_digest { - is_non_zero = builder.eval(is_non_zero * element); + is_non_zero_flags.push(element); } - // Using the flag `is_non_zero`, we can constrain the equality. - for (deferred_current, deferred_public) in - deferred_proofs_digest.iter().zip(public_values.deferred_proofs_digest.iter()) - { - builder.assert_felt_eq( - is_non_zero * (*deferred_current - *deferred_public), - C::F::zero(), - ); + // Using the flags, we can constrain the equality. + for is_non_zero in is_non_zero_flags { + for (deferred_current, deferred_public) in deferred_proofs_digest + .iter() + .zip(public_values.deferred_proofs_digest.iter()) + { + builder.assert_felt_eq( + is_non_zero * (*deferred_current - *deferred_public), + C::F::zero(), + ); + } } // If it's not a shard with "CPU", then the deferred proofs digest should not From 61a3a3312347d8762c349d86d7a65f3a99e1c997 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 09:20:54 -0700 Subject: [PATCH 159/268] unsupported opcodes and completeness --- crates/prover/src/build.rs | 4 +- crates/prover/src/lib.rs | 33 ++++++-- .../recursion/circuit-v2/src/machine/core.rs | 7 +- .../recursion/circuit-v2/src/machine/mod.rs | 2 + .../recursion/circuit-v2/src/machine/root.rs | 83 +++++++++++++++++++ .../recursion/compiler/src/constraints/mod.rs | 11 +++ .../compiler/src/constraints/opcodes.rs | 1 + .../gnark-ffi/go/sp1/babybear/babybear.go | 6 ++ crates/recursion/gnark-ffi/go/sp1/sp1.go | 2 + 9 files changed, 137 insertions(+), 12 deletions(-) create mode 100644 crates/recursion/circuit-v2/src/machine/root.rs diff --git a/crates/prover/src/build.rs b/crates/prover/src/build.rs index 5bd74cae67..78e509b297 100644 --- a/crates/prover/src/build.rs +++ b/crates/prover/src/build.rs @@ -3,7 +3,7 @@ use std::{borrow::Borrow, path::PathBuf}; use p3_baby_bear::BabyBear; use sp1_core_executor::SP1Context; use sp1_core_machine::io::SP1Stdin; -use sp1_recursion_circuit_v2::machine::{SP1CompressVerifier, SP1CompressWitnessValues}; +use sp1_recursion_circuit_v2::machine::{SP1CompressRootVerifier, SP1CompressWitnessValues}; use sp1_recursion_compiler::{ config::OuterConfig, constraints::{Constraint, ConstraintCompiler}, @@ -175,7 +175,7 @@ fn build_outer_circuit(template_input: &SP1CompressWitnessValues) -> Ve let wrap_span = tracing::debug_span!("build wrap circuit").entered(); let mut builder = Builder::::default(); let input = template_input.read(&mut builder); - SP1CompressVerifier::verify(&mut builder, &wrap_machine, input); + SP1CompressRootVerifier::verify(&mut builder, &wrap_machine, input); let mut backend = ConstraintCompiler::::default(); let operations = backend.emit(builder.into_operations()); diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 1e7f1c9f84..0e32be144f 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -72,10 +72,10 @@ use sp1_recursion_core_v2::{ use sp1_recursion_circuit_v2::{ hash::FieldHasher, machine::{ - SP1CompressShape, SP1CompressVerifier, SP1CompressWithVKeyVerifier, - SP1CompressWithVKeyWitnessValues, SP1CompressWitnessValues, SP1DeferredVerifier, - SP1DeferredWitnessValues, SP1MerkleProofWitnessValues, SP1RecursionShape, - SP1RecursionWitnessValues, SP1RecursiveVerifier, + SP1CompressRootVerifier, SP1CompressRootVerifierWithVKey, SP1CompressShape, + SP1CompressWithVKeyVerifier, SP1CompressWithVKeyWitnessValues, SP1CompressWitnessValues, + SP1DeferredVerifier, SP1DeferredWitnessValues, SP1MerkleProofWitnessValues, + SP1RecursionShape, SP1RecursionWitnessValues, SP1RecursiveVerifier, }, merkle_tree::MerkleTree, witness::Witnessable, @@ -326,7 +326,24 @@ impl SP1Prover { &self, input: &SP1CompressWithVKeyWitnessValues, ) -> Arc> { - self.compress_program(input) + // Get the operations. + let builder_span = tracing::debug_span!("build shrink program").entered(); + let mut builder = Builder::::default(); + let input = input.read(&mut builder); + SP1CompressRootVerifierWithVKey::verify( + &mut builder, + self.compress_prover.machine(), + input, + ); + let operations = builder.into_operations(); + builder_span.exit(); + + // Compile the program. + let compiler_span = tracing::debug_span!("compile shrink program").entered(); + let mut compiler = AsmCompiler::::default(); + let program = Arc::new(compiler.compile(operations)); + compiler_span.exit(); + program } pub fn wrap_program( @@ -338,10 +355,8 @@ impl SP1Prover { let mut builder = Builder::::default(); let input = input.read(&mut builder); - // Assert that the proof is complete. - builder.assert_felt_eq(input.is_complete, BabyBear::one()); - // Verify the proof, as a compress proof. - SP1CompressVerifier::verify(&mut builder, self.shrink_prover.machine(), input); + // Verify the proof. + SP1CompressRootVerifier::verify(&mut builder, self.shrink_prover.machine(), input); let operations = builder.into_operations(); builder_span.exit(); diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index fe275c86db..b3c67edbb3 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -233,6 +233,10 @@ where // // If the shard is the first shard, assert that the initial challenger is equal to a // // fresh challenger observing the verifier key and the initial pc. + + // First, we compute the initial challenger. + // let mut initial_challenger = machine.config().challenger_variable(builder); + // let shard = felt2var(builder, public_values.shard); // builder.if_eq(shard, C::N::one()).then(|builder| { // vk.observe_into(builder, challenger); @@ -297,7 +301,8 @@ where // Program counter constraints. { // // If it's the first shard (which is the first execution shard), then the - // start_pc // should be vk.pc_start. + // start_pc should be vk.pc_start. Equivalently, if `start_pc != vk.pc_start`, then + // the shard is not equal to one. // builder.if_eq(shard, C::N::one()).then(|builder| { // builder.assert_felt_eq(public_values.start_pc, vk.pc_start); // }); diff --git a/crates/recursion/circuit-v2/src/machine/mod.rs b/crates/recursion/circuit-v2/src/machine/mod.rs index c86f00c9c5..9f54aff170 100644 --- a/crates/recursion/circuit-v2/src/machine/mod.rs +++ b/crates/recursion/circuit-v2/src/machine/mod.rs @@ -2,6 +2,7 @@ mod complete; mod compress; mod core; mod deferred; +mod root; mod vkey_proof; mod witness; @@ -9,6 +10,7 @@ pub(crate) use complete::*; pub use compress::*; pub use core::*; pub use deferred::*; +pub use root::*; pub use vkey_proof::*; #[allow(unused_imports)] diff --git a/crates/recursion/circuit-v2/src/machine/root.rs b/crates/recursion/circuit-v2/src/machine/root.rs new file mode 100644 index 0000000000..0d92efda84 --- /dev/null +++ b/crates/recursion/circuit-v2/src/machine/root.rs @@ -0,0 +1,83 @@ +use std::marker::PhantomData; + +use p3_air::Air; +use p3_baby_bear::BabyBear; +use p3_commit::Mmcs; +use p3_field::AbstractField; +use p3_matrix::dense::RowMajorMatrix; + +use sp1_stark::{air::MachineAir, StarkMachine}; + +use sp1_recursion_core_v2::DIGEST_SIZE; + +use sp1_recursion_compiler::ir::{Builder, Felt}; + +use crate::{ + challenger::DuplexChallengerVariable, constraints::RecursiveVerifierConstraintFolder, + BabyBearFriConfigVariable, CircuitConfig, +}; + +use super::{ + SP1CompressVerifier, SP1CompressWithVKeyVerifier, SP1CompressWithVKeyWitnessVariable, + SP1CompressWitnessVariable, +}; + +/// A program to verify a single recursive proof representing a complete proof of program execution. +/// +/// The root verifier is simply a `SP1CompressVerifier` with an assertion that the `is_complete` +/// flag is set to true. +#[derive(Debug, Clone, Copy)] +pub struct SP1CompressRootVerifier { + _phantom: PhantomData<(C, SC, A)>, +} + +/// A program to verify a single recursive proof representing a complete proof of program execution. +/// +/// The root verifier is simply a `SP1CompressVerifier` with an assertion that the `is_complete` +/// flag is set to true. +#[derive(Debug, Clone, Copy)] +pub struct SP1CompressRootVerifierWithVKey { + _phantom: PhantomData<(C, SC, A)>, +} + +impl SP1CompressRootVerifier +where + SC: BabyBearFriConfigVariable, + C: CircuitConfig, + >::ProverData>: Clone, + A: MachineAir + for<'a> Air>, +{ + pub fn verify( + builder: &mut Builder, + machine: &StarkMachine, + input: SP1CompressWitnessVariable, + ) { + // Assert that the program is complete. + builder.assert_felt_eq(input.is_complete, C::F::one()); + // Verify the proof, as a compress proof. + SP1CompressVerifier::verify(builder, machine, input); + } +} + +impl SP1CompressRootVerifierWithVKey +where + SC: BabyBearFriConfigVariable< + C, + FriChallengerVariable = DuplexChallengerVariable, + DigestVariable = [Felt; DIGEST_SIZE], + >, + C: CircuitConfig>, + >::ProverData>: Clone, + A: MachineAir + for<'a> Air>, +{ + pub fn verify( + builder: &mut Builder, + machine: &StarkMachine, + input: SP1CompressWithVKeyWitnessVariable, + ) { + // Assert that the program is complete. + builder.assert_felt_eq(input.compress_var.is_complete, C::F::one()); + // Verify the proof, as a compress proof. + SP1CompressWithVKeyVerifier::verify(builder, machine, input); + } +} diff --git a/crates/recursion/compiler/src/constraints/mod.rs b/crates/recursion/compiler/src/constraints/mod.rs index 03bcd09838..2e4f8afa35 100644 --- a/crates/recursion/compiler/src/constraints/mod.rs +++ b/crates/recursion/compiler/src/constraints/mod.rs @@ -324,6 +324,17 @@ impl ConstraintCompiler { opcode: ConstraintOpcode::AssertEqE, args: vec![vec![a.id()], vec![b.id()]], }), + DslIr::AssertNeF(a, b) => constraints.push(Constraint { + opcode: ConstraintOpcode::AssertNeF, + args: vec![vec![a.id()], vec![b.id()]], + }), + DslIr::AssertNeFI(a, b) => { + let tmp = self.alloc_f(&mut constraints, b); + constraints.push(Constraint { + opcode: ConstraintOpcode::AssertNeF, + args: vec![vec![a.id()], vec![tmp]], + }); + } DslIr::AssertEqEI(a, b) => { let tmp = self.alloc_e(&mut constraints, b); constraints.push(Constraint { diff --git a/crates/recursion/compiler/src/constraints/opcodes.rs b/crates/recursion/compiler/src/constraints/opcodes.rs index edb6b1c2e0..82e8dc647f 100644 --- a/crates/recursion/compiler/src/constraints/opcodes.rs +++ b/crates/recursion/compiler/src/constraints/opcodes.rs @@ -30,6 +30,7 @@ pub enum ConstraintOpcode { AssertEqV, AssertEqF, AssertEqE, + AssertNeF, Permute, Num2BitsV, Num2BitsF, diff --git a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go index 141ac0c237..4d3cfb7561 100644 --- a/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go +++ b/crates/recursion/gnark-ffi/go/sp1/babybear/babybear.go @@ -161,6 +161,12 @@ func (c *Chip) AssertIsEqualF(a, b Variable) { c.api.AssertIsEqual(a2.Value, b2.Value) } +func (c *Chip) AssertNotEqualF(a, b Variable) { + a2 := c.ReduceSlow(a) + b2 := c.ReduceSlow(b) + c.api.AssertIsDifferent(a2.Value, b2.Value) +} + func (c *Chip) AssertIsEqualE(a, b ExtensionVariable) { c.AssertIsEqualF(a.Value[0], b.Value[0]) c.AssertIsEqualF(a.Value[1], b.Value[1]) diff --git a/crates/recursion/gnark-ffi/go/sp1/sp1.go b/crates/recursion/gnark-ffi/go/sp1/sp1.go index 156ff27ad0..d8c9e6f39c 100644 --- a/crates/recursion/gnark-ffi/go/sp1/sp1.go +++ b/crates/recursion/gnark-ffi/go/sp1/sp1.go @@ -166,6 +166,8 @@ func (circuit *Circuit) Define(api frontend.API) error { api.AssertIsEqual(vars[cs.Args[0][0]], vars[cs.Args[1][0]]) case "AssertEqF": fieldAPI.AssertIsEqualF(felts[cs.Args[0][0]], felts[cs.Args[1][0]]) + case "AssertNeF": + fieldAPI.AssertNotEqualF(felts[cs.Args[0][0]], felts[cs.Args[1][0]]) case "AssertEqE": fieldAPI.AssertIsEqualE(exts[cs.Args[0][0]], exts[cs.Args[1][0]]) case "PrintV": From d7e5653077e9fa4e4864a0e6fc17c3e9a9ba643c Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 10:10:00 -0700 Subject: [PATCH 160/268] shard flag --- crates/prover/src/lib.rs | 3 +- .../recursion/circuit-v2/src/machine/core.rs | 33 +++++++++++-------- .../circuit-v2/src/machine/witness.rs | 22 ++----------- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index 0e32be144f..de23f1c89a 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -408,7 +408,7 @@ impl SP1Prover { vk.observe_into(&mut reconstruct_challenger); // Prepare the inputs for the recursion programs. - for batch in shard_proofs.chunks(batch_size) { + for (batch_idx, batch) in shard_proofs.chunks(batch_size).enumerate() { let proofs = batch.to_vec(); core_inputs.push(SP1RecursionWitnessValues { @@ -417,6 +417,7 @@ impl SP1Prover { leaf_challenger: leaf_challenger.clone(), initial_reconstruct_challenger: reconstruct_challenger.clone(), is_complete, + is_first_shard: batch_idx == 0, }); assert_eq!(reconstruct_challenger.input_buffer.len(), 0); assert_eq!(reconstruct_challenger.sponge_state.len(), 16); diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index b3c67edbb3..412df884b4 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -21,7 +21,7 @@ use sp1_stark::{ShardProof, StarkGenericConfig, StarkVerifyingKey}; use sp1_recursion_compiler::{ circuit::CircuitV2Builder, - ir::{Builder, Config, Ext, ExtConst, Felt}, + ir::{Builder, Config, Ext, ExtConst, Felt, SymbolicFelt}, }; use sp1_recursion_core_v2::{ @@ -44,6 +44,7 @@ pub struct SP1RecursionWitnessVariable< pub leaf_challenger: SC::FriChallengerVariable, pub initial_reconstruct_challenger: DuplexChallengerVariable, pub is_complete: Felt, + pub is_first_shard: Felt, } pub struct SP1RecursionWitnessValues { @@ -52,6 +53,7 @@ pub struct SP1RecursionWitnessValues { pub leaf_challenger: SC::Challenger, pub initial_reconstruct_challenger: SC::Challenger, pub is_complete: bool, + pub is_first_shard: bool, } #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] @@ -115,6 +117,7 @@ where leaf_challenger, initial_reconstruct_challenger, is_complete, + is_first_shard, } = input; // Initialize shard variables. @@ -229,19 +232,23 @@ where { *digest = *first_digest; } - } - - // // If the shard is the first shard, assert that the initial challenger is equal to a - // // fresh challenger observing the verifier key and the initial pc. - // First, we compute the initial challenger. - // let mut initial_challenger = machine.config().challenger_variable(builder); - - // let shard = felt2var(builder, public_values.shard); - // builder.if_eq(shard, C::N::one()).then(|builder| { - // vk.observe_into(builder, challenger); - // initial_reconstruct_challenger.assert_eq(builder, &first_initial_challenger); - // }); + // First shard constraints. We verify the validity of the `is_first_shard` boolean + // flag, and make assertions for that are specific to the first shard using that + // flag. + + // Assert that the shard is boolean. + builder + .assert_felt_eq(is_first_shard * (is_first_shard - C::F::one()), C::F::zero()); + // Assert that if the flag is set to `1`, then the shard idex is `1`. + builder + .assert_felt_eq(is_first_shard * (initial_shard - C::F::one()), C::F::zero()); + // Assert that if the flag is set to `0`, then the shard index is not `1`. + builder.assert_felt_ne( + (SymbolicFelt::one() - is_first_shard) * initial_shard, + C::F::one(), + ); + } // Verify the shard. // diff --git a/crates/recursion/circuit-v2/src/machine/witness.rs b/crates/recursion/circuit-v2/src/machine/witness.rs index e4b9d69155..1e5b0773db 100644 --- a/crates/recursion/circuit-v2/src/machine/witness.rs +++ b/crates/recursion/circuit-v2/src/machine/witness.rs @@ -112,12 +112,14 @@ where let leaf_challenger = self.leaf_challenger.read(builder); let initial_reconstruct_challenger = self.initial_reconstruct_challenger.read(builder); let is_complete = InnerVal::from_bool(self.is_complete).read(builder); + let is_first_shard = InnerVal::from_bool(self.is_first_shard).read(builder); SP1RecursionWitnessVariable { vk, shard_proofs, leaf_challenger, initial_reconstruct_challenger, is_complete, + is_first_shard, } } @@ -127,28 +129,10 @@ where self.leaf_challenger.write(witness); self.initial_reconstruct_challenger.write(witness); self.is_complete.write(witness); + self.is_first_shard.write(witness); } } -// impl Witnessable for SP1CompressWitnessValues -// where -// C: CircuitConfig>, -// { -// type WitnessVariable = SP1CompressWitnessVariable; - -// fn read(&self, builder: &mut Builder) -> Self::WitnessVariable { -// let vks_and_proofs = self.vks_and_proofs.read(builder); -// let is_complete = InnerVal::from_bool(self.is_complete).read(builder); - -// SP1CompressWitnessVariable { vks_and_proofs, is_complete } -// } - -// fn write(&self, witness: &mut impl WitnessWriter) { -// self.vks_and_proofs.write(witness); -// self.is_complete.write(witness); -// } -// } - impl, SC: BabyBearFriConfigVariable> Witnessable for SP1CompressWitnessValues where From b77356b8cb06e5dbb1b40335fdef00fa9c7e671a Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 11:09:37 -0700 Subject: [PATCH 161/268] initial shard assertions --- crates/core/machine/src/riscv/mod.rs | 3 + crates/recursion/circuit-v2/src/lib.rs | 27 ++++++ .../recursion/circuit-v2/src/machine/core.rs | 83 +++++++++---------- crates/recursion/circuit-v2/src/stark.rs | 5 ++ 4 files changed, 74 insertions(+), 44 deletions(-) diff --git a/crates/core/machine/src/riscv/mod.rs b/crates/core/machine/src/riscv/mod.rs index 7fba0e1ec2..ee83966bec 100644 --- a/crates/core/machine/src/riscv/mod.rs +++ b/crates/core/machine/src/riscv/mod.rs @@ -15,6 +15,9 @@ use sp1_stark::{ use strum_macros::{EnumDiscriminants, EnumIter}; use tracing::instrument; +pub const MAX_LOG_NUMBER_OF_SHARDS: usize = 16; +pub const MAX_NUMBER_OF_SHARDS: usize = 1 << MAX_LOG_NUMBER_OF_SHARDS; + /// A module for importing all the different RISC-V chips. pub(crate) mod riscv_chips { pub use crate::{ diff --git a/crates/recursion/circuit-v2/src/lib.rs b/crates/recursion/circuit-v2/src/lib.rs index 866635286e..c4c540c08d 100644 --- a/crates/recursion/circuit-v2/src/lib.rs +++ b/crates/recursion/circuit-v2/src/lib.rs @@ -117,6 +117,10 @@ pub trait CircuitConfig: Config { fn read_ext(builder: &mut Builder) -> Ext; + fn assert_bit_zero(builder: &mut Builder, bit: Self::Bit); + + fn assert_bit_one(builder: &mut Builder, bit: Self::Bit); + fn ext2felt( builder: &mut Builder, ext: Ext<::F, ::EF>, @@ -162,11 +166,26 @@ pub trait CircuitConfig: Config { first: impl IntoIterator::F, ::EF>> + Clone, second: impl IntoIterator::F, ::EF>> + Clone, ) -> Vec::F, ::EF>>; + + fn range_check_felt(builder: &mut Builder, value: Felt, num_bits: usize) { + let bits = Self::num2bits(builder, value, 32); + for bit in bits.into_iter().skip(num_bits) { + Self::assert_bit_zero(builder, bit); + } + } } impl CircuitConfig for InnerConfig { type Bit = Felt<::F>; + fn assert_bit_zero(builder: &mut Builder, bit: Self::Bit) { + builder.assert_felt_eq(bit, Self::F::zero()); + } + + fn assert_bit_one(builder: &mut Builder, bit: Self::Bit) { + builder.assert_felt_eq(bit, Self::F::one()); + } + fn read_bit(builder: &mut Builder) -> Self::Bit { builder.hint_felt_v2() } @@ -257,6 +276,14 @@ impl CircuitConfig for InnerConfig { impl CircuitConfig for OuterConfig { type Bit = Var<::N>; + fn assert_bit_zero(builder: &mut Builder, bit: Self::Bit) { + builder.assert_var_eq(bit, Self::N::zero()); + } + + fn assert_bit_one(builder: &mut Builder, bit: Self::Bit) { + builder.assert_var_eq(bit, Self::N::one()); + } + fn read_bit(builder: &mut Builder) -> Self::Bit { builder.witness_var() } diff --git a/crates/recursion/circuit-v2/src/machine/core.rs b/crates/recursion/circuit-v2/src/machine/core.rs index 412df884b4..34a30d4cdd 100644 --- a/crates/recursion/circuit-v2/src/machine/core.rs +++ b/crates/recursion/circuit-v2/src/machine/core.rs @@ -10,7 +10,12 @@ use p3_baby_bear::BabyBear; use p3_commit::Mmcs; use p3_field::AbstractField; use p3_matrix::dense::RowMajorMatrix; -use sp1_core_machine::riscv::RiscvAir; + +use sp1_core_machine::{ + cpu::MAX_CPU_LOG_DEGREE, + riscv::{RiscvAir, MAX_LOG_NUMBER_OF_SHARDS}, +}; + use sp1_recursion_core_v2::air::PV_DIGEST_NUM_WORDS; use sp1_stark::{ air::{PublicValues, POSEIDON_NUM_WORDS}, @@ -248,6 +253,31 @@ where (SymbolicFelt::one() - is_first_shard) * initial_shard, C::F::one(), ); + + // If the initial shard is the first shard, we assert that the initial challenger + // is the same as a fresh challenger that absorbed the verifying key. + let mut first_shard_challenger = machine.config().challenger_variable(builder); + vk.observe_into(builder, &mut first_shard_challenger); + let first_challenger_public_values = first_shard_challenger.public_values(builder); + let initial_challenger_public_values = + initial_reconstruct_challenger.public_values(builder); + for (first, initial) in + first_challenger_public_values.into_iter().zip(initial_challenger_public_values) + { + builder.assert_felt_eq(is_first_shard * (first - initial), C::F::zero()); + } + + // If it's the first shard (which is the first execution shard), then the `start_pc` + // should be vk.pc_start. + builder.assert_felt_eq(is_first_shard * (start_pc - vk.pc_start), C::F::zero()); + + // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first + for bit in current_init_addr_bits.iter() { + builder.assert_felt_eq(is_first_shard * *bit, C::F::zero()); + } + for bit in current_finalize_addr_bits.iter() { + builder.assert_felt_eq(is_first_shard * *bit, C::F::zero()); + } } // Verify the shard. @@ -263,27 +293,11 @@ where builder.assert_felt_ne(current_shard, C::F::one()); } - // // CPU log degree bound check constraints. - // { - // for (i, chip) in machine.chips().iter().enumerate() { - // if chip.name() == "CPU" { - // builder.if_eq(contains_cpu, C::N::one()).then(|builder| { - // let index = builder.get(&proof.sorted_idxs, i); - // let cpu_log_degree = - // builder.get(&proof.opened_values.chips, index).log_degree; - // let cpu_log_degree_lt_max: Var<_> = builder.eval(C::N::zero()); - // builder - // .range(0, MAX_CPU_LOG_DEGREE + 1) - // .for_each(|j, builder| { - // builder.if_eq(j, cpu_log_degree).then(|builder| { - // builder.assign(cpu_log_degree_lt_max, C::N::one()); - // }); - // }); - // builder.assert_var_eq(cpu_log_degree_lt_max, C::N::one()); - // }); - // } - // } - // } + // CPU log degree bound check constraints (this assertion is made in compile time). + if shard_proof.contains_cpu() { + let log_degree_cpu = shard_proof.log_degree_cpu(); + assert!(log_degree_cpu <= MAX_CPU_LOG_DEGREE); + } // Shard constraints. { @@ -307,13 +321,6 @@ where // Program counter constraints. { - // // If it's the first shard (which is the first execution shard), then the - // start_pc should be vk.pc_start. Equivalently, if `start_pc != vk.pc_start`, then - // the shard is not equal to one. - // builder.if_eq(shard, C::N::one()).then(|builder| { - // builder.assert_felt_eq(public_values.start_pc, vk.pc_start); - // }); - // Assert that the start_pc of the proof is equal to the current pc. builder.assert_felt_eq(current_pc, public_values.start_pc); @@ -338,19 +345,6 @@ where // Memory initialization & finalization constraints. { - // // Assert that `init_addr_bits` and `finalize_addr_bits` are zero for the first - // execution shard. builder.if_eq(execution_shard, - // C::N::one()).then(|builder| { // Assert that the - // MemoryInitialize address bits are zero. for bit in - // current_init_addr_bits.iter() { builder.assert_felt_eq(* - // bit, C::F::zero()); } - - // // Assert that the MemoryFinalize address bits are zero. - // for bit in current_finalize_addr_bits.iter() { - // builder.assert_felt_eq(*bit, C::F::zero()); - // } - // }); - // Assert that the MemoryInitialize address bits match the current loop variable. for (bit, current_bit) in current_init_addr_bits .iter() @@ -497,8 +491,9 @@ where deferred_proofs_digest.copy_from_slice(&public_values.deferred_proofs_digest); } - // // Verify that the number of shards is not too large. - // builder.range_check_f(public_values.shard, 16); + // Verify that the number of shards is not too large, i.e. that for every shard, we + // have shard < 2^{MAX_LOG_NUMBER_OF_SHARDS}. + C::range_check_felt(builder, public_values.shard, MAX_LOG_NUMBER_OF_SHARDS); // Update the reconstruct challenger. reconstruct_challenger.observe(builder, shard_proof.commitment.main_commit); diff --git a/crates/recursion/circuit-v2/src/stark.rs b/crates/recursion/circuit-v2/src/stark.rs index eae7597eb9..2dd5b49fd3 100644 --- a/crates/recursion/circuit-v2/src/stark.rs +++ b/crates/recursion/circuit-v2/src/stark.rs @@ -240,6 +240,11 @@ impl, SC: BabyBearFriConfigVariable> ShardProof self.chip_ordering.contains_key("CPU") } + pub fn log_degree_cpu(&self) -> usize { + let idx = self.chip_ordering.get("CPU").expect("CPU chip not found"); + self.opened_values.chips[*idx].log_degree + } + pub fn contains_memory_init(&self) -> bool { self.chip_ordering.contains_key("MemoryInit") } From 4a004c1420268f8a1872fb86d55f2d56925bbac2 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Fri, 30 Aug 2024 18:48:05 -0700 Subject: [PATCH 162/268] feat: enable fixed shape in recursion circuit (#1462) --- crates/prover/src/lib.rs | 4 +- .../compiler/src/circuit/compiler.rs | 2 +- crates/recursion/compiler/src/circuit/mod.rs | 107 +----------------- .../recursion/core-v2/src/chips/alu_base.rs | 12 +- crates/recursion/core-v2/src/chips/alu_ext.rs | 12 +- .../core-v2/src/chips/exp_reverse_bits.rs | 16 +-- .../core-v2/src/chips/mem/constant.rs | 7 +- .../core-v2/src/chips/mem/variable.rs | 7 +- .../core-v2/src/chips/poseidon2_skinny/mod.rs | 8 +- .../src/chips/poseidon2_skinny/trace.rs | 4 +- .../core-v2/src/chips/poseidon2_wide/mod.rs | 11 +- .../core-v2/src/chips/poseidon2_wide/trace.rs | 12 +- .../core-v2/src/chips/public_values.rs | 18 ++- crates/recursion/core-v2/src/lib.rs | 1 + crates/recursion/core-v2/src/machine.rs | 105 +++++++++-------- .../recursion/core-v2/src/runtime/program.rs | 19 +++- .../recursion/core-v2/src/runtime/record.rs | 11 +- crates/recursion/core-v2/src/shape.rs | 31 +++++ 18 files changed, 171 insertions(+), 216 deletions(-) create mode 100644 crates/recursion/core-v2/src/shape.rs diff --git a/crates/prover/src/lib.rs b/crates/prover/src/lib.rs index bcc03acaec..5444874b63 100644 --- a/crates/prover/src/lib.rs +++ b/crates/prover/src/lib.rs @@ -341,7 +341,9 @@ impl SP1Prover { // Compile the program. let compiler_span = tracing::debug_span!("compile shrink program").entered(); let mut compiler = AsmCompiler::::default(); - let program = Arc::new(compiler.compile(operations)); + let mut program = compiler.compile(operations); + program.shape = Some(ShrinkAir::::shrink_shape()); + let program = Arc::new(program); compiler_span.exit(); program } diff --git a/crates/recursion/compiler/src/circuit/compiler.rs b/crates/recursion/compiler/src/circuit/compiler.rs index ad61c665d4..24c615be16 100644 --- a/crates/recursion/compiler/src/circuit/compiler.rs +++ b/crates/recursion/compiler/src/circuit/compiler.rs @@ -623,7 +623,7 @@ where (instrs_consts.chain(instrs).collect(), traces) } }); - RecursionProgram { instructions, total_memory, traces } + RecursionProgram { instructions, total_memory, traces, shape: None } } } diff --git a/crates/recursion/compiler/src/circuit/mod.rs b/crates/recursion/compiler/src/circuit/mod.rs index 9a1411f734..39dd01901f 100644 --- a/crates/recursion/compiler/src/circuit/mod.rs +++ b/crates/recursion/compiler/src/circuit/mod.rs @@ -9,25 +9,11 @@ mod tests { use std::sync::Arc; use p3_baby_bear::DiffusionMatrixBabyBear; - use p3_field::{AbstractExtensionField, AbstractField}; - use rand::{rngs::StdRng, Rng, SeedableRng}; - - use sp1_core_machine::utils::{run_test_machine, setup_logger}; - use sp1_recursion_core_v2::{ - chips::{ - alu_base::BaseAluChip, - alu_ext::ExtAluChip, - exp_reverse_bits::ExpReverseBitsLenChip, - fri_fold::FriFoldChip, - mem::{MemoryConstChip, MemoryVarChip}, - poseidon2_wide::Poseidon2WideChip, - }, - machine::RecursionAir, - Runtime, RuntimeError, - }; - use sp1_stark::{ - BabyBearPoseidon2Inner, Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS, - }; + use p3_field::AbstractField; + + use sp1_core_machine::utils::run_test_machine; + use sp1_recursion_core_v2::{machine::RecursionAir, Runtime, RuntimeError}; + use sp1_stark::{BabyBearPoseidon2Inner, StarkGenericConfig}; use crate::{ asm::AsmBuilder, @@ -42,89 +28,6 @@ mod tests { type EF = ::Challenge; type A = RecursionAir; - /// Rough test to give an idea of how long the compress stage would take on the v2 circuit - /// relative to the recursion VM. - /// - /// The constants below were manually populated by running - /// `RUST_LOG=debug RUST_LOGGER=forest FRI_QUERIES=100 cargo test - /// --release --package sp1-prover -- --exact tests::test_e2e` - /// and writing down numbers from the first `prove_shards` section of the compress stage. - /// We use those numbers to create a dummy circuit that should roughly be the size of - /// the finished circuit, which will be equivalent to the compress program on the VM. - /// Therefore, by running `RUST_LOG=debug RUST_LOGGER=forest FRI_QUERIES=100 cargo test - /// -release --lib --features native-gnark -- test_compress_dummy_circuit` - /// and comparing the durations of the `prove_shards` sections, we can roughly estimate the - /// speed-up factor. At the time of writing, the factor is approximately 30.4s/3.5s = 8.7. - #[test] - fn test_compress_dummy_circuit() { - setup_logger(); - - // To aid in testing. - const SCALE: usize = 1; - const FIELD_OPERATIONS: usize = 451653 * SCALE; - const EXTENSION_OPERATIONS: usize = 82903 * SCALE; - const POSEIDON_OPERATIONS: usize = 34697 * SCALE; - const EXP_REVERSE_BITS_LEN_OPERATIONS: usize = 35200 * SCALE; - const FRI_FOLD_OPERATIONS: usize = 152800 * SCALE; - - let mut builder = AsmBuilder::::default(); - - let mut rng = StdRng::seed_from_u64(0xFEB29).sample_iter(rand::distributions::Standard); - let mut random_felt = move || -> F { rng.next().unwrap() }; - let mut rng = - StdRng::seed_from_u64(0x0451).sample_iter::<[F; 4], _>(rand::distributions::Standard); - let mut random_ext = move || EF::from_base_slice(&rng.next().unwrap()); - - for _ in 0..FIELD_OPERATIONS { - let a: Felt<_> = builder.eval(random_felt()); - let b: Felt<_> = builder.eval(random_felt()); - let _: Felt<_> = builder.eval(a + b); - } - for _ in 0..EXTENSION_OPERATIONS { - let a: Ext<_, _> = builder.eval(random_ext().cons()); - let b: Ext<_, _> = builder.eval(random_ext().cons()); - let _: Ext<_, _> = builder.eval(a + b); - } - - let operations = builder.into_operations(); - let mut compiler = AsmCompiler::default(); - let program = Arc::new(compiler.compile(operations)); - let mut runtime = Runtime::::new( - program.clone(), - BabyBearPoseidon2Inner::new().perm, - ); - runtime.run().unwrap(); - - // Construct the machine ourselves so we can pad the tables, avoiding `A::machine`. - let config = SC::default(); - let chips: Vec> = vec![ - A::MemoryConst(MemoryConstChip::default()), - A::MemoryVar(MemoryVarChip::default()), - A::BaseAlu(BaseAluChip::default()), - A::ExtAlu(ExtAluChip::default()), - A::Poseidon2Wide(Poseidon2WideChip:: { - fixed_log2_rows: Some(((POSEIDON_OPERATIONS - 1).ilog2() + 1) as usize), - }), - A::ExpReverseBitsLen(ExpReverseBitsLenChip:: { - fixed_log2_rows: Some(((EXP_REVERSE_BITS_LEN_OPERATIONS - 1).ilog2() + 1) as usize), - }), - A::FriFold(FriFoldChip:: { - fixed_log2_rows: Some(((FRI_FOLD_OPERATIONS - 1).ilog2() + 1) as usize), - pad: true, - }), - ] - .into_iter() - .map(Chip::new) - .collect(); - let machine = StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS); - - let (pk, vk) = machine.setup(&program); - let result = - run_test_machine(vec![runtime.record], machine, pk, vk.clone()).expect("should verify"); - - tracing::info!("num shard proofs: {}", result.shard_proofs.len()); - } - #[test] fn test_io() { let mut builder = AsmBuilder::::default(); diff --git a/crates/recursion/core-v2/src/chips/alu_base.rs b/crates/recursion/core-v2/src/chips/alu_base.rs index 64bd5cb31a..ba29d34434 100644 --- a/crates/recursion/core-v2/src/chips/alu_base.rs +++ b/crates/recursion/core-v2/src/chips/alu_base.rs @@ -13,9 +13,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; pub const NUM_BASE_ALU_ENTRIES_PER_ROW: usize = 4; #[derive(Default)] -pub struct BaseAluChip { - pub fixed_log2_rows: Option, -} +pub struct BaseAluChip; pub const NUM_BASE_ALU_COLS: usize = core::mem::size_of::>(); @@ -86,7 +84,8 @@ impl MachineAir for BaseAluChip { .collect::>(); let nb_rows = instrs.len().div_ceil(NUM_BASE_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = match self.fixed_log2_rows { + let fixed_log2_rows = program.fixed_log2_rows(self); + let padded_nb_rows = match fixed_log2_rows { Some(log2_rows) => 1 << log2_rows, None => next_power_of_two(nb_rows, None), }; @@ -127,7 +126,8 @@ impl MachineAir for BaseAluChip { fn generate_trace(&self, input: &Self::Record, _: &mut Self::Record) -> RowMajorMatrix { let events = &input.base_alu_events; let nb_rows = events.len().div_ceil(NUM_BASE_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = match self.fixed_log2_rows { + let fixed_log2_rows = input.fixed_log2_rows(self); + let padded_nb_rows = match fixed_log2_rows { Some(log2_rows) => 1 << log2_rows, None => next_power_of_two(nb_rows, None), }; @@ -208,7 +208,7 @@ mod tests { base_alu_events: vec![BaseAluIo { out: F::one(), in1: F::one(), in2: F::one() }], ..Default::default() }; - let chip = BaseAluChip::default(); + let chip = BaseAluChip; let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); println!("{:?}", trace.values) } diff --git a/crates/recursion/core-v2/src/chips/alu_ext.rs b/crates/recursion/core-v2/src/chips/alu_ext.rs index 813d8e6786..056596dfba 100644 --- a/crates/recursion/core-v2/src/chips/alu_ext.rs +++ b/crates/recursion/core-v2/src/chips/alu_ext.rs @@ -13,9 +13,7 @@ use crate::{builder::SP1RecursionAirBuilder, *}; pub const NUM_EXT_ALU_ENTRIES_PER_ROW: usize = 4; #[derive(Default)] -pub struct ExtAluChip { - pub fixed_log2_rows: Option, -} +pub struct ExtAluChip; pub const NUM_EXT_ALU_COLS: usize = core::mem::size_of::>(); @@ -84,7 +82,8 @@ impl> MachineAir for ExtAluChip { .collect::>(); let nb_rows = instrs.len().div_ceil(NUM_EXT_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = match self.fixed_log2_rows { + let fixed_log2_rows = program.fixed_log2_rows(self); + let padded_nb_rows = match fixed_log2_rows { Some(log2_rows) => 1 << log2_rows, None => next_power_of_two(nb_rows, None), }; @@ -125,7 +124,8 @@ impl> MachineAir for ExtAluChip { fn generate_trace(&self, input: &Self::Record, _: &mut Self::Record) -> RowMajorMatrix { let events = &input.ext_alu_events; let nb_rows = events.len().div_ceil(NUM_EXT_ALU_ENTRIES_PER_ROW); - let padded_nb_rows = match self.fixed_log2_rows { + let fixed_log2_rows = input.fixed_log2_rows(self); + let padded_nb_rows = match fixed_log2_rows { Some(log2_rows) => 1 << log2_rows, None => next_power_of_two(nb_rows, None), }; @@ -217,7 +217,7 @@ mod tests { }], ..Default::default() }; - let chip = ExtAluChip::default(); + let chip = ExtAluChip; let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); println!("{:?}", trace.values) } diff --git a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs index db4206cea6..4ff5213c97 100644 --- a/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs +++ b/crates/recursion/core-v2/src/chips/exp_reverse_bits.rs @@ -22,14 +22,8 @@ pub const NUM_EXP_REVERSE_BITS_LEN_COLS: usize = core::mem::size_of::>(); -pub struct ExpReverseBitsLenChip { - pub fixed_log2_rows: Option, -} -impl Default for ExpReverseBitsLenChip { - fn default() -> Self { - Self { fixed_log2_rows: None } - } -} +#[derive(Clone, Debug, Copy, Default)] +pub struct ExpReverseBitsLenChip; #[derive(AlignedBorrow, Clone, Copy, Debug)] #[repr(C)] @@ -128,7 +122,7 @@ impl MachineAir for ExpReverseBitsLenCh pad_rows_fixed( &mut rows, || [F::zero(); NUM_EXP_REVERSE_BITS_LEN_PREPROCESSED_COLS], - self.fixed_log2_rows, + program.fixed_log2_rows(self), ); let trace = RowMajorMatrix::new( @@ -178,7 +172,7 @@ impl MachineAir for ExpReverseBitsLenCh pad_rows_fixed( &mut overall_rows, || [F::zero(); NUM_EXP_REVERSE_BITS_LEN_COLS].to_vec(), - self.fixed_log2_rows, + input.fixed_log2_rows(self), ); // Convert the trace to a row major matrix. @@ -389,7 +383,7 @@ mod tests { }], ..Default::default() }; - let chip = ExpReverseBitsLenChip::<3>::default(); + let chip = ExpReverseBitsLenChip::<3>; let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); println!("{:?}", trace.values) } diff --git a/crates/recursion/core-v2/src/chips/mem/constant.rs b/crates/recursion/core-v2/src/chips/mem/constant.rs index 36d374e2c6..4cb72618b8 100644 --- a/crates/recursion/core-v2/src/chips/mem/constant.rs +++ b/crates/recursion/core-v2/src/chips/mem/constant.rs @@ -16,8 +16,7 @@ pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { - pub fixed_log2_rows: Option, - pub _data: PhantomData, + _marker: PhantomData, } pub const NUM_MEM_INIT_COLS: usize = core::mem::size_of::>(); @@ -87,7 +86,7 @@ impl MachineAir for MemoryChip { pad_rows_fixed( &mut rows, || [F::zero(); NUM_MEM_PREPROCESSED_INIT_COLS], - self.fixed_log2_rows, + program.fixed_log2_rows(self), ); // Convert the trace to a row major matrix. @@ -114,7 +113,7 @@ impl MachineAir for MemoryChip { std::iter::repeat([F::zero(); NUM_MEM_INIT_COLS]).take(num_rows).collect::>(); // Pad the rows to the next power of two. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_MEM_INIT_COLS], self.fixed_log2_rows); + pad_rows_fixed(&mut rows, || [F::zero(); NUM_MEM_INIT_COLS], input.fixed_log2_rows(self)); // Convert the trace to a row major matrix. RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MEM_INIT_COLS) diff --git a/crates/recursion/core-v2/src/chips/mem/variable.rs b/crates/recursion/core-v2/src/chips/mem/variable.rs index 35793de3e7..6f62f0d38e 100644 --- a/crates/recursion/core-v2/src/chips/mem/variable.rs +++ b/crates/recursion/core-v2/src/chips/mem/variable.rs @@ -17,8 +17,7 @@ pub const NUM_MEM_ENTRIES_PER_ROW: usize = 2; #[derive(Default)] pub struct MemoryChip { - pub fixed_log2_rows: Option, - pub _data: PhantomData, + _marker: PhantomData, } pub const NUM_MEM_INIT_COLS: usize = core::mem::size_of::>(); @@ -76,7 +75,7 @@ impl MachineAir for MemoryChip { .collect::>(); let nb_rows = accesses.len().div_ceil(NUM_MEM_ENTRIES_PER_ROW); - let padded_nb_rows = match self.fixed_log2_rows { + let padded_nb_rows = match program.fixed_log2_rows(self) { Some(log2_rows) => 1 << log2_rows, None => next_power_of_two(nb_rows, None), }; @@ -112,7 +111,7 @@ impl MachineAir for MemoryChip { .collect::>(); // Pad the rows to the next power of two. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_MEM_INIT_COLS], self.fixed_log2_rows); + pad_rows_fixed(&mut rows, || [F::zero(); NUM_MEM_INIT_COLS], input.fixed_log2_rows(self)); // Convert the trace to a row major matrix. RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MEM_INIT_COLS) diff --git a/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs b/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs index 11c3e796d7..98712e62c4 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_skinny/mod.rs @@ -1,3 +1,5 @@ +use std::marker::PhantomData; + use p3_baby_bear::{MONTY_INVERSE, POSEIDON2_INTERNAL_MATRIX_DIAG_16_BABYBEAR_MONTY}; use p3_field::{AbstractField, PrimeField32}; @@ -17,15 +19,13 @@ pub const NUM_ROUNDS: usize = NUM_EXTERNAL_ROUNDS + NUM_INTERNAL_ROUNDS; /// A chip that implements the Poseidon2 permutation in the skinny variant (one external round per /// row and one row for all internal rounds). -pub struct Poseidon2SkinnyChip { - pub fixed_log2_rows: Option, -} +pub struct Poseidon2SkinnyChip(PhantomData<()>); impl Default for Poseidon2SkinnyChip { fn default() -> Self { // We only support machines with degree 9. assert!(DEGREE >= 9); - Self { fixed_log2_rows: None } + Self(PhantomData) } } pub fn apply_m_4(x: &mut [AF]) diff --git a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs index 768f4d0126..876c5f860f 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_skinny/trace.rs @@ -99,7 +99,7 @@ impl MachineAir for Poseidon2SkinnyChip // Pad the trace to a power of two. // This will need to be adjusted when the AIR constraints are implemented. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_POSEIDON2_COLS], self.fixed_log2_rows); + pad_rows_fixed(&mut rows, || [F::zero(); NUM_POSEIDON2_COLS], input.fixed_log2_rows(self)); // Convert the trace to a row major matrix. let trace = @@ -195,7 +195,7 @@ impl MachineAir for Poseidon2SkinnyChip pad_rows_fixed( &mut rows, || [F::zero(); PREPROCESSED_POSEIDON2_WIDTH], - self.fixed_log2_rows, + program.fixed_log2_rows(self), ); let trace_rows = rows.into_iter().flatten().collect::>(); Some(RowMajorMatrix::new(trace_rows, PREPROCESSED_POSEIDON2_WIDTH)) diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs index 0d8c7a7b13..7c3674d441 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/mod.rs @@ -22,15 +22,8 @@ pub const NUM_INTERNAL_ROUNDS: usize = 13; pub const NUM_ROUNDS: usize = NUM_EXTERNAL_ROUNDS + NUM_INTERNAL_ROUNDS; /// A chip that implements addition for the opcode Poseidon2Wide. -pub struct Poseidon2WideChip { - pub fixed_log2_rows: Option, -} - -impl Default for Poseidon2WideChip { - fn default() -> Self { - Self { fixed_log2_rows: None } - } -} +#[derive(Default, Debug, Clone, Copy)] +pub struct Poseidon2WideChip; impl<'a, const DEGREE: usize> Poseidon2WideChip { /// Transmute a row it to an immutable Poseidon2 instance. diff --git a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs index dfe81855c9..f7cf96a1e7 100644 --- a/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs +++ b/crates/recursion/core-v2/src/chips/poseidon2_wide/trace.rs @@ -44,9 +44,9 @@ impl MachineAir for Poseidon2WideChip, ) -> RowMajorMatrix { let events = &input.poseidon2_events; - let padded_nb_rows = match self.fixed_log2_rows { + let padded_nb_rows = match input.fixed_log2_rows(self) { Some(log2_rows) => 1 << log2_rows, - None => next_power_of_two(events.len(), self.fixed_log2_rows), + None => next_power_of_two(events.len(), None), }; let num_columns = >::width(self); let mut values = vec![F::zero(); padded_nb_rows * num_columns]; @@ -102,9 +102,9 @@ impl MachineAir for Poseidon2WideChip>(); - let padded_nb_rows = match self.fixed_log2_rows { + let padded_nb_rows = match program.fixed_log2_rows(self) { Some(log2_rows) => 1 << log2_rows, - None => next_power_of_two(instrs.len(), self.fixed_log2_rows), + None => next_power_of_two(instrs.len(), None), }; let mut values = vec![F::zero(); padded_nb_rows * PREPROCESSED_POSEIDON2_WIDTH]; @@ -310,7 +310,7 @@ mod tests { ], ..Default::default() }; - let chip_3 = Poseidon2WideChip::<3>::default(); + let chip_3 = Poseidon2WideChip::<3>; let _: RowMajorMatrix = chip_3.generate_trace(&shard, &mut ExecutionRecord::default()); } @@ -332,7 +332,7 @@ mod tests { ], ..Default::default() }; - let chip_9 = Poseidon2WideChip::<9>::default(); + let chip_9 = Poseidon2WideChip::<9>; let _: RowMajorMatrix = chip_9.generate_trace(&shard, &mut ExecutionRecord::default()); } } diff --git a/crates/recursion/core-v2/src/chips/public_values.rs b/crates/recursion/core-v2/src/chips/public_values.rs index fb003f1532..512576f2d9 100644 --- a/crates/recursion/core-v2/src/chips/public_values.rs +++ b/crates/recursion/core-v2/src/chips/public_values.rs @@ -22,8 +22,10 @@ pub const NUM_PUBLIC_VALUES_COLS: usize = core::mem::size_of::>(); +pub(crate) const PUB_VALUES_LOG_HEIGHT: usize = 4; + #[derive(Default)] -pub struct PublicValuesChip {} +pub struct PublicValuesChip; /// The preprocessed columns for the CommitPVHash instruction. #[derive(AlignedBorrow, Debug, Clone, Copy)] @@ -95,7 +97,11 @@ impl MachineAir for PublicValuesChip { // Pad the preprocessed rows to 8 rows. // gpu code breaks for small traces - pad_rows_fixed(&mut rows, || [F::zero(); NUM_PUBLIC_VALUES_PREPROCESSED_COLS], Some(4)); + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_PUBLIC_VALUES_PREPROCESSED_COLS], + Some(PUB_VALUES_LOG_HEIGHT), + ); let trace = RowMajorMatrix::new( rows.into_iter().flatten().collect(), @@ -128,7 +134,11 @@ impl MachineAir for PublicValuesChip { } // Pad the trace to 8 rows. - pad_rows_fixed(&mut rows, || [F::zero(); NUM_PUBLIC_VALUES_COLS], Some(4)); + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_PUBLIC_VALUES_COLS], + Some(PUB_VALUES_LOG_HEIGHT), + ); // Convert the trace to a row major matrix. RowMajorMatrix::new(rows.into_iter().flatten().collect(), NUM_PUBLIC_VALUES_COLS) @@ -236,7 +246,7 @@ mod tests { }], ..Default::default() }; - let chip = PublicValuesChip::default(); + let chip = PublicValuesChip; let trace: RowMajorMatrix = chip.generate_trace(&shard, &mut ExecutionRecord::default()); println!("{:?}", trace.values) } diff --git a/crates/recursion/core-v2/src/lib.rs b/crates/recursion/core-v2/src/lib.rs index 61dd5cdc81..84fd67eaec 100644 --- a/crates/recursion/core-v2/src/lib.rs +++ b/crates/recursion/core-v2/src/lib.rs @@ -10,6 +10,7 @@ pub mod builder; pub mod chips; pub mod machine; pub mod runtime; +pub mod shape; pub use runtime::*; diff --git a/crates/recursion/core-v2/src/machine.rs b/crates/recursion/core-v2/src/machine.rs index c16ae11d43..450d648c54 100644 --- a/crates/recursion/core-v2/src/machine.rs +++ b/crates/recursion/core-v2/src/machine.rs @@ -1,21 +1,25 @@ -use std::marker::PhantomData; - +use hashbrown::HashMap; use p3_field::{extension::BinomiallyExtendable, PrimeField32}; use sp1_recursion_core::runtime::D; -use sp1_stark::{Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS}; +use sp1_stark::{air::MachineAir, Chip, StarkGenericConfig, StarkMachine, PROOF_MAX_NUM_PVS}; -use crate::chips::{ - alu_base::BaseAluChip, - alu_ext::ExtAluChip, - dummy::DummyChip, - exp_reverse_bits::ExpReverseBitsLenChip, - fri_fold::FriFoldChip, - mem::{MemoryConstChip, MemoryVarChip}, - poseidon2_skinny::Poseidon2SkinnyChip, - poseidon2_wide::Poseidon2WideChip, - public_values::PublicValuesChip, +use crate::{ + chips::{ + alu_base::BaseAluChip, + alu_ext::ExtAluChip, + dummy::DummyChip, + exp_reverse_bits::ExpReverseBitsLenChip, + fri_fold::FriFoldChip, + mem::{MemoryConstChip, MemoryVarChip}, + poseidon2_skinny::Poseidon2SkinnyChip, + poseidon2_wide::Poseidon2WideChip, + public_values::{PublicValuesChip, PUB_VALUES_LOG_HEIGHT}, + }, + shape::RecursionShape, }; +const SHRINK_ID: usize = usize::MAX; + #[derive(sp1_derive::MachineAir)] #[sp1_core_path = "sp1_core_machine"] #[execution_record_path = "crate::ExecutionRecord"] @@ -49,12 +53,12 @@ impl, const DEGREE: usize, const COL_P let chips = [ RecursionAir::MemoryConst(MemoryConstChip::default()), RecursionAir::MemoryVar(MemoryVarChip::default()), - RecursionAir::BaseAlu(BaseAluChip::default()), - RecursionAir::ExtAlu(ExtAluChip::default()), - RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), + RecursionAir::BaseAlu(BaseAluChip), + RecursionAir::ExtAlu(ExtAluChip), + RecursionAir::Poseidon2Wide(Poseidon2WideChip::), RecursionAir::FriFold(FriFoldChip::::default()), - RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - RecursionAir::PublicValues(PublicValuesChip::default()), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::), + RecursionAir::PublicValues(PublicValuesChip), ] .map(Chip::new) .into_iter() @@ -69,12 +73,12 @@ impl, const DEGREE: usize, const COL_P let chips = [ RecursionAir::MemoryConst(MemoryConstChip::default()), RecursionAir::MemoryVar(MemoryVarChip::default()), - RecursionAir::BaseAlu(BaseAluChip::default()), - RecursionAir::ExtAlu(ExtAluChip::default()), + RecursionAir::BaseAlu(BaseAluChip), + RecursionAir::ExtAlu(ExtAluChip), RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), RecursionAir::FriFold(FriFoldChip::::default()), - RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - RecursionAir::PublicValues(PublicValuesChip::default()), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::), + RecursionAir::PublicValues(PublicValuesChip), ] .map(Chip::new) .into_iter() @@ -87,11 +91,11 @@ impl, const DEGREE: usize, const COL_P let chips = [ RecursionAir::MemoryConst(MemoryConstChip::default()), RecursionAir::MemoryVar(MemoryVarChip::default()), - RecursionAir::BaseAlu(BaseAluChip::default()), - RecursionAir::ExtAlu(ExtAluChip::default()), - RecursionAir::Poseidon2Wide(Poseidon2WideChip::::default()), - RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - RecursionAir::PublicValues(PublicValuesChip::default()), + RecursionAir::BaseAlu(BaseAluChip), + RecursionAir::ExtAlu(ExtAluChip), + RecursionAir::Poseidon2Wide(Poseidon2WideChip::), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::), + RecursionAir::PublicValues(PublicValuesChip), ] .map(Chip::new) .into_iter() @@ -99,29 +103,8 @@ impl, const DEGREE: usize, const COL_P StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) } - /// A machine with fixed chip sizes to standartize the verification key. pub fn shrink_machine>(config: SC) -> StarkMachine { - let chips = [ - RecursionAir::MemoryConst(MemoryConstChip { - fixed_log2_rows: Some(16), - _data: PhantomData, - }), - RecursionAir::MemoryVar(MemoryVarChip { - fixed_log2_rows: Some(18), - _data: PhantomData, - }), - RecursionAir::BaseAlu(BaseAluChip { fixed_log2_rows: Some(20) }), - RecursionAir::ExtAlu(ExtAluChip { fixed_log2_rows: Some(22) }), - RecursionAir::Poseidon2Wide(Poseidon2WideChip:: { fixed_log2_rows: Some(16) }), - RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { - fixed_log2_rows: Some(16), - }), - RecursionAir::PublicValues(PublicValuesChip::default()), - ] - .map(Chip::new) - .into_iter() - .collect::>(); - StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) + Self::compress_machine(config) } /// A machine with dynamic chip sizes that includes the skinny variant of the Poseidon2 chip. @@ -132,17 +115,33 @@ impl, const DEGREE: usize, const COL_P let chips = [ RecursionAir::MemoryConst(MemoryConstChip::default()), RecursionAir::MemoryVar(MemoryVarChip::default()), - RecursionAir::BaseAlu(BaseAluChip::default()), - RecursionAir::ExtAlu(ExtAluChip::default()), + RecursionAir::BaseAlu(BaseAluChip), + RecursionAir::ExtAlu(ExtAluChip), RecursionAir::Poseidon2Skinny(Poseidon2SkinnyChip::::default()), - RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::::default()), - RecursionAir::PublicValues(PublicValuesChip::default()), + RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip::), + RecursionAir::PublicValues(PublicValuesChip), ] .map(Chip::new) .into_iter() .collect::>(); StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) } + + pub fn shrink_shape() -> RecursionShape { + let shape = HashMap::from( + [ + (Self::MemoryConst(MemoryConstChip::default()), 16), + (Self::MemoryVar(MemoryVarChip::default()), 18), + (Self::BaseAlu(BaseAluChip), 20), + (Self::ExtAlu(ExtAluChip), 22), + (Self::Poseidon2Wide(Poseidon2WideChip::), 16), + (Self::ExpReverseBitsLen(ExpReverseBitsLenChip::), 16), + (Self::PublicValues(PublicValuesChip), PUB_VALUES_LOG_HEIGHT), + ] + .map(|(chip, log_height)| (chip.name(), log_height)), + ); + RecursionShape { id: SHRINK_ID, shape } + } } #[cfg(test)] diff --git a/crates/recursion/core-v2/src/runtime/program.rs b/crates/recursion/core-v2/src/runtime/program.rs index faa5a6f730..9658f5e90e 100644 --- a/crates/recursion/core-v2/src/runtime/program.rs +++ b/crates/recursion/core-v2/src/runtime/program.rs @@ -1,7 +1,8 @@ use backtrace::Backtrace; use p3_field::Field; use serde::{Deserialize, Serialize}; -use sp1_stark::air::MachineProgram; +use shape::RecursionShape; +use sp1_stark::air::{MachineAir, MachineProgram}; use crate::*; @@ -11,6 +12,7 @@ pub struct RecursionProgram { pub total_memory: usize, #[serde(skip)] pub traces: Vec>, + pub shape: Option, } impl MachineProgram for RecursionProgram { @@ -18,3 +20,18 @@ impl MachineProgram for RecursionProgram { F::zero() } } + +impl RecursionProgram { + #[inline] + pub fn fixed_log2_rows>(&self, air: &A) -> Option { + self.shape + .as_ref() + .map(|shape| { + shape + .shape + .get(&air.name()) + .unwrap_or_else(|| panic!("Chip {} not found in specified shape", air.name())) + }) + .copied() + } +} diff --git a/crates/recursion/core-v2/src/runtime/record.rs b/crates/recursion/core-v2/src/runtime/record.rs index 0835ce590e..062ebd89ef 100644 --- a/crates/recursion/core-v2/src/runtime/record.rs +++ b/crates/recursion/core-v2/src/runtime/record.rs @@ -1,8 +1,8 @@ use std::{array, sync::Arc}; -use p3_field::{AbstractField, PrimeField32}; +use p3_field::{AbstractField, Field, PrimeField32}; use sp1_recursion_core::air::RecursionPublicValues; -use sp1_stark::{MachineRecord, SP1CoreOpts, PROOF_MAX_NUM_PVS}; +use sp1_stark::{air::MachineAir, MachineRecord, SP1CoreOpts, PROOF_MAX_NUM_PVS}; // TODO expand glob imports use crate::*; @@ -72,3 +72,10 @@ impl MachineRecord for ExecutionRecord { ret.to_vec() } } + +impl ExecutionRecord { + #[inline] + pub fn fixed_log2_rows>(&self, air: &A) -> Option { + self.program.fixed_log2_rows(air) + } +} diff --git a/crates/recursion/core-v2/src/shape.rs b/crates/recursion/core-v2/src/shape.rs new file mode 100644 index 0000000000..905e8bbeff --- /dev/null +++ b/crates/recursion/core-v2/src/shape.rs @@ -0,0 +1,31 @@ +use hashbrown::HashMap; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +pub struct RecursionShape { + pub id: usize, + pub shape: HashMap, +} + +// let chips = [ +// RecursionAir::MemoryConst(MemoryConstChip { +// fixed_log2_rows: Some(16), +// _data: PhantomData, +// }), +// RecursionAir::MemoryVar(MemoryVarChip { +// fixed_log2_rows: Some(18), +// _data: PhantomData, +// }), +// RecursionAir::BaseAlu(BaseAluChip { fixed_log2_rows: Some(20) }), +// RecursionAir::ExtAlu(ExtAluChip { fixed_log2_rows: Some(22) }), +// RecursionAir::Poseidon2Wide(Poseidon2WideChip:: { fixed_log2_rows: Some(16) }), +// RecursionAir::ExpReverseBitsLen(ExpReverseBitsLenChip:: { +// fixed_log2_rows: Some(16), +// }), +// RecursionAir::PublicValues(PublicValuesChip::default()), +// ] +// .map(Chip::new) +// .into_iter() +// .collect::>(); +// StarkMachine::new(config, chips, PROOF_MAX_NUM_PVS) From 54f0a60e880d3c77eef19fcd164e232982d312b4 Mon Sep 17 00:00:00 2001 From: Eugene Rabinovich Date: Fri, 30 Aug 2024 18:48:38 -0700 Subject: [PATCH 163/268] chore: allow optional proof shape in core record and program (#1460) --- crates/core/executor/src/lib.rs | 2 ++ crates/core/executor/src/program.rs | 27 +++++++++++++-- crates/core/executor/src/record.rs | 38 +++++++++++++++++----- crates/core/executor/src/shape.rs | 11 +++++++ crates/core/machine/src/alu/add_sub/mod.rs | 10 +++--- crates/core/machine/src/alu/bitwise/mod.rs | 14 +++++--- crates/core/machine/src/alu/divrem/mod.rs | 12 ++++--- crates/core/machine/src/alu/lt/mod.rs | 14 +++++--- crates/core/machine/src/alu/mul/mod.rs | 12 ++++--- crates/core/machine/src/alu/sll/mod.rs | 12 ++++--- crates/core/machine/src/alu/sr/mod.rs | 12 ++++--- crates/core/machine/src/cpu/trace.rs | 14 +++++--- crates/core/machine/src/memory/global.rs | 16 ++++----- crates/core/machine/src/memory/program.rs | 38 +++++++++++++--------- crates/core/machine/src/program/mod.rs | 38 +++++++++++----------- 15 files changed, 183 insertions(+), 87 deletions(-) create mode 100644 crates/core/executor/src/shape.rs diff --git a/crates/core/executor/src/lib.rs b/crates/core/executor/src/lib.rs index eb9b850246..2f281ac587 100644 --- a/crates/core/executor/src/lib.rs +++ b/crates/core/executor/src/lib.rs @@ -33,6 +33,7 @@ pub mod programs; mod record; mod register; mod report; +mod shape; mod state; pub mod subproof; pub mod syscalls; @@ -47,4 +48,5 @@ pub use program::*; pub use record::*; pub use register::*; pub use report::*; +pub use shape::*; pub use state::*; diff --git a/crates/core/executor/src/program.rs b/crates/core/executor/src/program.rs index e0cfaf7c2e..85ef17177b 100644 --- a/crates/core/executor/src/program.rs +++ b/crates/core/executor/src/program.rs @@ -4,11 +4,12 @@ use std::{collections::BTreeMap, fs::File, io::Read}; use p3_field::Field; use serde::{Deserialize, Serialize}; -use sp1_stark::air::MachineProgram; +use sp1_stark::air::{MachineAir, MachineProgram}; use crate::{ disassembler::{transpile, Elf}, instruction::Instruction, + CoreShape, }; /// A program that can be executed by the SP1 zkVM. @@ -25,13 +26,21 @@ pub struct Program { pub pc_base: u32, /// The initial memory image, useful for global constants. pub memory_image: BTreeMap, + /// The shape for the preprocessed tables. + pub preprocessed_shape: Option, } impl Program { /// Create a new [Program]. #[must_use] pub const fn new(instructions: Vec, pc_start: u32, pc_base: u32) -> Self { - Self { instructions, pc_start, pc_base, memory_image: BTreeMap::new() } + Self { + instructions, + pc_start, + pc_base, + memory_image: BTreeMap::new(), + preprocessed_shape: None, + } } /// Disassemble a RV32IM ELF to a program that be executed by the VM. @@ -52,6 +61,7 @@ impl Program { pc_start: elf.pc_start, pc_base: elf.pc_base, memory_image: elf.memory_image, + preprocessed_shape: None, }) } @@ -65,6 +75,19 @@ impl Program { File::open(path)?.read_to_end(&mut elf_code)?; Program::from(&elf_code) } + + /// Custom logic for padding the trace to a power of two according to the proof shape. + pub fn fixed_log2_rows>(&self, air: &A) -> Option { + self.preprocessed_shape + .as_ref() + .map(|shape| { + shape + .shape + .get(&air.name()) + .unwrap_or_else(|| panic!("Chip {} not found in specified shape", air.name())) + }) + .copied() + } } impl MachineProgram for Program { diff --git a/crates/core/executor/src/record.rs b/crates/core/executor/src/record.rs index ab78477f02..46ba4c2532 100644 --- a/crates/core/executor/src/record.rs +++ b/crates/core/executor/src/record.rs @@ -1,18 +1,24 @@ use hashbrown::HashMap; use itertools::{EitherOrBoth, Itertools}; -use p3_field::AbstractField; -use sp1_stark::{air::PublicValues, MachineRecord, SP1CoreOpts, SplitOpts}; +use p3_field::{AbstractField, PrimeField}; +use sp1_stark::{ + air::{MachineAir, PublicValues}, + MachineRecord, SP1CoreOpts, SplitOpts, +}; use std::sync::Arc; use serde::{Deserialize, Serialize}; use super::{program::Program, Opcode}; -use crate::events::{ - add_sharded_byte_lookup_events, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, - EdDecompressEvent, EllipticCurveAddEvent, EllipticCurveDecompressEvent, - EllipticCurveDoubleEvent, Fp2AddSubEvent, Fp2MulEvent, FpOpEvent, KeccakPermuteEvent, LookupId, - MemoryInitializeFinalizeEvent, MemoryRecordEnum, ShaCompressEvent, ShaExtendEvent, - Uint256MulEvent, +use crate::{ + events::{ + add_sharded_byte_lookup_events, AluEvent, ByteLookupEvent, ByteRecord, CpuEvent, + EdDecompressEvent, EllipticCurveAddEvent, EllipticCurveDecompressEvent, + EllipticCurveDoubleEvent, Fp2AddSubEvent, Fp2MulEvent, FpOpEvent, KeccakPermuteEvent, + LookupId, MemoryInitializeFinalizeEvent, MemoryRecordEnum, ShaCompressEvent, + ShaExtendEvent, Uint256MulEvent, + }, + shape::CoreShape, }; /// A record of the execution of a program. @@ -90,6 +96,8 @@ pub struct ExecutionRecord { pub public_values: PublicValues, /// The nonce lookup. pub nonce_lookup: HashMap, + /// The shape of the proof. + pub shape: Option, } impl ExecutionRecord { @@ -273,6 +281,20 @@ impl ExecutionRecord { shards } + + /// Return the number of rows needed for a chip, according to the proof shape specified in the + /// struct. + pub fn fixed_log2_rows>(&self, air: &A) -> Option { + self.shape + .as_ref() + .map(|shape| { + shape + .shape + .get(&air.name()) + .unwrap_or_else(|| panic!("Chip {} not found in specified shape", air.name())) + }) + .copied() + } } /// A memory access record. diff --git a/crates/core/executor/src/shape.rs b/crates/core/executor/src/shape.rs new file mode 100644 index 0000000000..19e258d040 --- /dev/null +++ b/crates/core/executor/src/shape.rs @@ -0,0 +1,11 @@ +use hashbrown::HashMap; +use serde::{Deserialize, Serialize}; + +/// The shape of a core proof. +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +pub struct CoreShape { + /// The id of the shape. Used for enumeration of the possible proof shapes. + pub id: usize, + /// The shape of the proof. Keys are the chip names and values are the log-heights of the chips. + pub shape: HashMap, +} diff --git a/crates/core/machine/src/alu/add_sub/mod.rs b/crates/core/machine/src/alu/add_sub/mod.rs index ee8efafb03..8128a8a8b0 100644 --- a/crates/core/machine/src/alu/add_sub/mod.rs +++ b/crates/core/machine/src/alu/add_sub/mod.rs @@ -19,7 +19,7 @@ use sp1_stark::{ Word, }; -use crate::{operations::AddOperation, utils::pad_to_power_of_two}; +use crate::{operations::AddOperation, utils::pad_rows_fixed}; /// The number of main trace columns for `AddSubChip`. pub const NUM_ADD_SUB_COLS: usize = size_of::>(); @@ -105,13 +105,15 @@ impl MachineAir for AddSubChip { rows.extend(row_batch); } + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_ADD_SUB_COLS], + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_ADD_SUB_COLS); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - // Write the nonces to the trace. for i in 0..trace.height() { let cols: &mut AddSubCols = diff --git a/crates/core/machine/src/alu/bitwise/mod.rs b/crates/core/machine/src/alu/bitwise/mod.rs index 556bd22dcc..463723ec12 100644 --- a/crates/core/machine/src/alu/bitwise/mod.rs +++ b/crates/core/machine/src/alu/bitwise/mod.rs @@ -19,7 +19,7 @@ use sp1_stark::{ Word, }; -use crate::utils::pad_to_power_of_two; +use crate::utils::pad_rows_fixed; /// The number of main trace columns for `BitwiseChip`. pub const NUM_BITWISE_COLS: usize = size_of::>(); @@ -74,7 +74,7 @@ impl MachineAir for BitwiseChip { input: &ExecutionRecord, _: &mut ExecutionRecord, ) -> RowMajorMatrix { - let rows = input + let mut rows = input .bitwise_events .par_iter() .map(|event| { @@ -86,13 +86,17 @@ impl MachineAir for BitwiseChip { }) .collect::>(); + // Pad the trace to a power of two. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_BITWISE_COLS], + input.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_BITWISE_COLS); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - for i in 0..trace.height() { let cols: &mut BitwiseCols = trace.values[i * NUM_BITWISE_COLS..(i + 1) * NUM_BITWISE_COLS].borrow_mut(); diff --git a/crates/core/machine/src/alu/divrem/mod.rs b/crates/core/machine/src/alu/divrem/mod.rs index 9beb1ddf13..01eceb51df 100644 --- a/crates/core/machine/src/alu/divrem/mod.rs +++ b/crates/core/machine/src/alu/divrem/mod.rs @@ -83,7 +83,7 @@ use crate::{ air::SP1CoreAirBuilder, alu::divrem::utils::{get_msb, get_quotient_and_remainder, is_signed_operation}, operations::{IsEqualWordOperation, IsZeroWordOperation}, - utils::pad_to_power_of_two, + utils::pad_rows_fixed, }; /// The number of main trace columns for `DivRemChip`. @@ -496,13 +496,17 @@ impl MachineAir for DivRemChip { rows.push(row); } + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_DIVREM_COLS], + input.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_DIVREM_COLS); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - // Create the template for the padded rows. These are fake rows that don't fail on some // sanity checks. let padded_row_template = { diff --git a/crates/core/machine/src/alu/lt/mod.rs b/crates/core/machine/src/alu/lt/mod.rs index 1ae8b47893..0c6804bc15 100644 --- a/crates/core/machine/src/alu/lt/mod.rs +++ b/crates/core/machine/src/alu/lt/mod.rs @@ -19,7 +19,7 @@ use sp1_stark::{ Word, }; -use crate::utils::pad_to_power_of_two; +use crate::utils::pad_rows_fixed; /// The number of main trace columns for `LtChip`. pub const NUM_LT_COLS: usize = size_of::>(); @@ -110,7 +110,7 @@ impl MachineAir for LtChip { _: &mut ExecutionRecord, ) -> RowMajorMatrix { // Generate the trace rows for each event. - let rows = input + let mut rows = input .lt_events .par_iter() .map(|event| { @@ -123,13 +123,17 @@ impl MachineAir for LtChip { }) .collect::>(); + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_LT_COLS], + input.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_LT_COLS); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - // Write the nonces to the trace. for i in 0..trace.height() { let cols: &mut LtCols = diff --git a/crates/core/machine/src/alu/mul/mod.rs b/crates/core/machine/src/alu/mul/mod.rs index 98dbc7a80e..abde41848b 100644 --- a/crates/core/machine/src/alu/mul/mod.rs +++ b/crates/core/machine/src/alu/mul/mod.rs @@ -47,7 +47,7 @@ use sp1_derive::AlignedBorrow; use sp1_primitives::consts::WORD_SIZE; use sp1_stark::{air::MachineAir, MachineRecord, Word}; -use crate::{air::SP1CoreAirBuilder, alu::mul::utils::get_msb, utils::pad_to_power_of_two}; +use crate::{air::SP1CoreAirBuilder, alu::mul::utils::get_msb, utils::pad_rows_fixed}; /// The number of main trace columns for `MulChip`. pub const NUM_MUL_COLS: usize = size_of::>(); @@ -267,13 +267,17 @@ impl MachineAir for MulChip { output.append(&mut row_and_record.1); } + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_MUL_COLS], + input.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MUL_COLS); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - // Write the nonces to the trace. for i in 0..trace.height() { let cols: &mut MulCols = diff --git a/crates/core/machine/src/alu/sll/mod.rs b/crates/core/machine/src/alu/sll/mod.rs index 50b3694073..78c2fd7612 100644 --- a/crates/core/machine/src/alu/sll/mod.rs +++ b/crates/core/machine/src/alu/sll/mod.rs @@ -49,7 +49,7 @@ use sp1_derive::AlignedBorrow; use sp1_primitives::consts::WORD_SIZE; use sp1_stark::{air::MachineAir, Word}; -use crate::{air::SP1CoreAirBuilder, utils::pad_to_power_of_two}; +use crate::{air::SP1CoreAirBuilder, utils::pad_rows_fixed}; /// The number of main trace columns for `ShiftLeft`. pub const NUM_SHIFT_LEFT_COLS: usize = size_of::>(); @@ -129,15 +129,19 @@ impl MachineAir for ShiftLeft { rows.push(row); } + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_SHIFT_LEFT_COLS], + input.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new( rows.into_iter().flatten().collect::>(), NUM_SHIFT_LEFT_COLS, ); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - // Create the template for the padded rows. These are fake rows that don't fail on some // sanity checks. let padded_row_template = { diff --git a/crates/core/machine/src/alu/sr/mod.rs b/crates/core/machine/src/alu/sr/mod.rs index 88ca2eacd4..a384bd34b2 100644 --- a/crates/core/machine/src/alu/sr/mod.rs +++ b/crates/core/machine/src/alu/sr/mod.rs @@ -65,7 +65,7 @@ use crate::{ air::SP1CoreAirBuilder, alu::sr::utils::{nb_bits_to_shift, nb_bytes_to_shift}, bytes::utils::shr_carry, - utils::pad_to_power_of_two, + utils::pad_rows_fixed, }; /// The number of main trace columns for `ShiftRightChip`. @@ -163,15 +163,19 @@ impl MachineAir for ShiftRightChip { rows.push(row); } + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_SHIFT_RIGHT_COLS], + input.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new( rows.into_iter().flatten().collect::>(), NUM_SHIFT_RIGHT_COLS, ); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - // Create the template for the padded rows. These are fake rows that don't fail on some // sanity checks. let padded_row_template = { diff --git a/crates/core/machine/src/cpu/trace.rs b/crates/core/machine/src/cpu/trace.rs index 5189d77747..534aa417d5 100644 --- a/crates/core/machine/src/cpu/trace.rs +++ b/crates/core/machine/src/cpu/trace.rs @@ -7,7 +7,7 @@ use sp1_core_executor::{ }, syscalls::SyscallCode, ByteOpcode::{self, U16Range}, - ExecutionRecord, Opcode, Program, + CoreShape, ExecutionRecord, Opcode, Program, Register::X0, }; use sp1_primitives::consts::WORD_SIZE; @@ -64,7 +64,7 @@ impl MachineAir for CpuChip { let mut trace = RowMajorMatrix::new(values, NUM_CPU_COLS); // Pad the trace to a power of two. - Self::pad_to_power_of_two::(&mut trace.values); + Self::pad_to_power_of_two::(self, &input.shape, &mut trace.values); trace } @@ -706,9 +706,15 @@ impl CpuChip { is_halt } - fn pad_to_power_of_two(values: &mut Vec) { + fn pad_to_power_of_two(&self, shape: &Option, values: &mut Vec) { let n_real_rows = values.len() / NUM_CPU_COLS; - let padded_nb_rows = if n_real_rows < 16 { 16 } else { n_real_rows.next_power_of_two() }; + let padded_nb_rows = if let Some(shape) = shape { + shape.shape[&MachineAir::::name(self)] + } else if n_real_rows < 16 { + 16 + } else { + n_real_rows.next_power_of_two() + }; values.resize(padded_nb_rows * NUM_CPU_COLS, F::zero()); // Interpret values as a slice of arrays of length `NUM_CPU_COLS` diff --git a/crates/core/machine/src/memory/global.rs b/crates/core/machine/src/memory/global.rs index 1581af53f0..a382d9855a 100644 --- a/crates/core/machine/src/memory/global.rs +++ b/crates/core/machine/src/memory/global.rs @@ -19,7 +19,7 @@ use sp1_stark::{ use crate::{ operations::{AssertLtColsBits, BabyBearBitDecomposition, IsZeroOperation}, - utils::pad_to_power_of_two, + utils::pad_rows_fixed, }; /// The type of memory chip that is being initialized. @@ -79,7 +79,7 @@ impl MachineAir for MemoryChip { }; memory_events.sort_by_key(|event| event.addr); - let rows: Vec<[F; NUM_MEMORY_INIT_COLS]> = (0..memory_events.len()) // OPT: change this to par_iter + let mut rows: Vec<[F; NUM_MEMORY_INIT_COLS]> = (0..memory_events.len()) // OPT: change this to par_iter .map(|i| { let MemoryInitializeFinalizeEvent { addr, value, shard, timestamp, used } = memory_events[i]; @@ -127,14 +127,14 @@ impl MachineAir for MemoryChip { }) .collect::>(); - let mut trace = RowMajorMatrix::new( - rows.into_iter().flatten().collect::>(), - NUM_MEMORY_INIT_COLS, + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_MEMORY_INIT_COLS], + input.fixed_log2_rows::(self), ); - pad_to_power_of_two::(&mut trace.values); - - trace + RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_MEMORY_INIT_COLS) } fn included(&self, shard: &Self::Record) -> bool { diff --git a/crates/core/machine/src/memory/program.rs b/crates/core/machine/src/memory/program.rs index 8f396fa7a5..2bbca1e8bf 100644 --- a/crates/core/machine/src/memory/program.rs +++ b/crates/core/machine/src/memory/program.rs @@ -6,14 +6,14 @@ use p3_air::{Air, AirBuilder, AirBuilderWithPublicValues, BaseAir, PairBuilder}; use p3_field::{AbstractField, PrimeField}; use p3_matrix::{dense::RowMajorMatrix, Matrix}; -use sp1_core_executor::{ExecutionRecord, Program}; +use sp1_core_executor::{CoreShape, ExecutionRecord, Program}; use sp1_derive::AlignedBorrow; use sp1_stark::{ air::{AirInteraction, MachineAir, PublicValues, SP1AirBuilder, SP1_PROOF_NUM_PV_ELTS}, InteractionKind, Word, }; -use crate::{operations::IsZeroOperation, utils::pad_to_power_of_two}; +use crate::{operations::IsZeroOperation, utils::pad_rows_fixed}; pub const NUM_MEMORY_PROGRAM_PREPROCESSED_COLS: usize = size_of::>(); @@ -70,7 +70,7 @@ impl MachineAir for MemoryProgramChip { let program_memory = program.memory_image.clone(); // Note that BTreeMap is guaranteed to be sorted by key. This makes the row order // deterministic. - let rows = program_memory + let mut rows = program_memory .into_iter() .map(|(addr, word)| { let mut row = [F::zero(); NUM_MEMORY_PROGRAM_PREPROCESSED_COLS]; @@ -82,15 +82,18 @@ impl MachineAir for MemoryProgramChip { }) .collect::>(); + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_MEMORY_PROGRAM_PREPROCESSED_COLS], + program.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. - let mut trace = RowMajorMatrix::new( + let trace = RowMajorMatrix::new( rows.into_iter().flatten().collect::>(), NUM_MEMORY_PROGRAM_PREPROCESSED_COLS, ); - - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - Some(trace) } @@ -108,7 +111,7 @@ impl MachineAir for MemoryProgramChip { let mult = if input.public_values.shard == 1 { F::one() } else { F::zero() }; // Generate the trace rows for each event. - let rows = program_memory_addrs + let mut rows = program_memory_addrs .into_iter() .map(|_| { let mut row = [F::zero(); NUM_MEMORY_PROGRAM_MULT_COLS]; @@ -119,16 +122,19 @@ impl MachineAir for MemoryProgramChip { }) .collect::>(); - // Convert the trace to a row major matrix. - let mut trace = RowMajorMatrix::new( - rows.into_iter().flatten().collect::>(), - NUM_MEMORY_PROGRAM_MULT_COLS, + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_MEMORY_PROGRAM_MULT_COLS], + input.shape.as_ref().map(|s: &CoreShape| s.shape[&MachineAir::::name(self)]), ); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); + // Convert the trace to a row major matrix. - trace + RowMajorMatrix::new( + rows.into_iter().flatten().collect::>(), + NUM_MEMORY_PROGRAM_MULT_COLS, + ) } fn included(&self, _: &Self::Record) -> bool { diff --git a/crates/core/machine/src/program/mod.rs b/crates/core/machine/src/program/mod.rs index dc8daf2d0f..4b4903d7fe 100644 --- a/crates/core/machine/src/program/mod.rs +++ b/crates/core/machine/src/program/mod.rs @@ -4,7 +4,7 @@ use core::{ }; use std::collections::HashMap; -use crate::air::ProgramAirBuilder; +use crate::{air::ProgramAirBuilder, utils::pad_rows_fixed}; use p3_air::{Air, BaseAir, PairBuilder}; use p3_field::PrimeField; use p3_matrix::{dense::RowMajorMatrix, Matrix}; @@ -12,10 +12,7 @@ use sp1_core_executor::{ExecutionRecord, Program}; use sp1_derive::AlignedBorrow; use sp1_stark::air::{MachineAir, SP1AirBuilder}; -use crate::{ - cpu::columns::{InstructionCols, OpcodeSelectorCols}, - utils::pad_to_power_of_two, -}; +use crate::cpu::columns::{InstructionCols, OpcodeSelectorCols}; /// The number of preprocessed program columns. pub const NUM_PROGRAM_PREPROCESSED_COLS: usize = size_of::>(); @@ -65,7 +62,7 @@ impl MachineAir for ProgramChip { fn generate_preprocessed_trace(&self, program: &Self::Program) -> Option> { debug_assert!(!program.instructions.is_empty(), "empty program"); - let rows = program + let mut rows = program .instructions .clone() .into_iter() @@ -82,15 +79,19 @@ impl MachineAir for ProgramChip { }) .collect::>(); + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_PROGRAM_PREPROCESSED_COLS], + program.fixed_log2_rows::(self), + ); + // Convert the trace to a row major matrix. - let mut trace = RowMajorMatrix::new( + let trace = RowMajorMatrix::new( rows.into_iter().flatten().collect::>(), NUM_PROGRAM_PREPROCESSED_COLS, ); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - Some(trace) } @@ -113,7 +114,7 @@ impl MachineAir for ProgramChip { instruction_counts.entry(pc).and_modify(|count| *count += 1).or_insert(1); }); - let rows = input + let mut rows = input .program .instructions .clone() @@ -130,16 +131,14 @@ impl MachineAir for ProgramChip { }) .collect::>(); - // Convert the trace to a row major matrix. - let mut trace = RowMajorMatrix::new( - rows.into_iter().flatten().collect::>(), - NUM_PROGRAM_MULT_COLS, + // Pad the trace to a power of two depending on the proof shape in `input`. + pad_rows_fixed( + &mut rows, + || [F::zero(); NUM_PROGRAM_MULT_COLS], + input.fixed_log2_rows::(self), ); - // Pad the trace to a power of two. - pad_to_power_of_two::(&mut trace.values); - - trace + RowMajorMatrix::new(rows.into_iter().flatten().collect::>(), NUM_PROGRAM_MULT_COLS) } fn included(&self, _: &Self::Record) -> bool { @@ -207,6 +206,7 @@ mod tests { pc_start: 0, pc_base: 0, memory_image: BTreeMap::new(), + preprocessed_shape: None, }), ..Default::default() }; From 055d84c917f81f951fda1ef33303d938f48fa8a0 Mon Sep 17 00:00:00 2001 From: Tamir Hemo Date: Wed, 4 Sep 2024 09:49:54 -0700 Subject: [PATCH 164/268] feat: fixed shapes in precompiles (#1476) --- .../src/syscall/precompiles/edwards/ed_add.rs | 38 +++++++++-------- .../precompiles/edwards/ed_decompress.rs | 20 +++++---- .../src/syscall/precompiles/fptower/fp.rs | 38 +++++++++-------- .../syscall/precompiles/fptower/fp2_addsub.rs | 42 ++++++++++--------- .../syscall/precompiles/fptower/fp2_mul.rs | 38 +++++++++-------- .../precompiles/sha256/compress/trace.rs | 8 +++- .../src/syscall/precompiles/uint256/air.rs | 22 ++++++---- .../weierstrass/weierstrass_add.rs | 40 ++++++++++-------- .../weierstrass/weierstrass_decompress.rs | 36 +++++++++------- .../weierstrass/weierstrass_double.rs | 22 ++++++---- crates/core/machine/src/utils/mod.rs | 19 +++------ 11 files changed, 178 insertions(+), 145 deletions(-) diff --git a/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs b/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs index 78633e269d..1c80bdd119 100644 --- a/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs +++ b/crates/core/machine/src/syscall/precompiles/edwards/ed_add.rs @@ -31,7 +31,7 @@ use crate::{ operations::field::{ field_den::FieldDenCols, field_inner_product::FieldInnerProductCols, field_op::FieldOpCols, }, - utils::{limbs_from_prev_access, pad_rows}, + utils::{limbs_from_prev_access, pad_rows_fixed}, }; pub const NUM_ED_ADD_COLS: usize = size_of::>(); @@ -137,22 +137,26 @@ impl MachineAir for Ed }) .collect::>(); - pad_rows(&mut rows, || { - let mut row = [F::zero(); NUM_ED_ADD_COLS]; - let cols: &mut EdAddAssignCols = row.as_mut_slice().borrow_mut(); - let zero = BigUint::zero(); - Self::populate_field_ops( - &mut vec![], - 0, - 0, - cols, - zero.clone(), - zero.clone(), - zero.clone(), - zero, - ); - row - }); + pad_rows_fixed( + &mut rows, + || { + let mut row = [F::zero(); NUM_ED_ADD_COLS]; + let cols: &mut EdAddAssignCols = row.as_mut_slice().borrow_mut(); + let zero = BigUint::zero(); + Self::populate_field_ops( + &mut vec![], + 0, + 0, + cols, + zero.clone(), + zero.clone(), + zero.clone(), + zero, + ); + row + }, + input.fixed_log2_rows::(self), + ); // Convert the trace to a row major matrix. let mut trace = diff --git a/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs b/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs index 63a73b2f0b..0a2ee19f68 100644 --- a/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs +++ b/crates/core/machine/src/syscall/precompiles/edwards/ed_decompress.rs @@ -29,7 +29,7 @@ use typenum::U32; use crate::{ memory::{MemoryReadCols, MemoryWriteCols}, operations::field::{field_op::FieldOpCols, field_sqrt::FieldSqrtCols, range::FieldLtCols}, - utils::{limbs_from_access, limbs_from_prev_access, pad_rows}, + utils::{limbs_from_access, limbs_from_prev_access, pad_rows_fixed}, }; pub const NUM_ED_DECOMPRESS_COLS: usize = size_of::>(); @@ -273,13 +273,17 @@ impl MachineAir for EdDecompressChip = row.as_mut_slice().borrow_mut(); - let zero = BigUint::zero(); - cols.populate_field_ops::(&mut vec![], 0, 0, &zero); - row - }); + pad_rows_fixed( + &mut rows, + || { + let mut row = [F::zero(); NUM_ED_DECOMPRESS_COLS]; + let cols: &mut EdDecompressCols = row.as_mut_slice().borrow_mut(); + let zero = BigUint::zero(); + cols.populate_field_ops::(&mut vec![], 0, 0, &zero); + row + }, + input.fixed_log2_rows::(self), + ); let mut trace = RowMajorMatrix::new( rows.into_iter().flatten().collect::>(), diff --git a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs index 35a04f8238..b22518cce2 100644 --- a/crates/core/machine/src/syscall/precompiles/fptower/fp.rs +++ b/crates/core/machine/src/syscall/precompiles/fptower/fp.rs @@ -26,7 +26,7 @@ use sp1_stark::air::{BaseAirBuilder, MachineAir, Polynomial, SP1AirBuilder}; use crate::{ memory::{value_as_limbs, MemoryReadCols, MemoryWriteCols}, operations::field::field_op::FieldOpCols, - utils::{limbs_from_prev_access, pad_rows, words_to_bytes_le_vec}, + utils::{limbs_from_prev_access, pad_rows_fixed, words_to_bytes_le_vec}, }; pub const fn num_fp_cols() -> usize { @@ -148,22 +148,26 @@ impl MachineAir for FpOpChip