@@ -2,11 +2,14 @@ use std::sync::Arc;
22
33use eyre:: Result ;
44use openvm_circuit:: system:: memory:: dimensions:: MemoryDimensions ;
5- use openvm_recursion_circuit:: system:: { AggregationSubCircuit , VerifierConfig , VerifierTraceGen } ;
5+ use openvm_recursion_circuit:: {
6+ batch_constraint:: expr_eval:: CachedTraceRecord ,
7+ system:: { AggregationSubCircuit , VerifierConfig , VerifierTraceGen } ,
8+ } ;
69use openvm_stark_backend:: {
710 keygen:: types:: { MultiStarkProvingKey , MultiStarkVerifyingKey } ,
811 proof:: Proof ,
9- prover:: { CommittedTraceData , DeviceDataTransporter , ProverBackend , ProvingContext } ,
12+ prover:: { DeviceDataTransporter , ProverBackend , ProvingContext } ,
1013 StarkEngine , SystemParams ,
1114} ;
1215use openvm_stark_sdk:: config:: baby_bear_poseidon2:: { EF , F } ;
@@ -25,35 +28,28 @@ use crate::{
2528
2629mod trace;
2730
28- pub struct RootProver <
29- PB : ProverBackend < Val = F , Challenge = EF > ,
30- S : AggregationSubCircuit ,
31- T : RootTraceGen < PB > ,
32- > {
31+ pub struct RootProver < S : AggregationSubCircuit , T > {
3332 pk : Arc < MultiStarkProvingKey < RootSC > > ,
3433 vk : Arc < MultiStarkVerifyingKey < RootSC > > ,
3534
3635 agg_node_tracegen : T ,
3736
3837 child_vk : Arc < MultiStarkVerifyingKey < SC > > ,
39- child_vk_pcs_data : CommittedTraceData < PB > ,
38+ cached_trace_record : CachedTraceRecord ,
4039 circuit : Arc < RootCircuit < S > > ,
4140 trace_heights : Option < Vec < usize > > ,
4241}
4342
44- impl <
45- PB : ProverBackend < Val = F , Challenge = EF , Commitment = [ Bn254 ; 1 ] > ,
46- S : AggregationSubCircuit + VerifierTraceGen < PB , RootSC > ,
47- T : RootTraceGen < PB > ,
48- > RootProver < PB , S , T >
49- where
50- PB :: Matrix : Clone ,
51- {
43+ impl < S : AggregationSubCircuit , T > RootProver < S , T > {
5244 #[ instrument( name = "total_proof" , skip_all) ]
53- pub fn root_prove_from_ctx < E : StarkEngine < SC = RootSC , PB = PB > > (
54- & self ,
55- ctx : ProvingContext < PB > ,
56- ) -> Result < Proof < RootSC > > {
45+ pub fn root_prove_from_ctx < E > ( & self , ctx : ProvingContext < E :: PB > ) -> Result < Proof < RootSC > >
46+ where
47+ E : StarkEngine < SC = RootSC > ,
48+ E :: PB : ProverBackend < Val = F , Challenge = EF , Commitment = [ Bn254 ; 1 ] > ,
49+ <E :: PB as ProverBackend >:: Matrix : Clone ,
50+ S : VerifierTraceGen < E :: PB , RootSC > ,
51+ T : RootTraceGen < E :: PB > ,
52+ {
5753 if tracing:: enabled!( tracing:: Level :: DEBUG ) {
5854 trace_heights_tracing_info :: < _ , RootSC > ( & ctx. per_trace , & self . circuit . airs ( ) ) ;
5955 }
6864 }
6965}
7066
71- impl <
72- PB : ProverBackend < Val = F , Challenge = EF , Commitment = [ Bn254 ; 1 ] > ,
73- S : AggregationSubCircuit + VerifierTraceGen < PB , RootSC > ,
74- T : RootTraceGen < PB > ,
75- > RootProver < PB , S , T >
76- {
77- pub fn new < E : StarkEngine < SC = RootSC , PB = PB > > (
67+ impl < S : AggregationSubCircuit , T > RootProver < S , T > {
68+ pub fn new < E > (
7869 child_vk : Arc < MultiStarkVerifyingKey < SC > > ,
7970 internal_recursive_cached_commit : CommitBytes ,
8071 system_params : SystemParams ,
@@ -84,20 +75,24 @@ impl<
8475 trace_heights : Option < Vec < usize > > ,
8576 ) -> Self
8677 where
87- E :: PD : DeviceDataTransporter < RootSC , PB > + Clone ,
88- PB :: Val : Field + PrimeField32 ,
89- PB :: Matrix : Clone ,
90- PB :: Commitment : Into < CommitBytes > ,
78+ E : StarkEngine < SC = RootSC > ,
79+ E :: PB : ProverBackend < Val = F , Challenge = EF , Commitment = [ Bn254 ; 1 ] > ,
80+ S : VerifierTraceGen < E :: PB , RootSC > ,
81+ T : RootTraceGen < E :: PB > ,
82+ E :: PD : DeviceDataTransporter < RootSC , E :: PB > + Clone ,
83+ <E :: PB as ProverBackend >:: Val : Field + PrimeField32 ,
84+ <E :: PB as ProverBackend >:: Matrix : Clone ,
9185 {
9286 let verifier_circuit = S :: new (
9387 child_vk. clone ( ) ,
9488 VerifierConfig {
9589 continuations_enabled : true ,
90+ has_cached : false ,
9691 ..Default :: default ( )
9792 } ,
9893 ) ;
94+ let cached_trace_record = verifier_circuit. cached_trace_record ( & child_vk) ;
9995 let engine = E :: new ( system_params) ;
100- let child_vk_pcs_data = verifier_circuit. commit_child_vk ( & engine, & child_vk) ;
10196 let internal_recursive_dag_commit = DagCommitBytes {
10297 cached_commit : internal_recursive_cached_commit,
10398 pre_hash : child_vk. pre_hash . into ( ) ,
@@ -115,13 +110,13 @@ impl<
115110 vk : Arc :: new ( vk) ,
116111 agg_node_tracegen : T :: new ( def_hook_vk_commit. is_some ( ) ) ,
117112 child_vk,
118- child_vk_pcs_data ,
113+ cached_trace_record ,
119114 circuit,
120115 trace_heights,
121116 }
122117 }
123118
124- pub fn from_pk < E : StarkEngine < SC = RootSC , PB = PB > > (
119+ pub fn from_pk < E > (
125120 child_vk : Arc < MultiStarkVerifyingKey < SC > > ,
126121 internal_recursive_cached_commit : CommitBytes ,
127122 pk : Arc < MultiStarkProvingKey < RootSC > > ,
@@ -131,19 +126,22 @@ impl<
131126 trace_heights : Option < Vec < usize > > ,
132127 ) -> Self
133128 where
134- PB :: Val : Field + PrimeField32 ,
135- PB :: Matrix : Clone ,
136- PB :: Commitment : Into < CommitBytes > ,
129+ E : StarkEngine < SC = RootSC > ,
130+ E :: PB : ProverBackend < Val = F , Challenge = EF , Commitment = [ Bn254 ; 1 ] > ,
131+ S : VerifierTraceGen < E :: PB , RootSC > ,
132+ T : RootTraceGen < E :: PB > ,
133+ <E :: PB as ProverBackend >:: Val : Field + PrimeField32 ,
134+ <E :: PB as ProverBackend >:: Matrix : Clone ,
137135 {
138136 let verifier_circuit = S :: new (
139137 child_vk. clone ( ) ,
140138 VerifierConfig {
141139 continuations_enabled : true ,
140+ has_cached : false ,
142141 ..Default :: default ( )
143142 } ,
144143 ) ;
145- let engine = E :: new ( pk. params . clone ( ) ) ;
146- let child_vk_pcs_data = verifier_circuit. commit_child_vk ( & engine, & child_vk) ;
144+ let cached_trace_record = verifier_circuit. cached_trace_record ( & child_vk) ;
147145 let internal_recursive_dag_commit = DagCommitBytes {
148146 cached_commit : internal_recursive_cached_commit,
149147 pre_hash : child_vk. pre_hash . into ( ) ,
@@ -161,7 +159,7 @@ impl<
161159 vk,
162160 agg_node_tracegen : T :: new ( def_hook_vk_commit. is_some ( ) ) ,
163161 child_vk,
164- child_vk_pcs_data ,
162+ cached_trace_record ,
165163 circuit,
166164 trace_heights,
167165 }
@@ -179,10 +177,6 @@ impl<
179177 self . vk . clone ( )
180178 }
181179
182- pub fn get_cached_commit ( & self ) -> <PB as ProverBackend >:: Commitment {
183- self . child_vk_pcs_data . commitment
184- }
185-
186180 pub fn get_trace_heights ( & self ) -> Option < Vec < usize > > {
187181 self . trace_heights . clone ( )
188182 }
0 commit comments