1use clap::Parser;
2use eyre::Result;
3use openvm_benchmarks_prove::util::BenchmarkCli;
4use openvm_circuit::arch::DEFAULT_MAX_NUM_PUBLIC_VALUES;
5use openvm_sdk::{config::SdkVmConfig, Sdk, StdIn};
6use openvm_stark_sdk::bench::run_with_metric_collection;
7
8const NUM_PUBLIC_VALUES: usize = DEFAULT_MAX_NUM_PUBLIC_VALUES;
9
10#[tokio::main]
11async fn main() -> Result<()> {
12 let args = BenchmarkCli::parse();
13
14 let max_segment_length = args.max_segment_length.unwrap_or(1_000_000);
16
17 let mut config =
18 SdkVmConfig::from_toml(include_str!("../../../guest/fibonacci/openvm.toml"))?.app_vm_config;
19 config.as_mut().segmentation_limits.max_trace_height = max_segment_length;
20 config.as_mut().num_public_values = NUM_PUBLIC_VALUES;
21
22 let elf = args.build_bench_program("fibonacci", &config, None)?;
23 let app_config = args.app_config(config);
24
25 let sdk = Sdk::new(app_config)?;
26
27 let n = 800_000u64;
28 let mut stdin = StdIn::default();
29 stdin.write(&n);
30 run_with_metric_collection("OUTPUT_PATH", || -> eyre::Result<_> {
31 #[cfg(not(feature = "evm"))]
32 let _proof = sdk.prover(elf)?.with_program_name("fib_e2e").prove(stdin)?;
33 #[cfg(feature = "evm")]
34 let _proof = sdk
35 .evm_prover(elf)?
36 .with_program_name("fib_e2e")
37 .prove_evm(stdin)?;
38 Ok(())
39 })
40}