pairing/
pairing.rs

1use clap::Parser;
2use eyre::Result;
3use openvm_algebra_circuit::{Fp2Extension, ModularExtension};
4use openvm_benchmarks_prove::util::BenchmarkCli;
5use openvm_circuit::arch::SystemConfig;
6use openvm_ecc_circuit::WeierstrassExtension;
7use openvm_pairing_circuit::{PairingCurve, PairingExtension};
8use openvm_pairing_guest::bn254::{BN254_MODULUS, BN254_ORDER};
9use openvm_sdk::{config::SdkVmConfig, Sdk, StdIn};
10use openvm_stark_sdk::bench::run_with_metric_collection;
11
12fn main() -> Result<()> {
13    let args = BenchmarkCli::parse();
14
15    let elf = args.build_bench_program("pairing")?;
16    let vm_config = SdkVmConfig::builder()
17        .system(SystemConfig::default().with_continuations().into())
18        .rv32i(Default::default())
19        .rv32m(Default::default())
20        .io(Default::default())
21        .keccak(Default::default())
22        .modular(ModularExtension::new(vec![
23            BN254_MODULUS.clone(),
24            BN254_ORDER.clone(),
25        ]))
26        .fp2(Fp2Extension::new(vec![BN254_MODULUS.clone()]))
27        .ecc(WeierstrassExtension::new(vec![
28            PairingCurve::Bn254.curve_config()
29        ]))
30        .pairing(PairingExtension::new(vec![PairingCurve::Bn254]))
31        .build();
32    let sdk = Sdk::new();
33    let exe = sdk.transpile(elf, vm_config.transpiler()).unwrap();
34
35    run_with_metric_collection("OUTPUT_PATH", || -> Result<()> {
36        args.bench_from_exe("pairing", vm_config, exe, StdIn::default())
37    })
38}