11use anyhow:: Result ;
22use cairo_air:: utils:: ProofFormat ;
33use cairo_program_runner_lib:: cairo_run_program;
4- use cairo_program_runner_lib:: utils:: { get_cairo_run_config, get_program, get_program_input} ;
5- use cairo_vm:: Felt252 ;
4+ use cairo_program_runner_lib:: utils:: {
5+ get_cairo_run_config, get_program, get_program_input, write_output_to_file,
6+ } ;
67use cairo_vm:: types:: errors:: program_errors:: ProgramError ;
78use cairo_vm:: types:: layout_name:: LayoutName ;
89use cairo_vm:: vm:: errors:: cairo_run_errors:: CairoRunError ;
910use cairo_vm:: vm:: errors:: runner_errors:: RunnerError ;
1011use cairo_vm:: vm:: errors:: vm_errors:: VirtualMachineError ;
11- use cairo_vm:: vm:: runners:: cairo_runner:: CairoRunner ;
1212use clap:: Parser ;
1313#[ cfg( test) ]
1414use mockall:: automock;
@@ -87,8 +87,6 @@ enum StwoRunAndProveError {
8787 Serializing ( #[ from] sonic_rs:: error:: Error ) ,
8888 #[ error( transparent) ]
8989 VM ( #[ from] VirtualMachineError ) ,
90- #[ error( "Failed to parse output line as Felt decimal." ) ]
91- OutputParsing ,
9290 #[ error( transparent) ]
9391 Anyhow ( #[ from] anyhow:: Error ) ,
9492}
@@ -166,7 +164,7 @@ fn stwo_run_and_prove(
166164 . map_err ( |e| StwoRunAndProveError :: Program ( e, program_path) ) ?;
167165 let program_input = get_program_input ( & program_input)
168166 . map_err ( |e| StwoRunAndProveError :: PathIO ( e, program_input. unwrap_or_default ( ) ) ) ?;
169- let runner = cairo_run_program ( & program, program_input, cairo_run_config) ?;
167+ let mut runner = cairo_run_program ( & program, program_input, cairo_run_config) ?;
170168 let prover_input = adapt ( & runner) ?;
171169 let result = prove ( prover_input. clone ( ) , prove_config, prover) ;
172170
@@ -186,7 +184,8 @@ fn stwo_run_and_prove(
186184 if let Some ( output_path) = program_output
187185 && result. is_ok ( )
188186 {
189- write_output_to_file ( runner, output_path) ?;
187+ info ! ( "Saving program output to: {:?}" , output_path) ;
188+ write_output_to_file ( & mut runner, output_path) ?;
190189 }
191190
192191 result
@@ -261,28 +260,6 @@ impl ProverTrait for StwoProverEntryPoint {
261260 }
262261}
263262
264- /// Write the program output to the specified output path as Felt252 values.
265- fn write_output_to_file (
266- mut runner : CairoRunner ,
267- output_path : PathBuf ,
268- ) -> Result < ( ) , StwoRunAndProveError > {
269- info ! ( "Saving program output to: {:?}" , output_path) ;
270- // TODO(Nitsan): move this function to cairo_program_runner_lib or a new utils lib,
271- // and call it from here and from cairo_program_runner.
272-
273- let mut output_buffer = String :: new ( ) ;
274- runner. vm . write_output ( & mut output_buffer) ?;
275- let output_lines = output_buffer
276- . lines ( )
277- . map ( |line : & str | {
278- Felt252 :: from_dec_str ( line) . map_err ( |_| StwoRunAndProveError :: OutputParsing )
279- } )
280- . collect :: < Result < Vec < Felt252 > , _ > > ( ) ?;
281- std:: fs:: write ( & output_path, sonic_rs:: to_string_pretty ( & output_lines) ?)
282- . map_err ( |e| StwoRunAndProveError :: PathIO ( e, output_path) ) ?;
283- Ok ( ( ) )
284- }
285-
286263fn file_empty ( path : & PathBuf ) -> std:: io:: Result < bool > {
287264 let metadata = fs:: metadata ( path) ?;
288265 Ok ( metadata. len ( ) == 0 )
@@ -302,6 +279,7 @@ fn file_missing_or_empty(path: &PathBuf) -> std::io::Result<bool> {
302279#[ cfg( test) ]
303280mod tests {
304281 use super :: * ;
282+ use cairo_vm:: Felt252 ;
305283 use ctor:: ctor;
306284 use serde_json:: Value ;
307285 use stwo_cairo_utils:: logging_utils:: init_logging;
0 commit comments