@@ -9,6 +9,7 @@ use ff_ext::BabyBearExt4;
99use itertools:: Itertools ;
1010use mpcs:: { Basefold , BasefoldRSParams } ;
1111use openvm_circuit:: arch:: { instructions:: program:: Program , SystemConfig , VmExecutor } ;
12+ use openvm_circuit:: arch:: { verify_single, VirtualMachine } ;
1213use openvm_native_circuit:: { Native , NativeConfig } ;
1314use openvm_native_compiler:: {
1415 asm:: AsmBuilder ,
@@ -17,7 +18,10 @@ use openvm_native_compiler::{
1718} ;
1819use openvm_native_recursion:: hints:: Hintable ;
1920use openvm_stark_backend:: config:: StarkGenericConfig ;
20- use openvm_stark_sdk:: config:: setup_tracing_with_log_level;
21+ use openvm_stark_sdk:: config:: baby_bear_poseidon2:: BabyBearPoseidon2Engine ;
22+ use openvm_stark_sdk:: config:: fri_params:: standard_fri_params_with_100_bits_conjectured_security;
23+ use openvm_stark_sdk:: config:: { setup_tracing_with_log_level, FriParameters } ;
24+ use openvm_stark_sdk:: engine:: StarkFriEngine ;
2125use openvm_stark_sdk:: {
2226 config:: baby_bear_poseidon2:: BabyBearPoseidon2Config , p3_baby_bear:: BabyBear ,
2327} ;
@@ -259,9 +263,7 @@ pub fn inner_test_thread() {
259263 return ();
260264 */
261265
262- let program: Program <
263- p3_monty_31:: MontyField31 < openvm_stark_sdk:: p3_baby_bear:: BabyBearParameters > ,
264- > = convert_program ( asm_code, options) ;
266+ let program: Program < F > = convert_program ( asm_code, options) ;
265267 let mut system_config = SystemConfig :: default ( )
266268 . with_public_values ( 4 )
267269 . with_max_segment_len ( ( 1 << 25 ) - 100 ) ;
@@ -271,12 +273,45 @@ pub fn inner_test_thread() {
271273 let executor = VmExecutor :: < BabyBear , NativeConfig > :: new ( config) ;
272274
273275 let res = executor
274- . execute_and_then ( program, witness_stream, |_, seg| Ok ( seg) , |err| err)
276+ . execute_and_then (
277+ program. clone ( ) ,
278+ witness_stream. clone ( ) ,
279+ |_, seg| Ok ( seg) ,
280+ |err| err,
281+ )
275282 . unwrap ( ) ;
276283
277284 for ( i, seg) in res. iter ( ) . enumerate ( ) {
278285 println ! ( "=> segment {:?} metrics: {:?}" , i, seg. metrics) ;
279286 }
287+
288+ let poseidon2_max_constraint_degree = 3 ;
289+ // TODO: use log_blowup = 1 when native multi_observe chip reduces max constraint degree to 3
290+ let log_blowup = 2 ;
291+
292+ let fri_params = if matches ! ( std:: env:: var( "OPENVM_FAST_TEST" ) , Ok ( x) if & x == "1" ) {
293+ FriParameters {
294+ log_blowup,
295+ log_final_poly_len : 0 ,
296+ num_queries : 10 ,
297+ proof_of_work_bits : 0 ,
298+ }
299+ } else {
300+ standard_fri_params_with_100_bits_conjectured_security ( log_blowup)
301+ } ;
302+
303+ let engine = BabyBearPoseidon2Engine :: new ( fri_params) ;
304+ let mut config = NativeConfig :: aggregation ( 0 , poseidon2_max_constraint_degree) ;
305+ config. system . memory_config . max_access_adapter_n = 16 ;
306+
307+ let vm = VirtualMachine :: new ( engine, config) ;
308+
309+ let pk = vm. keygen ( ) ;
310+ let result = vm. execute_and_generate ( program, witness_stream) . unwrap ( ) ;
311+ let proofs = vm. prove ( & pk, result) ;
312+ for proof in proofs {
313+ verify_single ( & vm. engine , & pk. get_vk ( ) , & proof) . expect ( "Verification failed" ) ;
314+ }
280315}
281316
282317#[ test]
0 commit comments