11use  crate :: basefold_verifier:: basefold:: BasefoldCommitment ; 
2- use  crate :: basefold_verifier:: query_phase:: QueryPhaseVerifierInput ; 
3- use  crate :: tower_verifier:: binding:: IOPProverMessage ; 
2+ use  crate :: tower_verifier:: binding:: { IOPProverMessage ,  IOPProverMessageVec } ; 
43use  crate :: zkvm_verifier:: binding:: { 
54    GKRProofInput ,  LayerProofInput ,  SumcheckLayerProofInput ,  TowerProofInput ,  ZKVMChipProofInput , 
65    ZKVMProofInput ,  E ,  F , 
76} ; 
8- use  crate :: zkvm_verifier:: verifier:: { verify_gkr_circuit,  verify_zkvm_proof} ; 
7+ 
8+ use  crate :: zkvm_verifier:: verifier:: verify_zkvm_proof; 
99use  ceno_mle:: util:: ceil_log2; 
10- use  ceno_transcript:: BasicTranscript ; 
10+ use  ceno_zkvm:: scheme:: ZKVMProof ; 
11+ use  ceno_zkvm:: structs:: ZKVMVerifyingKey ; 
1112use  ff_ext:: BabyBearExt4 ; 
12- use  gkr_iop:: gkr:: { 
13-     layer:: sumcheck_layer:: { SumcheckLayer ,  SumcheckLayerProof } , 
14-     GKRCircuit , 
15- } ; 
16- use  itertools:: Itertools ; 
1713use  mpcs:: { Basefold ,  BasefoldRSParams } ; 
18- use  openvm_circuit:: arch:: { 
19-     instructions:: program:: Program ,  verify_single,  SystemConfig ,  VirtualMachine ,  VmExecutor , 
20- } ; 
21- use  openvm_native_circuit:: { Native ,  NativeConfig } ; 
14+ use  openvm_circuit:: arch:: instructions:: program:: Program ; 
2215use  openvm_native_compiler:: { 
2316    asm:: AsmBuilder , 
2417    conversion:: { convert_program,  CompilerOptions } , 
2518    prelude:: AsmCompiler , 
2619} ; 
2720use  openvm_native_recursion:: hints:: Hintable ; 
2821use  openvm_stark_backend:: config:: StarkGenericConfig ; 
29- use  openvm_stark_sdk:: { 
30-     config:: { 
31-         baby_bear_poseidon2:: { BabyBearPoseidon2Config ,  BabyBearPoseidon2Engine } , 
32-         fri_params:: standard_fri_params_with_100_bits_conjectured_security, 
33-         setup_tracing_with_log_level,  FriParameters , 
34-     } , 
35-     engine:: StarkFriEngine , 
36-     p3_baby_bear:: BabyBear , 
37- } ; 
38- use  std:: fs:: File ; 
22+ use  openvm_stark_sdk:: config:: baby_bear_poseidon2:: BabyBearPoseidon2Config ; 
3923
4024type  SC  = BabyBearPoseidon2Config ; 
4125type  EF  = <SC  as  StarkGenericConfig >:: Challenge ; 
4226
43- use  ceno_zkvm:: { 
44-     scheme:: { verifier:: ZKVMVerifier ,  ZKVMProof } , 
45-     structs:: { ComposedConstrainSystem ,  ZKVMVerifyingKey } , 
46- } ; 
47- 
4827pub  fn  parse_zkvm_proof_import ( 
4928    zkvm_proof :  ZKVMProof < BabyBearExt4 ,  Basefold < BabyBearExt4 ,  BasefoldRSParams > > , 
5029    vk :  & ZKVMVerifyingKey < BabyBearExt4 ,  Basefold < BabyBearExt4 ,  BasefoldRSParams > > , 
@@ -112,10 +91,11 @@ pub fn parse_zkvm_proof_import(
11291
11392        // Tower proof 
11493        let  mut  tower_proof = TowerProofInput :: default ( ) ; 
115-         let  mut  proofs:  Vec < Vec < IOPProverMessage > >  = vec ! [ ] ; 
94+         let  mut  proofs:  Vec < IOPProverMessageVec >  = vec ! [ ] ; 
11695
11796        for  proof in  & chip_proof. tower_proof . proofs  { 
118-             let  mut  proof_messages:  Vec < IOPProverMessage >  = vec ! [ ] ; 
97+             let  mut  proof_messages:  Vec < E >  = vec ! [ ] ; 
98+             let  mut  prover_message_size = None ; 
11999            for  m in  proof { 
120100                let  mut  evaluations_vec:  Vec < E >  = vec ! [ ] ; 
121101
@@ -124,11 +104,17 @@ pub fn parse_zkvm_proof_import(
124104                        serde_json:: from_value ( serde_json:: to_value ( v. clone ( ) ) . unwrap ( ) ) . unwrap ( ) ; 
125105                    evaluations_vec. push ( v_e) ; 
126106                } 
127-                 proof_messages. push ( IOPProverMessage  { 
128-                     evaluations :  evaluations_vec, 
129-                 } ) ; 
107+                 if  let  Some ( size)  = prover_message_size { 
108+                     assert_eq ! ( size,  evaluations_vec. len( ) ) ; 
109+                 }  else  { 
110+                     prover_message_size = Some ( evaluations_vec. len ( ) ) ; 
111+                 } 
112+                 proof_messages. extend_from_slice ( & evaluations_vec) ; 
130113            } 
131-             proofs. push ( proof_messages) ; 
114+             proofs. push ( IOPProverMessageVec  { 
115+                 prover_message_size :  prover_message_size. unwrap ( ) , 
116+                 data :  proof_messages, 
117+             } ) ; 
132118        } 
133119        tower_proof. num_proofs  = proofs. len ( ) ; 
134120        tower_proof. proofs  = proofs; 
@@ -149,7 +135,7 @@ pub fn parse_zkvm_proof_import(
149135            prod_specs_eval. push ( inner_v) ; 
150136        } 
151137        tower_proof. num_prod_specs  = prod_specs_eval. len ( ) ; 
152-         tower_proof. prod_specs_eval  = prod_specs_eval; 
138+         tower_proof. prod_specs_eval  = prod_specs_eval. into ( ) ; 
153139
154140        let  mut  logup_specs_eval:  Vec < Vec < Vec < E > > >  = vec ! [ ] ; 
155141        for  inner_val in  & chip_proof. tower_proof . logup_specs_eval  { 
@@ -167,23 +153,36 @@ pub fn parse_zkvm_proof_import(
167153            logup_specs_eval. push ( inner_v) ; 
168154        } 
169155        tower_proof. num_logup_specs  = logup_specs_eval. len ( ) ; 
170-         tower_proof. logup_specs_eval  = logup_specs_eval; 
156+         tower_proof. logup_specs_eval  = logup_specs_eval. into ( ) ; 
171157
172158        // main constraint and select sumcheck proof 
173-         let  mut  main_sumcheck_proofs:  Vec < IOPProverMessage >  = vec ! [ ] ; 
174-         if  chip_proof. main_sumcheck_proofs . is_some ( )  { 
159+         let  main_sumcheck_proofs = if  chip_proof. main_sumcheck_proofs . is_some ( )  { 
160+             let  mut  main_sumcheck_proofs:  Vec < E >  = vec ! [ ] ; 
161+             let  mut  prover_message_size = None ; 
175162            for  m in  chip_proof. main_sumcheck_proofs . as_ref ( ) . unwrap ( )  { 
176163                let  mut  evaluations_vec:  Vec < E >  = vec ! [ ] ; 
177164                for  v in  & m. evaluations  { 
178165                    let  v_e:  E  =
179166                        serde_json:: from_value ( serde_json:: to_value ( v. clone ( ) ) . unwrap ( ) ) . unwrap ( ) ; 
180167                    evaluations_vec. push ( v_e) ; 
181168                } 
182-                 main_sumcheck_proofs. push ( IOPProverMessage  { 
183-                     evaluations :  evaluations_vec, 
184-                 } ) ; 
169+                 main_sumcheck_proofs. extend_from_slice ( & evaluations_vec) ; 
170+                 if  let  Some ( size)  = prover_message_size { 
171+                     assert_eq ! ( size,  evaluations_vec. len( ) ) ; 
172+                 }  else  { 
173+                     prover_message_size = Some ( evaluations_vec. len ( ) ) ; 
174+                 } 
185175            } 
186-         } 
176+             IOPProverMessageVec  { 
177+                 prover_message_size :  prover_message_size. unwrap ( ) , 
178+                 data :  main_sumcheck_proofs, 
179+             } 
180+         }  else  { 
181+             IOPProverMessageVec  { 
182+                 prover_message_size :  0 , 
183+                 data :  vec ! [ ] , 
184+             } 
185+         } ; 
187186
188187        let  mut  wits_in_evals:  Vec < E >  = vec ! [ ] ; 
189188        for  v in  & chip_proof. wits_in_evals  { 
@@ -242,7 +241,7 @@ pub fn parse_zkvm_proof_import(
242241                    ( 
243242                        1 , 
244243                        SumcheckLayerProofInput  { 
245-                             proof :  iop_messages, 
244+                             proof :  iop_messages. into ( ) , 
246245                            evals, 
247246                        } , 
248247                    ) 
@@ -270,7 +269,7 @@ pub fn parse_zkvm_proof_import(
270269                } 
271270
272271                let  main = SumcheckLayerProofInput  { 
273-                     proof :  iop_messages, 
272+                     proof :  iop_messages. into ( ) , 
274273                    evals, 
275274                } ; 
276275
0 commit comments