1- use std:: path:: { Path , PathBuf } ;
2- use scroll_zkvm_prover_euclid:: {
3- ProverConfig , Prover , ProverType ,
4- } ;
5- use scroll_zkvm_types:: task:: ProvingTask ;
61use libzkp:: {
7- TaskType ,
2+ proofs :: { PersistableProof , ProofMetadata , WrappedProof } ,
83 tasks:: ChunkInterpreter ,
9- proofs :: { WrappedProof , ProofMetadata , PersistableProof } ,
4+ TaskType ,
105} ;
6+ use scroll_zkvm_prover_euclid:: { Prover , ProverConfig , ProverType } ;
7+ use scroll_zkvm_types:: task:: ProvingTask ;
8+ use serde:: { Deserialize , Serialize } ;
9+ use std:: path:: { Path , PathBuf } ;
10+ use std:: sync:: OnceLock ;
1111use tracing:: instrument;
1212use tracing_subscriber:: { fmt:: format:: FmtSpan , layer:: SubscriberExt , util:: SubscriberInitExt } ;
13- use std:: sync:: OnceLock ;
14- use serde:: { Deserialize , Serialize } ;
1513
1614struct DummyInterpreter { }
17- impl ChunkInterpreter for DummyInterpreter { }
15+ impl ChunkInterpreter for DummyInterpreter { }
1816
1917pub mod specs;
2018// pub mod testers;
@@ -41,7 +39,6 @@ const TEST_PHASE: &str = "euclidv2";
4139
4240static LOGGER_INIT : OnceLock < eyre:: Result < ( ) > > = OnceLock :: new ( ) ;
4341
44-
4542/// Every test run will write assets to a new directory.
4643///
4744/// Possibly one of the following:
@@ -56,7 +53,6 @@ pub struct ProverTester {
5653}
5754
5855impl ProverTester {
59-
6056 /// Setup test environment
6157 fn setup_logger ( ) -> eyre:: Result < ( ) > {
6258 let fmt_layer = tracing_subscriber:: fmt:: layer ( )
@@ -89,7 +85,7 @@ impl ProverTester {
8985
9086 /// Setup directory structure for the test suite.
9187 pub fn setup ( spec : & str ) -> eyre:: Result < Self > {
92- if let Err ( e) = LOGGER_INIT . get_or_init ( || Self :: setup_logger ( ) ) {
88+ if let Err ( e) = LOGGER_INIT . get_or_init ( Self :: setup_logger) {
9389 eyre:: bail!( "logger init fail: {e}" ) ;
9490 }
9591 let manifest_dir_str = std:: env:: var ( "CARGO_MANIFEST_DIR" ) ?;
@@ -115,7 +111,7 @@ impl ProverTester {
115111 // TODO: enable setting from env
116112 let dir_workspace = manifest_dir. join ( "../../../zkvm-prover/.work" ) ;
117113
118- Ok ( ProverTester {
114+ Ok ( ProverTester {
119115 dir_testrun,
120116 dir_workspace,
121117 dir_testdata : manifest_dir. join ( "testdata" ) ,
@@ -146,11 +142,35 @@ impl ProverTester {
146142 } )
147143 }
148144
145+ /// Simple test for executing task
146+ #[ instrument( name = "execute_single" , skip_all) ]
147+ pub fn execute_single < Spec : ProvingTestSpec > (
148+ & self ,
149+ task : Spec :: ProvingTaskType ,
150+ ) -> eyre:: Result < u64 > {
151+ use scroll_zkvm_prover_euclid:: task:: ProvingTask as ProvingTaskT ;
152+
153+ let cfg = self . config ( & Spec :: PHASE_SPEC . to_string ( ) ) ?;
154+ let prover = Prover :: < Spec :: ProverType > :: setup ( cfg) ?;
155+
156+ let ( _, _, utask_json) = libzkp:: gen_universal_task (
157+ Spec :: PHASE_SPEC as i32 ,
158+ & serde_json:: to_string ( & task) ?,
159+ TEST_PHASE ,
160+ None :: < DummyInterpreter > ,
161+ ) ?;
162+
163+ let u_task: ProvingTask = serde_json:: from_str ( & utask_json) ?;
164+ let stdin = u_task. build_guest_input ( ) ?;
165+
166+ let cycles = prover. execute_and_check ( & stdin, true ) ?;
167+ Ok ( cycles)
168+ }
149169
150170 /// File descriptor for the proof saved to disc.
151171 #[ instrument( "fd_proof" , skip_all, fields( task_id = task. identifier, path_proof) ) ]
152172 fn fd_proof < Spec : ProvingTestSpec > ( task : & ProvingTask ) -> String {
153- let path_proof = format ! ( "{}-{}.json" , Spec :: PHASE_SPEC . to_string ( ) , task. identifier) ;
173+ let path_proof = format ! ( "{}-{}.json" , Spec :: PHASE_SPEC , task. identifier) ;
154174 path_proof
155175 }
156176
@@ -163,21 +183,27 @@ impl ProverTester {
163183 ) -> eyre:: Result < WrappedProof < Spec :: MetadataType > >
164184 where
165185 WrappedProof < Spec :: MetadataType > : for < ' de > Deserialize < ' de > ,
166- {
186+ {
167187 let ( _, metadata_json, utask_json) = libzkp:: gen_universal_task (
168- Spec :: PHASE_SPEC as i32 ,
169- & serde_json:: to_string ( & task) ?,
170- TEST_PHASE ,
188+ Spec :: PHASE_SPEC as i32 ,
189+ & serde_json:: to_string ( & task) ?,
190+ TEST_PHASE ,
171191 None :: < DummyInterpreter > ,
172192 ) ?;
173193
174- let u_task : ProvingTask = serde_json:: from_str ( & utask_json) ?;
194+ let u_task: ProvingTask = serde_json:: from_str ( & utask_json) ?;
175195
176196 // Try reading proof from cache if available, and early return in that case.
177- let path_proof = prover. cache_dir . as_ref ( ) . expect ( "set in config" ) . join ( Self :: fd_proof :: < Spec > ( & u_task) ) ;
197+ let path_proof = prover
198+ . cache_dir
199+ . as_ref ( )
200+ . expect ( "set in config" )
201+ . join ( Self :: fd_proof :: < Spec > ( & u_task) ) ;
178202 tracing:: debug!( name: "try_read_proof" , ?path_proof) ;
179203
180- if let Ok ( proof) = <WrappedProof < Spec :: MetadataType > as PersistableProof >:: from_json ( & path_proof) {
204+ if let Ok ( proof) =
205+ <WrappedProof < Spec :: MetadataType > as PersistableProof >:: from_json ( & path_proof)
206+ {
181207 tracing:: info!( name: "early_return_proof" , ?path_proof) ;
182208 return Ok ( proof) ;
183209 }
@@ -186,13 +212,11 @@ impl ProverTester {
186212 let proof = prover. gen_proof_universal ( & u_task, with_snark) ?;
187213 let vk = prover. get_app_vk ( ) ;
188214
189- let wrapped_proof_json = libzkp:: gen_wrapped_proof (
190- & serde_json:: to_string ( & proof) ?,
191- & metadata_json,
192- & vk,
193- ) ?;
215+ let wrapped_proof_json =
216+ libzkp:: gen_wrapped_proof ( & serde_json:: to_string ( & proof) ?, & metadata_json, & vk) ?;
194217
195- let wrapped_proof : WrappedProof < Spec :: MetadataType > = serde_json:: from_str ( & wrapped_proof_json) ?;
218+ let wrapped_proof: WrappedProof < Spec :: MetadataType > =
219+ serde_json:: from_str ( & wrapped_proof_json) ?;
196220
197221 // dump proof
198222 tracing:: debug!( name: "try_write_proof" , ?path_proof) ;
@@ -202,7 +226,7 @@ impl ProverTester {
202226 }
203227
204228 /// Dump verifier staff to disk
205- pub fn dump_verifier_staff < P : ProverType > ( & self , spec : & str ) -> eyre:: Result < ( ) > {
229+ pub fn dump_verifier_staff < P : ProverType > ( & self , spec : & str ) -> eyre:: Result < ( ) > {
206230 let cfg = self . config ( spec) ?;
207231 let prover = Prover :: < P > :: setup ( cfg) ?;
208232 prover. dump_universal_verifier ( Some ( self . dir_testrun . clone ( ) ) ) ?;
@@ -213,7 +237,7 @@ impl ProverTester {
213237 /// End-to-end test for one or more proving tasks.
214238 pub fn prove_verify < Spec : ProvingTestSpec > (
215239 & self ,
216- tasks : impl Iterator < Item = Spec :: ProvingTaskType > ,
240+ tasks : impl IntoIterator < Item = Spec :: ProvingTaskType > ,
217241 ) -> eyre:: Result < Vec < WrappedProof < Spec :: MetadataType > > >
218242 where
219243 WrappedProof < Spec :: MetadataType > : for < ' de > Deserialize < ' de > ,
@@ -237,7 +261,6 @@ impl ProverTester {
237261 Ok ( out)
238262 }
239263
240-
241264 /// End-to-end test for a single proving task to generate an EVM-verifiable SNARK proof.
242265 pub fn prove_verify_single_evm < Spec : ProvingTestSpec > (
243266 & self ,
@@ -251,16 +274,15 @@ impl ProverTester {
251274 let prover = Prover :: < Spec :: ProverType > :: setup ( cfg) ?;
252275 let wrapped_proof = Self :: prove_verify_single :: < Spec > ( & prover, task, true ) ?;
253276
254- prover. dump_universal_verifier ( None :: < String > ) ?
277+ prover
278+ . dump_universal_verifier ( None :: < String > ) ?
255279 . verify_proof_evm (
256- & wrapped_proof. proof . as_evm_proof ( ) . unwrap ( ) . clone ( ) . into ( ) ,
257- & wrapped_proof. vk ,
258- ) ?;
280+ & wrapped_proof. proof . as_evm_proof ( ) . unwrap ( ) . clone ( ) . into ( ) ,
281+ & wrapped_proof. vk ,
282+ ) ?;
259283
260284 Ok ( wrapped_proof)
261285 }
262-
263-
264286}
265287
266288/// Spec for test phase (chunk/batch/bundle)
@@ -272,6 +294,4 @@ pub trait ProvingTestSpec {
272294
273295 //TODO: deprecated this spec later when the universal prover type is ready
274296 type ProverType : ProverType ;
275-
276297}
277-
0 commit comments