@@ -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 }
0 commit comments