Skip to content

Commit ed996d3

Browse files
committed
Add basic size calculation
1 parent ffa6d7c commit ed996d3

File tree

2 files changed

+96
-15
lines changed

2 files changed

+96
-15
lines changed

spartan_parallel/src/lib.rs

Lines changed: 95 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,66 @@ impl<S: SpartanExtensionField> SNARK<S> {
648648
b"Spartan SNARK proof"
649649
}
650650

651+
// Computes proof size by commitment / non-commitment
652+
fn compute_size(&self) -> (usize, usize, usize) {
653+
/*
654+
let commit_size = bincode::serialize(&self.block_comm_vars_list).unwrap().len()
655+
+ bincode::serialize(&self.exec_comm_inputs).unwrap().len()
656+
+ bincode::serialize(&self.addr_comm_phy_mems).unwrap().len()
657+
+ bincode::serialize(&self.addr_comm_phy_mems_shifted).unwrap().len()
658+
+ bincode::serialize(&self.addr_comm_vir_mems).unwrap().len()
659+
+ bincode::serialize(&self.addr_comm_vir_mems_shifted).unwrap().len()
660+
+ bincode::serialize(&self.addr_comm_ts_bits).unwrap().len()
661+
662+
+ bincode::serialize(&self.perm_exec_comm_w2_list).unwrap().len()
663+
+ bincode::serialize(&self.perm_exec_comm_w3_list).unwrap().len()
664+
+ bincode::serialize(&self.perm_exec_comm_w3_shifted).unwrap().len()
665+
666+
+ bincode::serialize(&self.block_comm_w2_list).unwrap().len()
667+
+ bincode::serialize(&self.block_comm_w3_list).unwrap().len()
668+
+ bincode::serialize(&self.block_comm_w3_list_shifted).unwrap().len()
669+
670+
+ bincode::serialize(&self.init_phy_mem_comm_w2).unwrap().len()
671+
+ bincode::serialize(&self.init_phy_mem_comm_w3).unwrap().len()
672+
+ bincode::serialize(&self.init_phy_mem_comm_w3_shifted).unwrap().len()
673+
674+
+ bincode::serialize(&self.init_vir_mem_comm_w2).unwrap().len()
675+
+ bincode::serialize(&self.init_vir_mem_comm_w3).unwrap().len()
676+
+ bincode::serialize(&self.init_vir_mem_comm_w3_shifted).unwrap().len()
677+
678+
+ bincode::serialize(&self.phy_mem_addr_comm_w2).unwrap().len()
679+
+ bincode::serialize(&self.phy_mem_addr_comm_w3).unwrap().len()
680+
+ bincode::serialize(&self.phy_mem_addr_comm_w3_shifted).unwrap().len()
681+
682+
+ bincode::serialize(&self.vir_mem_addr_comm_w2).unwrap().len()
683+
+ bincode::serialize(&self.vir_mem_addr_comm_w3).unwrap().len()
684+
+ bincode::serialize(&self.vir_mem_addr_comm_w3_shifted).unwrap().len();
685+
*/
686+
let dense_commit_size = 0;
687+
688+
let sparse_commit_size = bincode::serialize(&self.block_r1cs_eval_proof_list).unwrap().len()
689+
+ bincode::serialize(&self.pairwise_check_r1cs_eval_proof).unwrap().len()
690+
+ bincode::serialize(&self.perm_root_r1cs_eval_proof).unwrap().len()
691+
+ bincode::serialize(&self.proof_eval_perm_poly_prod_list).unwrap().len();
692+
693+
let noncommit_size = bincode::serialize(&self.block_r1cs_sat_proof).unwrap().len()
694+
+ bincode::serialize(&self.block_inst_evals_bound_rp).unwrap().len()
695+
+ bincode::serialize(&self.block_inst_evals_list).unwrap().len()
696+
697+
+ bincode::serialize(&self.pairwise_check_r1cs_sat_proof).unwrap().len()
698+
+ bincode::serialize(&self.pairwise_check_inst_evals_bound_rp).unwrap().len()
699+
+ bincode::serialize(&self.pairwise_check_inst_evals_list).unwrap().len()
700+
701+
+ bincode::serialize(&self.perm_root_r1cs_sat_proof).unwrap().len()
702+
+ bincode::serialize(&self.perm_root_inst_evals).unwrap().len()
703+
704+
+ bincode::serialize(&self.perm_poly_poly_list).unwrap().len()
705+
706+
// + bincode::serialize(&self.shift_proof).unwrap().len()
707+
+ bincode::serialize(&self.io_proof).unwrap().len();
708+
(dense_commit_size, sparse_commit_size, noncommit_size)
709+
}
710+
651711
/// A public computation to create a commitment to a list of R1CS instances
652712
pub fn multi_encode(
653713
inst: &Instance<S>,
@@ -1831,6 +1891,35 @@ impl<S: SpartanExtensionField> SNARK<S> {
18311891
};
18321892
timer_commit.stop();
18331893

1894+
// Record total size of witnesses:
1895+
let block_witness_sizes: Vec<usize> = [
1896+
block_vars_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1897+
block_w2_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1898+
block_w3_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1899+
block_w3_shifted_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>()
1900+
].concat();
1901+
let exec_witness_sizes: Vec<usize> = [
1902+
exec_inputs_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1903+
perm_exec_w2_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1904+
perm_exec_w3_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1905+
perm_exec_w3_shifted_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1906+
].concat();
1907+
let mem_witness_sizes: Vec<usize> = [
1908+
addr_phy_mems_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1909+
phy_mem_addr_w2_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1910+
phy_mem_addr_w3_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1911+
phy_mem_addr_w3_shifted_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1912+
addr_vir_mems_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1913+
addr_ts_bits_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1914+
vir_mem_addr_w2_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1915+
vir_mem_addr_w3_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1916+
vir_mem_addr_w3_shifted_prover.poly_w.iter().map(|i| i.len()).collect::<Vec<usize>>(),
1917+
].concat();
1918+
1919+
println!("BLOCK WITNESSES: {:?} Goldilocks", block_witness_sizes);
1920+
println!("EXEC WITNESSES: {:?} Goldilocks", exec_witness_sizes);
1921+
println!("MEM WITNESSES: {:?} Goldilocks", mem_witness_sizes);
1922+
18341923
// --
18351924
// BLOCK_CORRECTNESS_EXTRACT
18361925
// --
@@ -2368,14 +2457,8 @@ impl<S: SpartanExtensionField> SNARK<S> {
23682457

23692458
transcript: &mut Transcript,
23702459
) -> Result<(), ProofVerifyError> {
2371-
let proof_size = bincode::serialize(&self).unwrap().len();
2372-
let commit_size = bincode::serialize(&block_comm_list).unwrap().len() +
2373-
// bincode::serialize(&block_gens).unwrap().len() +
2374-
bincode::serialize(&pairwise_check_comm).unwrap().len() +
2375-
// bincode::serialize(&pairwise_check_gens).unwrap().len() +
2376-
bincode::serialize(&perm_root_comm).unwrap().len();
2377-
// bincode::serialize(&perm_root_gens).unwrap().len();
2378-
let meta_size =
2460+
let (_, _, sumcheck_size) = self.compute_size();
2461+
let meta_size =
23792462
// usize
23802463
19 * std::mem::size_of::<usize>() +
23812464
// Vec<usize> or Vec<Vec<usize>>
@@ -2387,8 +2470,8 @@ impl<S: SpartanExtensionField> SNARK<S> {
23872470
// Other vectors
23882471
bincode::serialize(input).unwrap().len() +
23892472
bincode::serialize(output).unwrap().len();
2390-
// Everything else
2391-
// bincode::serialize(vars_gens).unwrap().len();
2473+
// Everything else
2474+
// bincode::serialize(vars_gens).unwrap().len();
23922475

23932476
let timer_verify = Timer::new("SNARK::verify");
23942477
<Transcript as ProofTranscript<S>>::append_protocol_name(
@@ -3288,10 +3371,8 @@ impl<S: SpartanExtensionField> SNARK<S> {
32883371

32893372
timer_verify.stop();
32903373

3291-
println!("PROOF SIZE: {}", proof_size);
3292-
println!("COMMIT SIZE: {}", commit_size);
3293-
println!("META SIZE: {}", meta_size);
3294-
println!("Total Proof Size: {}", proof_size + commit_size + meta_size);
3374+
println!("SUMCHECK SIZE: {} bytes", sumcheck_size);
3375+
println!("META SIZE: {} bytes", meta_size);
32953376

32963377
Ok(())
32973378
}

zok_tests/benchmarks/poseidon_test/poseidon_struct.zok

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1683,4 +1683,4 @@ def main() -> field:
16831683
cumulated_hash = cumulated_hash + hashes.state0 + hashes.state1 + hashes.state2 + hashes.state3 + hashes.state4 + hashes.state5 + hashes.state6 + hashes.state7 + hashes.state8 + hashes.state9 + hashes.state10 + hashes.state11
16841684
endfor
16851685

1686-
return cumulated_hash
1686+
return cumulated_hash

0 commit comments

Comments
 (0)