@@ -14,7 +14,7 @@ use cairo_vm::vm::errors::vm_errors::VirtualMachineError;
14
14
use cairo_vm:: vm:: runners:: cairo_pie:: CairoPie ;
15
15
#[ cfg( feature = "with_tracer" ) ]
16
16
use cairo_vm:: vm:: runners:: cairo_runner:: CairoRunner ;
17
- use cairo_vm:: vm:: runners:: cairo_runner:: RunResources ;
17
+ use cairo_vm:: vm:: runners:: cairo_runner:: { ProverInputInfoError , RunResources } ;
18
18
#[ cfg( feature = "with_tracer" ) ]
19
19
use cairo_vm_tracer:: error:: trace_data_errors:: TraceDataError ;
20
20
#[ cfg( feature = "with_tracer" ) ]
@@ -69,6 +69,8 @@ struct Args {
69
69
conflicts_with_all = [ "proof_mode" , "air_private_input" , "air_public_input" ]
70
70
) ]
71
71
cairo_pie_output : Option < String > ,
72
+ #[ arg( long = "prover_input_info" ) ]
73
+ prover_input_info : Option < String > ,
72
74
#[ arg( long = "merge_extra_segments" ) ]
73
75
merge_extra_segments : bool ,
74
76
#[ arg( long = "allow_missing_builtins" ) ]
@@ -102,6 +104,8 @@ enum Error {
102
104
#[ error( transparent) ]
103
105
PublicInput ( #[ from] PublicInputError ) ,
104
106
#[ error( transparent) ]
107
+ ProveInputInfo ( #[ from] ProverInputInfoError ) ,
108
+ #[ error( transparent) ]
105
109
#[ cfg( feature = "with_tracer" ) ]
106
110
TraceData ( #[ from] TraceDataError ) ,
107
111
}
@@ -168,7 +172,9 @@ fn start_tracer(cairo_runner: &CairoRunner) -> Result<(), TraceDataError> {
168
172
fn run ( args : impl Iterator < Item = String > ) -> Result < ( ) , Error > {
169
173
let args = Args :: try_parse_from ( args) ?;
170
174
171
- let trace_enabled = args. trace_file . is_some ( ) || args. air_public_input . is_some ( ) ;
175
+ let trace_enabled = args. trace_file . is_some ( )
176
+ || args. air_public_input . is_some ( )
177
+ || args. prover_input_info . is_some ( ) ;
172
178
173
179
let cairo_layout_params = match args. cairo_layout_params_file {
174
180
Some ( file) => Some ( CairoLayoutParams :: from_file ( & file) ?) ,
@@ -235,6 +241,15 @@ fn run(args: impl Iterator<Item = String>) -> Result<(), Error> {
235
241
memory_writer. flush ( ) ?;
236
242
}
237
243
244
+ if let Some ( prover_input_info_path) = args. prover_input_info {
245
+ let prover_input_info = cairo_runner. get_prover_input_info ( ) . map_err ( |error| {
246
+ eprintln ! ( "{error}" ) ;
247
+ CairoRunError :: Runner ( error)
248
+ } ) ?;
249
+ let json = prover_input_info. serialize_json ( ) ?;
250
+ std:: fs:: write ( prover_input_info_path, json) ?;
251
+ }
252
+
238
253
if let Some ( file_path) = args. air_public_input {
239
254
let json = cairo_runner. get_air_public_input ( ) ?. serialize_json ( ) ?;
240
255
std:: fs:: write ( file_path, json) ?;
@@ -358,6 +373,7 @@ mod tests {
358
373
#[ values( false , true ) ] air_public_input : bool ,
359
374
#[ values( false , true ) ] air_private_input : bool ,
360
375
#[ values( false , true ) ] cairo_pie_output : bool ,
376
+ #[ values( false , true ) ] prover_input_info : bool ,
361
377
) {
362
378
let mut args = vec ! [ "cairo-vm-cli" . to_string( ) ] ;
363
379
if let Some ( layout) = layout {
@@ -388,6 +404,9 @@ mod tests {
388
404
if print_output {
389
405
args. extend_from_slice ( & [ "--print_output" . to_string ( ) ] ) ;
390
406
}
407
+ if prover_input_info {
408
+ args. extend_from_slice ( & [ "--prover_input_info" . to_string ( ) , "/dev/null" . to_string ( ) ] ) ;
409
+ }
391
410
392
411
args. push ( "../cairo_programs/proof_programs/fibonacci.json" . to_string ( ) ) ;
393
412
if air_public_input && !proof_mode
0 commit comments