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