From 01243393f0e450c46bd6fbcf489fa1317cc1ad55 Mon Sep 17 00:00:00 2001 From: Zach Langley Date: Fri, 5 Dec 2025 10:48:58 -0500 Subject: [PATCH 1/8] feat: update to provable params --- Cargo.lock | 18 ++++++++--------- benchmarks/guest/kitchen-sink/openvm.toml | 2 -- benchmarks/guest/kitchen-sink/openvm_init.rs | 4 ++-- benchmarks/guest/kitchen-sink/src/main.rs | 12 ----------- benchmarks/prove/src/bin/verify_fibair.rs | 5 ++--- benchmarks/prove/src/util.rs | 12 +++-------- crates/circuits/poseidon2-air/src/tests.rs | 4 ++-- crates/cli/src/default.rs | 12 ++++------- crates/sdk/src/config/mod.rs | 14 +++++-------- crates/sdk/src/keygen/dummy.rs | 8 ++++---- crates/sdk/src/keygen/mod.rs | 2 +- crates/sdk/src/lib.rs | 8 ++++++-- crates/sdk/src/prover/agg.rs | 15 +++++++++++++- .../native/circuit/src/extension/mod.rs | 20 +++++++++++++++++-- .../native/circuit/tests/integration_test.rs | 7 +++---- 15 files changed, 73 insertions(+), 70 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e67707a8da..4d23783382 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6328,7 +6328,7 @@ dependencies = [ [[package]] name = "openvm-cuda-backend" version = "1.2.2" -source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#40e0be820e8b889e00b67f7a679f1ec3480b7c84" +source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#222e5df31a0cc5cf5e95082da4fd463c87d2c048" dependencies = [ "bincode 2.0.1", "bincode_derive", @@ -6360,7 +6360,7 @@ dependencies = [ [[package]] name = "openvm-cuda-builder" version = "1.2.2" -source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#40e0be820e8b889e00b67f7a679f1ec3480b7c84" +source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#222e5df31a0cc5cf5e95082da4fd463c87d2c048" dependencies = [ "cc", "glob", @@ -6369,7 +6369,7 @@ dependencies = [ [[package]] name = "openvm-cuda-common" version = "1.2.2" -source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#40e0be820e8b889e00b67f7a679f1ec3480b7c84" +source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#222e5df31a0cc5cf5e95082da4fd463c87d2c048" dependencies = [ "bytesize", "ctor", @@ -7121,7 +7121,7 @@ dependencies = [ [[package]] name = "openvm-stark-backend" version = "1.2.2" -source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#40e0be820e8b889e00b67f7a679f1ec3480b7c84" +source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#222e5df31a0cc5cf5e95082da4fd463c87d2c048" dependencies = [ "bitcode", "cfg-if", @@ -7151,7 +7151,7 @@ dependencies = [ [[package]] name = "openvm-stark-sdk" version = "1.2.2" -source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#40e0be820e8b889e00b67f7a679f1ec3480b7c84" +source = "git+https://github.com/openvm-org/stark-backend.git?branch=develop-v1.3.0#222e5df31a0cc5cf5e95082da4fd463c87d2c048" dependencies = [ "dashmap", "derivative", @@ -10029,7 +10029,7 @@ dependencies = [ "derive_more 2.0.1", "dunce", "inturn", - "itertools 0.10.5", + "itertools 0.11.0", "itoa", "normalize-path", "once_map", @@ -10040,7 +10040,7 @@ dependencies = [ "solar-config", "solar-data-structures", "solar-macros", - "thiserror 1.0.69", + "thiserror 2.0.15", "tracing", "unicode-width 0.2.2", ] @@ -10065,7 +10065,7 @@ dependencies = [ "alloy-primitives", "bitflags", "bumpalo", - "itertools 0.10.5", + "itertools 0.11.0", "memchr", "num-bigint 0.4.6", "num-rational", @@ -10398,7 +10398,7 @@ dependencies = [ "serde_json", "sha2 0.10.9", "tempfile", - "thiserror 1.0.69", + "thiserror 2.0.15", "url", "zip", ] diff --git a/benchmarks/guest/kitchen-sink/openvm.toml b/benchmarks/guest/kitchen-sink/openvm.toml index 2d1b307eef..7f70a95cea 100644 --- a/benchmarks/guest/kitchen-sink/openvm.toml +++ b/benchmarks/guest/kitchen-sink/openvm.toml @@ -7,7 +7,6 @@ [app_vm_config.modular] supported_moduli = [ - "1000000000000000003", # secp256k1 "115792089237316195423570985008687907853269984665640564039457584007908834671663", # coordinate "115792089237316195423570985008687907852837564279074904382605163141518161494337", # scalar @@ -22,7 +21,6 @@ supported_moduli = [ "52435875175126190479447740508185965837690552500527637822603658699938581184513", # scalar # 2^61 - 1 "2305843009213693951", - "7", ] [app_vm_config.fp2] diff --git a/benchmarks/guest/kitchen-sink/openvm_init.rs b/benchmarks/guest/kitchen-sink/openvm_init.rs index fdec4a6bdb..27875df628 100644 --- a/benchmarks/guest/kitchen-sink/openvm_init.rs +++ b/benchmarks/guest/kitchen-sink/openvm_init.rs @@ -1,4 +1,4 @@ // This file is automatically generated by cargo openvm. Do not rename or edit. -openvm_algebra_guest::moduli_macros::moduli_init! { "1000000000000000003", "115792089237316195423570985008687907853269984665640564039457584007908834671663", "115792089237316195423570985008687907852837564279074904382605163141518161494337", "115792089210356248762697446949407573530086143415290314195533631308867097853951", "115792089210356248762697446949407573529996955224135760342422259061068512044369", "21888242871839275222246405745257275088696311157297823662689037894645226208583", "21888242871839275222246405745257275088548364400416034343698204186575808495617", "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787", "52435875175126190479447740508185965837690552500527637822603658699938581184513", "2305843009213693951", "7" } -openvm_algebra_guest::complex_macros::complex_init! { "Bn254Fp2" { mod_idx = 5 }, "Bls12_381Fp2" { mod_idx = 7 } } +openvm_algebra_guest::moduli_macros::moduli_init! { "115792089237316195423570985008687907853269984665640564039457584007908834671663", "115792089237316195423570985008687907852837564279074904382605163141518161494337", "115792089210356248762697446949407573530086143415290314195533631308867097853951", "115792089210356248762697446949407573529996955224135760342422259061068512044369", "21888242871839275222246405745257275088696311157297823662689037894645226208583", "21888242871839275222246405745257275088548364400416034343698204186575808495617", "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787", "52435875175126190479447740508185965837690552500527637822603658699938581184513", "2305843009213693951" } +openvm_algebra_guest::complex_macros::complex_init! { "Bn254Fp2" { mod_idx = 4 }, "Bls12_381Fp2" { mod_idx = 6 } } openvm_ecc_guest::sw_macros::sw_init! { "Secp256k1Point", "P256Point", "Bn254G1Affine", "Bls12_381G1Affine" } diff --git a/benchmarks/guest/kitchen-sink/src/main.rs b/benchmarks/guest/kitchen-sink/src/main.rs index 3367181c6a..5c0b7b1c3e 100644 --- a/benchmarks/guest/kitchen-sink/src/main.rs +++ b/benchmarks/guest/kitchen-sink/src/main.rs @@ -23,8 +23,6 @@ use { // Note: these will all currently be represented as bytes32 even though they could be smaller openvm_algebra_guest::moduli_macros::moduli_declare! { - Seven { modulus = "7" }, - Mod1e18 { modulus = "1000000000000000003" }, Mersenne61 { modulus = "0x1fffffffffffffff" }, } @@ -67,7 +65,6 @@ fn materialize_ecc_chip() { pub fn main() { // Since we don't explicitly call setup functions anymore, we must ensure every declared modulus // and curve chip is materialized. - materialize_modular_chip::(); materialize_modular_chip::(); materialize_modular_chip::(); materialize_modular_chip::(); @@ -77,7 +74,6 @@ pub fn main() { materialize_modular_chip::(); materialize_modular_chip::(); materialize_modular_chip::(); - materialize_modular_chip::(); materialize_complex_chip!(Bn254Fp2, Bn254Fp); materialize_complex_chip!(Bls12_381Fp2, Bls12_381Fp); @@ -87,14 +83,6 @@ pub fn main() { materialize_ecc_chip::(); materialize_ecc_chip::(); - let [one, six] = [1, 6].map(Seven::from_u32); - assert_eq!(one + six, Seven::ZERO); - - let y = Mod1e18::from_u32(100); - let y = (&y * &y) * &y; - let y = y.clone() * y.clone() * y.clone(); - assert_eq!(y + Mod1e18::from_u32(3), Mod1e18::ZERO); - let mut bytes = [0u8; 32]; bytes[7] = 1 << 5; // 2^61 = modulus + 1 let mut res = Mersenne61::from_le_bytes_unchecked(&bytes); // No need to start from reduced representation diff --git a/benchmarks/prove/src/bin/verify_fibair.rs b/benchmarks/prove/src/bin/verify_fibair.rs index f73926e17e..a0539ce696 100644 --- a/benchmarks/prove/src/bin/verify_fibair.rs +++ b/benchmarks/prove/src/bin/verify_fibair.rs @@ -37,7 +37,7 @@ fn main() -> Result<()> { let n = 1 << 15; // STARK to calculate (2 ** 15)th Fibonacci number. let fib_chip = FibonacciChip::new(0, 1, n); - let engine = Poseidon2Engine::new(FriParameters::standard_with_100_bits_conjectured_security( + let engine = Poseidon2Engine::new(FriParameters::standard_with_100_bits_security( app_log_blowup, )); @@ -52,8 +52,7 @@ fn main() -> Result<()> { let fib_ctx = fib_ctx.into_iter().map(cpu_proving_ctx_to_gpu).collect(); let vdata = engine.run_test(fib_air, fib_ctx).unwrap(); // Unlike other apps, this "app" does not have continuations enabled. - let app_fri_params = - FriParameters::standard_with_100_bits_conjectured_security(leaf_log_blowup); + let app_fri_params = FriParameters::standard_with_100_bits_security(leaf_log_blowup); let mut app_vm_config = NativeConfig::aggregation( DEFAULT_MAX_NUM_PUBLIC_VALUES, app_fri_params.max_constraint_degree().min(7), diff --git a/benchmarks/prove/src/util.rs b/benchmarks/prove/src/util.rs index ac231ba7c9..256e985c32 100644 --- a/benchmarks/prove/src/util.rs +++ b/benchmarks/prove/src/util.rs @@ -99,15 +99,9 @@ impl BenchmarkCli { app_vm_config.as_mut().segmentation_limits.max_cells = max_cells; } AppConfig { - app_fri_params: FriParameters::standard_with_100_bits_conjectured_security( - app_log_blowup, - ) - .into(), + app_fri_params: FriParameters::standard_with_100_bits_security(app_log_blowup).into(), app_vm_config, - leaf_fri_params: FriParameters::standard_with_100_bits_conjectured_security( - leaf_log_blowup, - ) - .into(), + leaf_fri_params: FriParameters::standard_with_100_bits_security(leaf_log_blowup).into(), compiler_options: CompilerOptions { enable_cycle_tracker: self.profiling, ..Default::default() @@ -124,7 +118,7 @@ impl BenchmarkCli { let [leaf_fri_params, internal_fri_params, root_fri_params] = [leaf_log_blowup, internal_log_blowup, root_log_blowup] - .map(FriParameters::standard_with_100_bits_conjectured_security); + .map(FriParameters::standard_with_100_bits_security); AggregationConfig { leaf_fri_params, diff --git a/crates/circuits/poseidon2-air/src/tests.rs b/crates/circuits/poseidon2-air/src/tests.rs index 844aea20e4..23b370f4e6 100644 --- a/crates/circuits/poseidon2-air/src/tests.rs +++ b/crates/circuits/poseidon2-air/src/tests.rs @@ -7,7 +7,7 @@ use openvm_stark_backend::{ use openvm_stark_sdk::{ config::{ baby_bear_poseidon2::BabyBearPoseidon2Engine, - fri_params::standard_fri_params_with_100_bits_conjectured_security, + fri_params::standard_fri_params_with_100_bits_security, }, engine::StarkFriEngine, p3_baby_bear::BabyBear, @@ -41,7 +41,7 @@ fn run_poseidon2_subchip_test(subchip: Arc>, rng: .collect(); let mut poseidon2_trace = subchip.generate_trace(states.clone()); - let fri_params = standard_fri_params_with_100_bits_conjectured_security(3); // max constraint degree = 7 requires log blowup = 3 + let fri_params = standard_fri_params_with_100_bits_security(3); // max constraint degree = 7 requires log blowup = 3 let engine = BabyBearPoseidon2Engine::new(fri_params); // positive test diff --git a/crates/cli/src/default.rs b/crates/cli/src/default.rs index 390dfb9e82..8d17ac323e 100644 --- a/crates/cli/src/default.rs +++ b/crates/cli/src/default.rs @@ -34,20 +34,16 @@ pub fn default_evm_halo2_verifier_path() -> String { pub fn default_app_config() -> AppConfig { AppConfig { - app_fri_params: FriParameters::standard_with_100_bits_conjectured_security( - DEFAULT_APP_LOG_BLOWUP, - ) - .into(), + app_fri_params: FriParameters::standard_with_100_bits_security(DEFAULT_APP_LOG_BLOWUP) + .into(), app_vm_config: SdkVmConfig::builder() .system(Default::default()) .rv32i(Default::default()) .rv32m(Default::default()) .io(Default::default()) .build(), - leaf_fri_params: FriParameters::standard_with_100_bits_conjectured_security( - DEFAULT_LEAF_LOG_BLOWUP, - ) - .into(), + leaf_fri_params: FriParameters::standard_with_100_bits_security(DEFAULT_LEAF_LOG_BLOWUP) + .into(), compiler_options: Default::default(), } } diff --git a/crates/sdk/src/config/mod.rs b/crates/sdk/src/config/mod.rs index 7955186152..98e13fd358 100644 --- a/crates/sdk/src/config/mod.rs +++ b/crates/sdk/src/config/mod.rs @@ -127,13 +127,13 @@ impl Default for AggregationConfig { fn default() -> Self { Self { max_num_user_public_values: DEFAULT_MAX_NUM_PUBLIC_VALUES, - leaf_fri_params: FriParameters::standard_with_100_bits_conjectured_security( + leaf_fri_params: FriParameters::standard_with_100_bits_security( DEFAULT_LEAF_LOG_BLOWUP, ), - internal_fri_params: FriParameters::standard_with_100_bits_conjectured_security( + internal_fri_params: FriParameters::standard_with_100_bits_security( DEFAULT_INTERNAL_LOG_BLOWUP, ), - root_fri_params: FriParameters::standard_with_100_bits_conjectured_security( + root_fri_params: FriParameters::standard_with_100_bits_security( DEFAULT_ROOT_LOG_BLOWUP, ), profiling: false, @@ -161,9 +161,7 @@ pub struct AppFriParams { impl Default for AppFriParams { fn default() -> Self { Self { - fri_params: FriParameters::standard_with_100_bits_conjectured_security( - DEFAULT_APP_LOG_BLOWUP, - ), + fri_params: FriParameters::standard_with_100_bits_security(DEFAULT_APP_LOG_BLOWUP), } } } @@ -182,9 +180,7 @@ pub struct LeafFriParams { impl Default for LeafFriParams { fn default() -> Self { Self { - fri_params: FriParameters::standard_with_100_bits_conjectured_security( - DEFAULT_LEAF_LOG_BLOWUP, - ), + fri_params: FriParameters::standard_with_100_bits_security(DEFAULT_LEAF_LOG_BLOWUP), } } } diff --git a/crates/sdk/src/keygen/dummy.rs b/crates/sdk/src/keygen/dummy.rs index 677a4b6ec0..f4a1ae8d3f 100644 --- a/crates/sdk/src/keygen/dummy.rs +++ b/crates/sdk/src/keygen/dummy.rs @@ -33,7 +33,6 @@ use openvm_stark_sdk::{ config::{ baby_bear_poseidon2::BabyBearPoseidon2Engine, baby_bear_poseidon2_root::{BabyBearPoseidon2RootConfig, BabyBearPoseidon2RootEngine}, - fri_params::standard_fri_params_with_100_bits_conjectured_security, FriParameters, }, engine::StarkFriEngine, @@ -119,9 +118,9 @@ pub(super) fn dummy_internal_proof_riscv_app_vm( internal_vm_pk: Arc>, internal_exe: Arc>, num_public_values: usize, + app_fri_params: FriParameters, ) -> Result, VirtualMachineError> { - let fri_params = standard_fri_params_with_100_bits_conjectured_security(1); - let leaf_proof = dummy_leaf_proof_riscv_app_vm(leaf_vm_pk, num_public_values, fri_params)?; + let leaf_proof = dummy_leaf_proof_riscv_app_vm(leaf_vm_pk, num_public_values, app_fri_params)?; dummy_internal_proof(internal_vm_pk, internal_exe, leaf_proof) } @@ -190,7 +189,8 @@ fn dummy_app_proof( where VB: VmBuilder>, VC: VmExecutionConfig, - >::Executor: Executor + MeteredExecutor + PreflightExecutor, + >::Executor: + Executor + MeteredExecutor + PreflightExecutor>, { let dummy_exe = Arc::new(VmExe::new(dummy_app_program())); let mut app_prover = diff --git a/crates/sdk/src/keygen/mod.rs b/crates/sdk/src/keygen/mod.rs index f3f0ed4cc9..035d60cb63 100644 --- a/crates/sdk/src/keygen/mod.rs +++ b/crates/sdk/src/keygen/mod.rs @@ -1,7 +1,6 @@ use std::sync::Arc; use derivative::Derivative; -// use dummy::{compute_root_proof_heights, dummy_internal_proof_riscv_app_vm}; use openvm_circuit::{ arch::{AirInventoryError, SystemConfig, VirtualMachine, VirtualMachineError, VmCircuitConfig}, system::memory::dimensions::MemoryDimensions, @@ -361,6 +360,7 @@ impl AggProvingKey { internal_vm_pk.clone(), internal_committed_exe.clone(), config.max_num_user_public_values, + config.leaf_fri_params, )?; let root_verifier_pk = { diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index 9b45411ed4..cab84398e3 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -11,7 +11,9 @@ use std::{ #[cfg(feature = "evm-verify")] use alloy_sol_types::sol; use commit::AppExecutionCommit; -use config::{AggregationTreeConfig, AppConfig}; +use config::{ + AggregationTreeConfig, AppConfig, DEFAULT_INTERNAL_LOG_BLOWUP, DEFAULT_ROOT_LOG_BLOWUP, +}; use getset::{Getters, MutGetters, WithSetters}; use keygen::{AppProvingKey, AppVerifyingKey}; use openvm_build::{ @@ -49,7 +51,7 @@ use openvm_native_compiler::conversion::CompilerOptions; use openvm_native_recursion::halo2::utils::{CacheHalo2ParamsReader, Halo2ParamsReader}; use openvm_stark_backend::proof::Proof; use openvm_stark_sdk::{ - config::baby_bear_poseidon2::BabyBearPoseidon2Engine, + config::{baby_bear_poseidon2::BabyBearPoseidon2Engine, FriParameters}, engine::{StarkEngine, StarkFriEngine}, }; use openvm_transpiler::{ @@ -239,6 +241,8 @@ where let agg_config = AggregationConfig { max_num_user_public_values: system_config.num_public_values, leaf_fri_params: app_config.leaf_fri_params.fri_params, + internal_fri_params: FriParameters::new_for_testing(DEFAULT_INTERNAL_LOG_BLOWUP), + root_fri_params: FriParameters::new_for_testing(DEFAULT_ROOT_LOG_BLOWUP), profiling, compiler_options, ..Default::default() diff --git a/crates/sdk/src/prover/agg.rs b/crates/sdk/src/prover/agg.rs index f6ed745d82..12d5633c55 100644 --- a/crates/sdk/src/prover/agg.rs +++ b/crates/sdk/src/prover/agg.rs @@ -232,7 +232,20 @@ where break; } if wrapper_layers >= max_internal_wrapper_layers { - panic!("The heights of the root verifier still exceed the required heights after {max_internal_wrapper_layers} wrapper layers"); + let fixed = root_prover.fixed_air_heights(); + let exceeding: Vec<_> = actual_air_heights + .iter() + .zip(fixed.iter()) + .enumerate() + .filter(|(_, (actual, fixed))| actual > fixed) + .map(|(i, (actual, fixed))| format!("AIR {i}: actual={actual}, fixed={fixed}")) + .collect(); + panic!( + "The heights of the root verifier still exceed the required heights after {max_internal_wrapper_layers} wrapper layers.\n\ + Exceeding AIRs: {exceeding:?}\n\ + All actual heights: {actual_air_heights:?}\n\ + All fixed heights: {fixed:?}" + ); } wrapper_layers += 1; let input = InternalVmVerifierInput { diff --git a/extensions/native/circuit/src/extension/mod.rs b/extensions/native/circuit/src/extension/mod.rs index abe3a0c952..714afe3867 100644 --- a/extensions/native/circuit/src/extension/mod.rs +++ b/extensions/native/circuit/src/extension/mod.rs @@ -576,7 +576,23 @@ where // Pre-computed maximum trace heights for NativeConfig. Found by doubling // the actual trace heights of kitchen-sink leaf verification (except for // VariableRangeChecker, which has a fixed height). +#[rustfmt::skip] pub const NATIVE_MAX_TRACE_HEIGHTS: &[u32] = &[ - 4194304, 4, 128, 2097152, 8388608, 4194304, 262144, 2097152, 16777216, 2097152, 8388608, - 262144, 2097152, 1048576, 4194304, 65536, 262144, + 4194304, // 0: Program + 4, // 1: Connector + 64, // 2: PublicValues + 2097152, // 3: Boundary + 8388608, // 4: AccessAdapter (1-cell) + 4194304, // 5: AccessAdapter (2-cell) + 262144, // 6: AccessAdapter (4-cell) + 4194304, // 7: VerifyBatch (NativePoseidon2Air) + 33554432, // 8: FriReducedOpeningAir + 2097152, // 9: FieldExtensionAir + 16777216, // 10: FieldArithmeticAir + 262144, // 11: JalRangeCheckAir + 4194304, // 12: NativeBranchEqAir + 1048576, // 13: NativeLoadStoreAir<4> + 4194304, // 14: NativeLoadStoreAir<1> + 131072, // 15: PhantomAir + 262144, // 16: VariableRangeCheckerAir ]; diff --git a/extensions/native/circuit/tests/integration_test.rs b/extensions/native/circuit/tests/integration_test.rs index 314d424514..1afa38f263 100644 --- a/extensions/native/circuit/tests/integration_test.rs +++ b/extensions/native/circuit/tests/integration_test.rs @@ -52,8 +52,7 @@ use openvm_stark_backend::{ use openvm_stark_sdk::{ config::{ baby_bear_poseidon2::BabyBearPoseidon2Config, - fri_params::standard_fri_params_with_100_bits_conjectured_security, setup_tracing, - FriParameters, + fri_params::standard_fri_params_with_100_bits_security, setup_tracing, FriParameters, }, engine::StarkFriEngine, p3_baby_bear::BabyBear, @@ -182,7 +181,7 @@ fn test_vm_1_optional_air() -> eyre::Result<()> { // Aggregation VmConfig has Core/Poseidon2/FieldArithmetic/FieldExtension chips. The program // only uses Core and FieldArithmetic. All other chips should not have AIR proof inputs. let config = NativeConfig::aggregation(4, 3); - let engine = TestEngine::new(standard_fri_params_with_100_bits_conjectured_security(3)); + let engine = TestEngine::new(standard_fri_params_with_100_bits_security(3)); let (vm, pk) = VirtualMachine::new_with_keygen(engine, NativeBuilder::default(), config)?; let num_airs = pk.per_air.len(); @@ -217,7 +216,7 @@ fn test_vm_public_values() -> eyre::Result<()> { let num_public_values = 100; let config = test_system_config_without_continuations().with_public_values(num_public_values); assert!(!config.continuation_enabled); - let engine = TestEngine::new(standard_fri_params_with_100_bits_conjectured_security(3)); + let engine = TestEngine::new(standard_fri_params_with_100_bits_security(3)); let (vm, pk) = VirtualMachine::new_with_keygen(engine, SystemBuilder, config)?; let instructions = vec![ From 066288d6f5a382cd2e59f1bfb54d01760d072e2e Mon Sep 17 00:00:00 2001 From: Zach Langley Date: Fri, 19 Dec 2025 11:12:08 -0500 Subject: [PATCH 2/8] increase instance size --- ci/benchmark-config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/benchmark-config.json b/ci/benchmark-config.json index 666ca66fae..c2dde9b587 100644 --- a/ci/benchmark-config.json +++ b/ci/benchmark-config.json @@ -77,7 +77,7 @@ "e2e_bench": true, "run_params": [ { - "instance_type": "g6.2xlarge", + "instance_type": "g6e.4xlarge", "memory_allocator": "jemalloc", "app_log_blowup": 1, "leaf_log_blowup": 1, @@ -105,4 +105,4 @@ ] } ] -} \ No newline at end of file +} From bb3a7cd46b3256ad2f2f603b7bb02b8c18c51d4b Mon Sep 17 00:00:00 2001 From: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com> Date: Mon, 22 Dec 2025 16:30:24 -0500 Subject: [PATCH 3/8] revert several changes --- crates/sdk/src/keygen/dummy.rs | 6 +++--- crates/sdk/src/keygen/mod.rs | 1 - crates/sdk/src/lib.rs | 8 ++------ 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/crates/sdk/src/keygen/dummy.rs b/crates/sdk/src/keygen/dummy.rs index f4a1ae8d3f..6326d80b6d 100644 --- a/crates/sdk/src/keygen/dummy.rs +++ b/crates/sdk/src/keygen/dummy.rs @@ -40,6 +40,7 @@ use openvm_stark_sdk::{ }; use crate::{ + config::DEFAULT_APP_LOG_BLOWUP, prover::vm::{new_local_prover, types::VmProvingKey}, F, SC, }; @@ -118,17 +119,16 @@ pub(super) fn dummy_internal_proof_riscv_app_vm( internal_vm_pk: Arc>, internal_exe: Arc>, num_public_values: usize, - app_fri_params: FriParameters, ) -> Result, VirtualMachineError> { - let leaf_proof = dummy_leaf_proof_riscv_app_vm(leaf_vm_pk, num_public_values, app_fri_params)?; + let leaf_proof = dummy_leaf_proof_riscv_app_vm(leaf_vm_pk, num_public_values)?; dummy_internal_proof(internal_vm_pk, internal_exe, leaf_proof) } pub(super) fn dummy_leaf_proof_riscv_app_vm( leaf_vm_pk: Arc>, num_public_values: usize, - app_fri_params: FriParameters, ) -> Result, VirtualMachineError> { + let app_fri_params = FriParameters::standard_with_100_bits_security(DEFAULT_APP_LOG_BLOWUP); let app_vm_pk = Arc::new(dummy_riscv_app_vm_pk(num_public_values, app_fri_params)?); let app_proof = dummy_app_proof(Rv32ImCpuBuilder, app_vm_pk.clone())?; dummy_leaf_proof(leaf_vm_pk, app_vm_pk, &app_proof) diff --git a/crates/sdk/src/keygen/mod.rs b/crates/sdk/src/keygen/mod.rs index 035d60cb63..89be51c2d2 100644 --- a/crates/sdk/src/keygen/mod.rs +++ b/crates/sdk/src/keygen/mod.rs @@ -360,7 +360,6 @@ impl AggProvingKey { internal_vm_pk.clone(), internal_committed_exe.clone(), config.max_num_user_public_values, - config.leaf_fri_params, )?; let root_verifier_pk = { diff --git a/crates/sdk/src/lib.rs b/crates/sdk/src/lib.rs index cab84398e3..9b45411ed4 100644 --- a/crates/sdk/src/lib.rs +++ b/crates/sdk/src/lib.rs @@ -11,9 +11,7 @@ use std::{ #[cfg(feature = "evm-verify")] use alloy_sol_types::sol; use commit::AppExecutionCommit; -use config::{ - AggregationTreeConfig, AppConfig, DEFAULT_INTERNAL_LOG_BLOWUP, DEFAULT_ROOT_LOG_BLOWUP, -}; +use config::{AggregationTreeConfig, AppConfig}; use getset::{Getters, MutGetters, WithSetters}; use keygen::{AppProvingKey, AppVerifyingKey}; use openvm_build::{ @@ -51,7 +49,7 @@ use openvm_native_compiler::conversion::CompilerOptions; use openvm_native_recursion::halo2::utils::{CacheHalo2ParamsReader, Halo2ParamsReader}; use openvm_stark_backend::proof::Proof; use openvm_stark_sdk::{ - config::{baby_bear_poseidon2::BabyBearPoseidon2Engine, FriParameters}, + config::baby_bear_poseidon2::BabyBearPoseidon2Engine, engine::{StarkEngine, StarkFriEngine}, }; use openvm_transpiler::{ @@ -241,8 +239,6 @@ where let agg_config = AggregationConfig { max_num_user_public_values: system_config.num_public_values, leaf_fri_params: app_config.leaf_fri_params.fri_params, - internal_fri_params: FriParameters::new_for_testing(DEFAULT_INTERNAL_LOG_BLOWUP), - root_fri_params: FriParameters::new_for_testing(DEFAULT_ROOT_LOG_BLOWUP), profiling, compiler_options, ..Default::default() From d398027e5e63eb8fb07dc8a9af0bbb863f1a8209 Mon Sep 17 00:00:00 2001 From: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com> Date: Mon, 22 Dec 2025 17:35:42 -0500 Subject: [PATCH 4/8] fix: integration test params --- crates/sdk/tests/integration_test.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/sdk/tests/integration_test.rs b/crates/sdk/tests/integration_test.rs index e826c8251d..5569ebb649 100644 --- a/crates/sdk/tests/integration_test.rs +++ b/crates/sdk/tests/integration_test.rs @@ -371,7 +371,10 @@ fn test_static_verifier_custom_pv_handler() -> eyre::Result<()> { // Test setup println!("test setup"); let app_log_blowup = 1; - let app_config = small_test_app_config(app_log_blowup); + let mut app_config = small_test_app_config(app_log_blowup); + // Don't use trivial leaf params as that makes the root fixed heights too small + app_config.leaf_fri_params = + FriParameters::standard_with_100_bits_security(LEAF_LOG_BLOWUP).into(); println!("app_config: {:?}", app_config.app_vm_config); let sdk = Sdk::new(app_config)?; let app_exe = app_exe_for_test(); From 68235628d665fb95d348f102d8c56abd75388d66 Mon Sep 17 00:00:00 2001 From: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com> Date: Mon, 22 Dec 2025 18:20:06 -0500 Subject: [PATCH 5/8] fix again --- .github/workflows/extension-tests.cuda.yml | 2 +- crates/sdk/tests/integration_test.rs | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/extension-tests.cuda.yml b/.github/workflows/extension-tests.cuda.yml index a2f0100709..bfabd77b64 100644 --- a/.github/workflows/extension-tests.cuda.yml +++ b/.github/workflows/extension-tests.cuda.yml @@ -18,7 +18,7 @@ on: machine_type: description: "Runner machine type (e.g. test-gpu-nvidia/cpu=8+32)" required: false - default: test-gpu-nvidia/family=g6+g5+g6e + default: test-gpu-nvidia/family=g6+g6e concurrency: group: ${{ github.workflow_ref }}-extension-tests-cuda-${{ github.event.pull_request.number || github.sha }} diff --git a/crates/sdk/tests/integration_test.rs b/crates/sdk/tests/integration_test.rs index 5569ebb649..9d801127b5 100644 --- a/crates/sdk/tests/integration_test.rs +++ b/crates/sdk/tests/integration_test.rs @@ -140,7 +140,9 @@ fn small_test_app_config(app_log_blowup: usize) -> AppConfig { AppConfig { app_fri_params: FriParameters::new_for_testing(app_log_blowup).into(), app_vm_config: app_vm_config_for_test(), - leaf_fri_params: FriParameters::new_for_testing(LEAF_LOG_BLOWUP).into(), + // Don't use trivial leaf FRI parameters as it can cause the Root fixed heights to be too + // small + leaf_fri_params: FriParameters::standard_with_100_bits_security(LEAF_LOG_BLOWUP).into(), compiler_options: CompilerOptions { enable_cycle_tracker: true, ..Default::default() @@ -372,9 +374,6 @@ fn test_static_verifier_custom_pv_handler() -> eyre::Result<()> { println!("test setup"); let app_log_blowup = 1; let mut app_config = small_test_app_config(app_log_blowup); - // Don't use trivial leaf params as that makes the root fixed heights too small - app_config.leaf_fri_params = - FriParameters::standard_with_100_bits_security(LEAF_LOG_BLOWUP).into(); println!("app_config: {:?}", app_config.app_vm_config); let sdk = Sdk::new(app_config)?; let app_exe = app_exe_for_test(); From 30e6c0fb095396c436fc1bfabb44cf64ebebe484 Mon Sep 17 00:00:00 2001 From: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:05:53 -0500 Subject: [PATCH 6/8] fix --- crates/sdk/tests/integration_test.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/sdk/tests/integration_test.rs b/crates/sdk/tests/integration_test.rs index 9d801127b5..184fa25c1a 100644 --- a/crates/sdk/tests/integration_test.rs +++ b/crates/sdk/tests/integration_test.rs @@ -373,7 +373,7 @@ fn test_static_verifier_custom_pv_handler() -> eyre::Result<()> { // Test setup println!("test setup"); let app_log_blowup = 1; - let mut app_config = small_test_app_config(app_log_blowup); + let app_config = small_test_app_config(app_log_blowup); println!("app_config: {:?}", app_config.app_vm_config); let sdk = Sdk::new(app_config)?; let app_exe = app_exe_for_test(); @@ -423,8 +423,7 @@ fn test_static_verifier_custom_pv_handler() -> eyre::Result<()> { fn test_e2e_proof_generation_and_verification_with_pvs() -> eyre::Result<()> { let app_log_blowup = 1; let app_config = small_test_app_config(app_log_blowup); - let mut sdk = Sdk::new(app_config)?; - sdk.agg_config_mut().leaf_fri_params = FriParameters::new_for_testing(LEAF_LOG_BLOWUP); + let sdk = Sdk::new(app_config)?; let evm_verifier = sdk.generate_halo2_verifier_solidity()?; let evm_proof = sdk.prove_evm(app_exe_for_test(), StdIn::default())?; From 2c0dad0e08fb80bde004fda83b57fbc16d89caea Mon Sep 17 00:00:00 2001 From: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com> Date: Mon, 22 Dec 2025 20:50:37 -0500 Subject: [PATCH 7/8] feat: make tests faster --- .github/workflows/sdk.yml | 13 ++++++++++--- crates/sdk/tests/integration_test.rs | 9 ++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 597f5ef0a5..1370bd6c46 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -26,7 +26,7 @@ jobs: tests: strategy: matrix: - ignored: [true, false] + mode: ["default", "ignored", "aot"] runs-on: - runs-on=${{ github.run_id }}-sdk-${{ github.run_attempt }}-${{ strategy.job-index }}/family=m7a.24xlarge/image=ubuntu24-full-x64/disk=large/extras=s3-cache @@ -75,16 +75,23 @@ jobs: diff -u expected_abi_sorted.json compiled_abi.json - name: Run openvm-sdk crate tests - if: ${{ matrix.ignored == false }} + if: ${{ matrix.mode == "default" }} working-directory: crates/sdk run: | export RUST_BACKTRACE=1 export RUST_MIN_STACK=8388608 CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS=true cargo nextest run --release --features parallel,evm-verify + + - name: Run openvm-sdk crate tests (AOT) + if: ${{ matrix.mode == "aot" }} + working-directory: crates/sdk + run: | + export RUST_BACKTRACE=1 + export RUST_MIN_STACK=8388608 CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS=true cargo nextest run --release --features parallel,evm-verify,aot - name: Run ignored tests - if: ${{ matrix.ignored == true }} + if: ${{ matrix.mode == "ignored" }} working-directory: crates/sdk # if: ${{ github.event_name == 'push' }} run: | diff --git a/crates/sdk/tests/integration_test.rs b/crates/sdk/tests/integration_test.rs index 184fa25c1a..e9a3a65afc 100644 --- a/crates/sdk/tests/integration_test.rs +++ b/crates/sdk/tests/integration_test.rs @@ -137,12 +137,11 @@ fn app_vm_config_for_test() -> SdkVmConfig { } fn small_test_app_config(app_log_blowup: usize) -> AppConfig { + let leaf_fri_params = FriParameters::new_for_testing(LEAF_LOG_BLOWUP); AppConfig { app_fri_params: FriParameters::new_for_testing(app_log_blowup).into(), app_vm_config: app_vm_config_for_test(), - // Don't use trivial leaf FRI parameters as it can cause the Root fixed heights to be too - // small - leaf_fri_params: FriParameters::standard_with_100_bits_security(LEAF_LOG_BLOWUP).into(), + leaf_fri_params: leaf_fri_params.into(), compiler_options: CompilerOptions { enable_cycle_tracker: true, ..Default::default() @@ -375,7 +374,7 @@ fn test_static_verifier_custom_pv_handler() -> eyre::Result<()> { let app_log_blowup = 1; let app_config = small_test_app_config(app_log_blowup); println!("app_config: {:?}", app_config.app_vm_config); - let sdk = Sdk::new(app_config)?; + let sdk = Sdk::new(app_config)?.with_agg_config(agg_config_for_test()); let app_exe = app_exe_for_test(); // Generate PK using custom PV handler @@ -423,7 +422,7 @@ fn test_static_verifier_custom_pv_handler() -> eyre::Result<()> { fn test_e2e_proof_generation_and_verification_with_pvs() -> eyre::Result<()> { let app_log_blowup = 1; let app_config = small_test_app_config(app_log_blowup); - let sdk = Sdk::new(app_config)?; + let sdk = Sdk::new(app_config)?.with_agg_config(agg_config_for_test()); let evm_verifier = sdk.generate_halo2_verifier_solidity()?; let evm_proof = sdk.prove_evm(app_exe_for_test(), StdIn::default())?; From ee964ac84f6ccd60a18f75a154fe9dc91920187f Mon Sep 17 00:00:00 2001 From: Jonathan Wang <31040440+jonathanpwang@users.noreply.github.com> Date: Mon, 22 Dec 2025 21:25:17 -0500 Subject: [PATCH 8/8] ci: fix --- .github/workflows/sdk.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/sdk.yml b/.github/workflows/sdk.yml index 1370bd6c46..de4772c4cb 100644 --- a/.github/workflows/sdk.yml +++ b/.github/workflows/sdk.yml @@ -58,7 +58,7 @@ jobs: bash ../../extensions/native/recursion/trusted_setup_s3.sh - name: Run openvm-sdk contracts/ tests - if: ${{ matrix.ignored == false }} + if: ${{ matrix.mode == 'default' }} working-directory: crates/sdk/contracts run: | forge fmt --check @@ -66,7 +66,7 @@ jobs: forge test - name: Check IOpenVmHalo2Verifier.sol abi correctness - if: ${{ matrix.ignored == false }} + if: ${{ matrix.mode == 'default' }} working-directory: crates/sdk/contracts run: | forge build @@ -75,7 +75,7 @@ jobs: diff -u expected_abi_sorted.json compiled_abi.json - name: Run openvm-sdk crate tests - if: ${{ matrix.mode == "default" }} + if: ${{ matrix.mode == 'default' }} working-directory: crates/sdk run: | export RUST_BACKTRACE=1 @@ -83,7 +83,7 @@ jobs: CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS=true cargo nextest run --release --features parallel,evm-verify - name: Run openvm-sdk crate tests (AOT) - if: ${{ matrix.mode == "aot" }} + if: ${{ matrix.mode == 'aot' }} working-directory: crates/sdk run: | export RUST_BACKTRACE=1 @@ -91,7 +91,7 @@ jobs: CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS=true cargo nextest run --release --features parallel,evm-verify,aot - name: Run ignored tests - if: ${{ matrix.mode == "ignored" }} + if: ${{ matrix.mode == 'ignored' }} working-directory: crates/sdk # if: ${{ github.event_name == 'push' }} run: |