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
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}