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}