fib_e2e/
fib_e2e.rs

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    // Must be larger than RangeTupleCheckerAir.height == 524288
15    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}