From 248de242839e7006e76c4446b78240a96ec6d204 Mon Sep 17 00:00:00 2001 From: Shuang Wu Date: Mon, 23 Sep 2024 11:46:13 +0300 Subject: [PATCH] clean a bit the code --- backend/src/stwo/circuit_builder.rs | 43 ++++++++++------------------- backend/src/stwo/prover.rs | 28 +++++++++++++------ 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/backend/src/stwo/circuit_builder.rs b/backend/src/stwo/circuit_builder.rs index f4493d682..bf3a2a230 100644 --- a/backend/src/stwo/circuit_builder.rs +++ b/backend/src/stwo/circuit_builder.rs @@ -122,8 +122,8 @@ pub fn generate_stwo_trace(witness: &[(String, Vec)], log_n_instances: u32 }) }) .collect(); // Collect the flattened iterator into a Vec. - println!("from generate stwo trace trace"); - println!("{:?}", trace); + // println!("from generate stwo trace trace"); + //println!("{:?}", trace); let mut trace_stwo= (0..2) .map(|_| Col::::zeros(1 << 5)) @@ -149,7 +149,7 @@ pub fn generate_stwo_trace(witness: &[(String, Vec)], log_n_instances: u32 } -pub fn generate_parallel_stwo_trace_by_witness_repitition(witness: &[(String, Vec)], log_n_instances: u32 +pub fn generate_parallel_stwo_trace_by_witness_repitition(length: usize, witness: &[(String, Vec)], log_n_instances: u32 )-> ColumnVec> { let trace: Vec = witness @@ -187,41 +187,26 @@ pub fn generate_parallel_stwo_trace_by_witness_repitition(witness: &[( .collect(); // Collect the flattened iterator into a Vec - println!("from generate stwo trace trace"); - println!("{:?}", trace); + // println!("from generate stwo trace trace"); + // println!("{:?}", trace); - let mut trace_stwo= (0..6)//fibonacci length + let mut trace_stwo= (0..length)//fibonacci length .map(|_| Col::::zeros(1 << log_n_instances)) .collect_vec(); // column x - trace_stwo[0].data[0]= trace[0]; - trace_stwo[0].data[1]= trace[1]; - - println!("from generate stwo trace trace 64 ......"); - println!("{:?}", trace[64]); - - println!("from generate stwo trace trace 65 ......"); - println!("{:?}", trace[65]); - - trace_stwo[1].data[0]= trace[64]; - trace_stwo[1].data[1]= trace[65]; + trace_stwo[0].data[0]= trace[0]; //x + trace_stwo[0].data[1]= trace[1]; //y - trace_stwo[2].data[0]= trace[66]; - trace_stwo[2].data[1]= trace[67]; - trace_stwo[3].data[0]= trace[68]; - trace_stwo[3].data[1]= trace[69]; - - trace_stwo[4].data[0]= trace[70]; - trace_stwo[4].data[1]= trace[71]; - - trace_stwo[5].data[0]= trace[72]; - trace_stwo[5].data[1]= trace[73]; + for i in 1..length { + trace_stwo[i].data[0] = trace[2*length + 2 * (i - 1)]; + trace_stwo[i].data[1] = trace[2*length + 2 * (i - 1) + 1]; + } - println!("from generate stwo trace trace_stwo repititions"); - println!("{:?}", trace_stwo); + // println!("from generate stwo trace trace_stwo repititions"); + // println!("{:?}", trace_stwo); let domain = CanonicCoset::new(5).circle_domain(); trace_stwo diff --git a/backend/src/stwo/prover.rs b/backend/src/stwo/prover.rs index c796b2970..af891d84d 100644 --- a/backend/src/stwo/prover.rs +++ b/backend/src/stwo/prover.rs @@ -41,6 +41,9 @@ use stwo_prover::core::pcs::{CommitmentSchemeProver, CommitmentSchemeVerifier, P use stwo_prover::core::poly::circle::{CanonicCoset, CircleEvaluation, PolyOps}; use stwo_prover::core::vcs::blake2_merkle::Blake2sMerkleChannel; + + + // We use two different EVM verifier libraries. // 1. snark_verifier: supports single SNARK verification as well as aggregated proof verification. // However the generated smart contract code size is often larger than the limit on Ethereum for complex VMs. @@ -136,7 +139,7 @@ impl StwoProver { ) { const LOG_N_INSTANCES: u32 = 5; - const FIB_SEQUENCE_LENGTH: usize=6; + const FIB_SEQUENCE_LENGTH: usize=262144; @@ -160,12 +163,20 @@ impl StwoProver { let circuit = PowdrCircuit::new(&self.analyzed) .with_witgen_callback(witgen_callback) .with_witness(witness); - print!("witness from powdr {:?}", witness ); + // print!("witness from powdr {:?}", witness ); + + let fibonacci_y_length = witness + .iter() + .find(|(key, _)| key == "Fibonacci::y") + .map(|(_, values)| values.len()) + .unwrap_or(0); + + //let trace = generate_stwo_trace(witness,LOG_N_INSTANCES); - let trace=generate_parallel_stwo_trace_by_witness_repitition(witness, LOG_N_INSTANCES); + let trace=generate_parallel_stwo_trace_by_witness_repitition(fibonacci_y_length, witness, LOG_N_INSTANCES); - println!("this is from the generate stwo trace in repitition \n {:?}",generate_parallel_stwo_trace_by_witness_repitition(witness,LOG_N_INSTANCES)); + let mut tree_builder = commitment_scheme.tree_builder(); tree_builder.extend_evals(trace); @@ -186,10 +197,10 @@ impl StwoProver { println!("created component!"); - println!("component eval is like this \n {} ",component.log_n_rows); + // println!("component eval is like this \n {} ",component.log_n_rows); - + let start = Instant::now(); let proof = stwo_prover::core::prover::prove::( &[&component], prover_channel, @@ -198,6 +209,9 @@ impl StwoProver { .unwrap(); println!("proof generated!"); + let duration = start.elapsed(); + + println!("proving time for fibo length of {:?} is {:?}",fibonacci_y_length, duration); // Verify. let verifier_channel = &mut Blake2sChannel::default(); @@ -209,8 +223,6 @@ impl StwoProver { stwo_prover::core::prover::verify(&[&component], verifier_channel, commitment_scheme, proof).unwrap(); - - println!("{:?}", witness);