@@ -31,7 +31,7 @@ use openvm_continuations::{
3131} ;
3232#[ cfg( feature = "gpu" ) ]
3333use openvm_cuda_backend:: engine:: GpuBabyBearPoseidon2Engine as BabyBearPoseidon2Engine ;
34- use openvm_native_circuit:: { NativeBuilder , NativeConfig } ;
34+ use openvm_native_circuit:: { NativeBuilder , NativeConfig , NativeCpuBuilder } ;
3535use openvm_native_compiler:: {
3636 asm:: AsmBuilder ,
3737 conversion:: { CompilerOptions , convert_program} ,
@@ -52,6 +52,7 @@ use openvm_stark_sdk::config::baby_bear_poseidon2::BabyBearPoseidon2Engine;
5252use openvm_stark_sdk:: {
5353 config:: {
5454 FriParameters , baby_bear_poseidon2:: BabyBearPoseidon2Config ,
55+ baby_bear_poseidon2_root:: BabyBearPoseidon2RootEngine ,
5556 fri_params:: standard_fri_params_with_100_bits_conjectured_security,
5657 } ,
5758 engine:: StarkFriEngine ,
@@ -70,7 +71,6 @@ use openvm_native_compiler::{
7071} ;
7172use openvm_sdk:: util:: check_max_constraint_degrees;
7273use openvm_stark_backend:: proof:: Proof ;
73- use openvm_stark_sdk:: config:: baby_bear_poseidon2_root:: BabyBearPoseidon2RootEngine ;
7474
7575mod internal;
7676mod root;
@@ -91,7 +91,7 @@ const VM_MAX_TRACE_HEIGHTS: &[u32] = &[
9191pub struct CenoAggregationProver {
9292 pub leaf_prover : VmInstance < BabyBearPoseidon2Engine , NativeBuilder > ,
9393 pub internal_prover : VmInstance < BabyBearPoseidon2Engine , NativeBuilder > ,
94- pub root_prover : VmInstance < BabyBearPoseidon2RootEngine , NativeBuilder > ,
94+ pub root_prover : VmInstance < BabyBearPoseidon2RootEngine , NativeCpuBuilder > ,
9595 pub vk : CenoRecursionVerifierKeys < BabyBearPoseidon2Config > ,
9696 pub pk : CenoRecursionProvingKeys < BabyBearPoseidon2Config , NativeConfig > ,
9797}
@@ -100,7 +100,7 @@ impl CenoAggregationProver {
100100 pub fn new (
101101 leaf_prover : VmInstance < BabyBearPoseidon2Engine , NativeBuilder > ,
102102 internal_prover : VmInstance < BabyBearPoseidon2Engine , NativeBuilder > ,
103- root_prover : VmInstance < BabyBearPoseidon2RootEngine , NativeBuilder > ,
103+ root_prover : VmInstance < BabyBearPoseidon2RootEngine , NativeCpuBuilder > ,
104104 pk : CenoRecursionProvingKeys < BabyBearPoseidon2Config , NativeConfig > ,
105105 ) -> Self {
106106 Self {
@@ -242,9 +242,12 @@ impl CenoAggregationProver {
242242
243243 let mut root_engine = BabyBearPoseidon2RootEngine :: new ( root_fri_params) ;
244244 root_engine. max_constraint_degree = ROOT_MAX_CONSTRAINT_DEG ;
245- let ( root_vm, root_vm_pk) =
246- VirtualMachine :: new_with_keygen ( root_engine, vb. clone ( ) , root_vm_config. clone ( ) )
247- . expect ( "root keygen" ) ;
245+ let ( root_vm, root_vm_pk) = VirtualMachine :: < _ , NativeCpuBuilder > :: new_with_keygen (
246+ root_engine,
247+ Default :: default ( ) ,
248+ root_vm_config. clone ( ) ,
249+ )
250+ . expect ( "root keygen" ) ;
248251 let root_program = CenoRootVmVerifierConfig {
249252 leaf_fri_params,
250253 internal_fri_params,
@@ -263,8 +266,8 @@ impl CenoAggregationProver {
263266 vm_config : root_vm_config,
264267 vm_pk : root_vm_pk,
265268 } ) ;
266- let root_prover = new_local_prover :: < BabyBearPoseidon2RootEngine , NativeBuilder > (
267- vb . clone ( ) ,
269+ let root_prover = new_local_prover :: < BabyBearPoseidon2RootEngine , NativeCpuBuilder > (
270+ Default :: default ( ) ,
268271 & root_vm_pk,
269272 root_committed_exe. exe . clone ( ) ,
270273 )
@@ -416,12 +419,17 @@ impl CenoAggregationProver {
416419 public_values : user_public_values,
417420 } ;
418421
422+ let root_start_timestamp = Instant :: now ( ) ;
419423 let root_proof = SingleSegmentVmProver :: prove (
420424 & mut self . root_prover ,
421425 root_input. write ( ) ,
422426 VM_MAX_TRACE_HEIGHTS ,
423427 )
424428 . expect ( "root proof generation should pass" ) ;
429+ println ! (
430+ "Root - Completed root proof at: {:?}" ,
431+ root_start_timestamp. elapsed( )
432+ ) ;
425433
426434 // Export root proof
427435 let file = File :: create ( "root_proof.bin" ) . expect ( "Create export proof file" ) ;
@@ -440,13 +448,13 @@ impl CenoAggregationProver {
440448}
441449
442450pub fn verify_root_proof (
443- vk : & MultiStarkVerifyingKey < RootSC > ,
451+ vk : & CenoRecursionVerifierKeys < SC > ,
444452 root_proof : & Proof < RootSC > ,
445453) -> Result < ( ) , VerificationError > {
446454 let root_fri_params =
447455 FriParameters :: standard_with_100_bits_conjectured_security ( ROOT_LOG_BLOWUP ) ;
448456 let root_engine = BabyBearPoseidon2RootEngine :: new ( root_fri_params) ;
449- root_engine. verify ( vk , root_proof) ?;
457+ root_engine. verify ( & vk . root_vm_vk , root_proof) ?;
450458 Ok ( ( ) )
451459}
452460
@@ -744,8 +752,8 @@ mod tests {
744752 . expect ( "root proof verification should pass" ) ;
745753
746754 // Method 2: Use stand-alone verification with only vk
747- let vk = agg_prover. vk . root_vm_vk ;
748- verify_root_proof ( & vk , & root_proof ) . expect ( "root proof verification should pass" ) ;
755+ verify_root_proof ( & agg_prover. vk , & root_proof )
756+ . expect ( "root proof verification should pass" ) ;
749757 }
750758
751759 pub fn verify_single_inner_thread ( ) {
0 commit comments