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
20 .as_mut()
21 .segmentation_limits
22 .set_max_trace_height(max_segment_length);
23 config.as_mut().num_public_values = NUM_PUBLIC_VALUES;
24
25 let elf = args.build_bench_program("fibonacci", &config, None)?;
26 let app_config = args.app_config(config);
27
28 let sdk = Sdk::new(app_config)?;
29
30 let n = 800_000u64;
31 let mut stdin = StdIn::default();
32 stdin.write(&n);
33 run_with_metric_collection("OUTPUT_PATH", || -> eyre::Result<_> {
34 #[cfg(not(feature = "evm"))]
35 let _proof = sdk.prover(elf)?.with_program_name("fib_e2e").prove(stdin)?;
36 #[cfg(feature = "evm")]
37 let _proof = sdk
38 .evm_prover(elf)?
39 .with_program_name("fib_e2e")
40 .prove_evm(stdin)?;
41 Ok(())
42 })
43}