Repository: openvm-org/openvm
Pull request #1550: fix: use absolute paths in `VmConfig` derive macro
Author: login: shuklaayush
Created: 2025-04-01T16:02:28Z | Merged: 2025-04-01T20:14:55Z

- use absolute paths for structs used only in the derive macro


Diff:
diff --git a/.gitignore b/.gitignore
index 6c53953538..16d9e0c214 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,7 @@ rustc-*
 # Bench metrics
 .bench_metrics/
 __pycache__/
+metrics.json
 
 # KZG trusted setup
 **/params
diff --git a/Cargo.lock b/Cargo.lock
index 2475913852..0de21f22b6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4224,7 +4224,6 @@ dependencies = [
  "openvm-bigint-circuit",
  "openvm-build",
  "openvm-circuit",
- "openvm-circuit-primitives-derive",
  "openvm-ecc-guest",
  "openvm-instructions",
  "openvm-platform",
diff --git a/benchmarks/Cargo.toml b/benchmarks/Cargo.toml
index f4e0415f36..531b4b13f6 100644
--- a/benchmarks/Cargo.toml
+++ b/benchmarks/Cargo.toml
@@ -66,3 +66,6 @@ harness = false
 
 [[bin]]
 name = "fib_e2e"
+
+[package.metadata.cargo-shear]
+ignored = ["derive_more"]
diff --git a/benchmarks/src/bin/ecrecover.rs b/benchmarks/src/bin/ecrecover.rs
index 1351dfb7ba..5251fd8655 100644
--- a/benchmarks/src/bin/ecrecover.rs
+++ b/benchmarks/src/bin/ecrecover.rs
@@ -1,5 +1,4 @@
 use clap::Parser;
-use derive_more::derive::From;
 use eyre::Result;
 use k256::ecdsa::{SigningKey, VerifyingKey};
 use num_bigint::BigUint;
@@ -9,12 +8,8 @@ use openvm_algebra_circuit::{
 use openvm_algebra_transpiler::ModularTranspilerExtension;
 use openvm_benchmarks::utils::BenchmarkCli;
 use openvm_circuit::{
-    arch::{
-        instructions::exe::VmExe, SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex,
-        VmConfig, VmInventoryError,
-    },
-    circuit_derive::{Chip, ChipUsageGetter},
-    derive::{AnyEnum, InstructionExecutor, VmConfig},
+    arch::{instructions::exe::VmExe, SystemConfig},
+    derive::VmConfig,
 };
 use openvm_ecc_circuit::{
     CurveConfig, WeierstrassExtension, WeierstrassExtensionExecutor, WeierstrassExtensionPeriphery,
diff --git a/crates/toolchain/tests/Cargo.toml b/crates/toolchain/tests/Cargo.toml
index 47d697dc03..d31d388c32 100644
--- a/crates/toolchain/tests/Cargo.toml
+++ b/crates/toolchain/tests/Cargo.toml
@@ -8,7 +8,6 @@ homepage.workspace = true
 repository.workspace = true
 
 [dependencies]
-openvm-circuit-primitives-derive.workspace = true
 openvm-stark-backend.workspace = true
 openvm-stark-sdk.workspace = true
 openvm-circuit = { workspace = true, features = ["test-utils"] }
@@ -35,3 +34,6 @@ num-bigint.workspace = true
 [features]
 default = ["parallel"]
 parallel = ["openvm-circuit/parallel"]
+
+[package.metadata.cargo-shear]
+ignored = ["derive_more", "openvm-stark-backend"]
diff --git a/crates/toolchain/tests/tests/transpiler_tests.rs b/crates/toolchain/tests/tests/transpiler_tests.rs
index 350f8bca07..5e82b60430 100644
--- a/crates/toolchain/tests/tests/transpiler_tests.rs
+++ b/crates/toolchain/tests/tests/transpiler_tests.rs
@@ -3,7 +3,6 @@ use std::{
     path::{Path, PathBuf},
 };
 
-use derive_more::derive::From;
 use eyre::Result;
 use num_bigint::BigUint;
 use openvm_algebra_circuit::{
@@ -13,14 +12,10 @@ use openvm_algebra_circuit::{
 use openvm_algebra_transpiler::{Fp2TranspilerExtension, ModularTranspilerExtension};
 use openvm_bigint_circuit::{Int256, Int256Executor, Int256Periphery};
 use openvm_circuit::{
-    arch::{
-        SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex, VmConfig, VmExecutor,
-        VmInventoryError,
-    },
-    derive::{AnyEnum, InstructionExecutor, VmConfig},
+    arch::{SystemConfig, VmExecutor},
+    derive::VmConfig,
     utils::air_test,
 };
-use openvm_circuit_primitives_derive::{Chip, ChipUsageGetter};
 use openvm_ecc_guest::k256::{SECP256K1_MODULUS, SECP256K1_ORDER};
 use openvm_instructions::exe::VmExe;
 use openvm_platform::memory::MEM_SIZE;
diff --git a/crates/vm/derive/src/lib.rs b/crates/vm/derive/src/lib.rs
index 472a6aeb59..33f061e6f2 100644
--- a/crates/vm/derive/src/lib.rs
+++ b/crates/vm/derive/src/lib.rs
@@ -317,12 +317,15 @@ pub fn vm_generic_config_derive(input: proc_macro::TokenStream) -> proc_macro::T
                     #field_name_upper(#periphery_name<F>),
                 });
                 create_chip_complex.push(quote! {
-                    let complex: VmChipComplex<F, Self::Executor, Self::Periphery> = complex.extend(&self.#field_name)?;
+                    let complex: ::openvm_circuit::arch::VmChipComplex<F, Self::Executor, Self::Periphery> = complex.extend(&self.#field_name)?;
                 });
             }
 
             let (source_executor_type, source_periphery_type) = match &source {
-                Source::System(_) => (quote! { SystemExecutor }, quote! { SystemPeriphery }),
+                Source::System(_) => (
+                    quote! { ::openvm_circuit::arch::SystemExecutor },
+                    quote! { ::openvm_circuit::arch::SystemPeriphery },
+                ),
                 Source::Config(field_ident) => {
                     let field_type = fields
                         .iter()
@@ -344,34 +347,34 @@ pub fn vm_generic_config_derive(input: proc_macro::TokenStream) -> proc_macro::T
             let periphery_type = Ident::new(&format!("{}Periphery", name), name.span());
 
             TokenStream::from(quote! {
-                #[derive(ChipUsageGetter, Chip, InstructionExecutor, From, AnyEnum)]
+                #[derive(::openvm_circuit::circuit_derive::ChipUsageGetter, ::openvm_circuit::circuit_derive::Chip, ::openvm_circuit::derive::InstructionExecutor, ::derive_more::derive::From, ::openvm_circuit::derive::AnyEnum)]
                 pub enum #executor_type<F: PrimeField32> {
                     #[any_enum]
                     #source_name_upper(#source_executor_type<F>),
                     #(#executor_enum_fields)*
                 }
 
-                #[derive(ChipUsageGetter, Chip, From, AnyEnum)]
+                #[derive(::openvm_circuit::circuit_derive::ChipUsageGetter, ::openvm_circuit::circuit_derive::Chip, ::derive_more::derive::From, ::openvm_circuit::derive::AnyEnum)]
                 pub enum #periphery_type<F: PrimeField32> {
                     #[any_enum]
                     #source_name_upper(#source_periphery_type<F>),
                     #(#periphery_enum_fields)*
                 }
 
-                impl<F: PrimeField32> VmConfig<F> for #name {
+                impl<F: PrimeField32> ::openvm_circuit::arch::VmConfig<F> for #name {
                     type Executor = #executor_type<F>;
                     type Periphery = #periphery_type<F>;
 
-                    fn system(&self) -> &SystemConfig {
-                        VmConfig::<F>::system(&self.#source_name)
+                    fn system(&self) -> &::openvm_circuit::arch::SystemConfig {
+                        ::openvm_circuit::arch::VmConfig::<F>::system(&self.#source_name)
                     }
-                    fn system_mut(&mut self) -> &mut SystemConfig {
-                        VmConfig::<F>::system_mut(&mut self.#source_name)
+                    fn system_mut(&mut self) -> &mut ::openvm_circuit::arch::SystemConfig {
+                        ::openvm_circuit::arch::VmConfig::<F>::system_mut(&mut self.#source_name)
                     }
 
                     fn create_chip_complex(
                         &self,
-                    ) -> Result<VmChipComplex<F, Self::Executor, Self::Periphery>, VmInventoryError> {
+                    ) -> Result<::openvm_circuit::arch::VmChipComplex<F, Self::Executor, Self::Periphery>, ::openvm_circuit::arch::VmInventoryError> {
                         let complex = self.#source_name.create_chip_complex()?;
                         #(#create_chip_complex)*
                         Ok(complex)
diff --git a/extensions/algebra/circuit/src/config.rs b/extensions/algebra/circuit/src/config.rs
index a47d2ce171..3f2e83fef3 100644
--- a/extensions/algebra/circuit/src/config.rs
+++ b/extensions/algebra/circuit/src/config.rs
@@ -1,10 +1,6 @@
-use derive_more::derive::From;
 use num_bigint::BigUint;
-use openvm_circuit::arch::{
-    SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex, VmConfig, VmInventoryError,
-};
-use openvm_circuit_derive::{AnyEnum, InstructionExecutor, VmConfig};
-use openvm_circuit_primitives_derive::{Chip, ChipUsageGetter};
+use openvm_circuit::arch::SystemConfig;
+use openvm_circuit_derive::VmConfig;
 use openvm_rv32im_circuit::*;
 use openvm_stark_backend::p3_field::PrimeField32;
 use serde::{Deserialize, Serialize};
diff --git a/extensions/bigint/circuit/src/extension.rs b/extensions/bigint/circuit/src/extension.rs
index 8977d3ff47..b9eeeafd99 100644
--- a/extensions/bigint/circuit/src/extension.rs
+++ b/extensions/bigint/circuit/src/extension.rs
@@ -5,8 +5,7 @@ use openvm_bigint_transpiler::{
 };
 use openvm_circuit::{
     arch::{
-        SystemConfig, SystemExecutor, SystemPeriphery, SystemPort, VmChipComplex, VmConfig,
-        VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError,
+        SystemConfig, SystemPort, VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError,
     },
     system::phantom::PhantomChip,
 };
diff --git a/extensions/ecc/circuit/src/config.rs b/extensions/ecc/circuit/src/config.rs
index 91fa25eb91..ab8809aa6d 100644
--- a/extensions/ecc/circuit/src/config.rs
+++ b/extensions/ecc/circuit/src/config.rs
@@ -1,10 +1,6 @@
-use derive_more::derive::From;
 use openvm_algebra_circuit::*;
-use openvm_circuit::arch::{
-    SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex, VmConfig, VmInventoryError,
-};
-use openvm_circuit_derive::{AnyEnum, InstructionExecutor, VmConfig};
-use openvm_circuit_primitives_derive::{Chip, ChipUsageGetter};
+use openvm_circuit::arch::SystemConfig;
+use openvm_circuit_derive::VmConfig;
 use openvm_rv32im_circuit::*;
 use openvm_stark_backend::p3_field::PrimeField32;
 use serde::{Deserialize, Serialize};
diff --git a/extensions/keccak256/circuit/src/extension.rs b/extensions/keccak256/circuit/src/extension.rs
index 7f7749e53d..d24681fb55 100644
--- a/extensions/keccak256/circuit/src/extension.rs
+++ b/extensions/keccak256/circuit/src/extension.rs
@@ -1,8 +1,7 @@
 use derive_more::derive::From;
 use openvm_circuit::{
     arch::{
-        SystemConfig, SystemExecutor, SystemPeriphery, SystemPort, VmChipComplex, VmConfig,
-        VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError,
+        SystemConfig, SystemPort, VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError,
     },
     system::phantom::PhantomChip,
 };
diff --git a/extensions/native/circuit/src/extension.rs b/extensions/native/circuit/src/extension.rs
index fbaf11ff74..8f73423e40 100644
--- a/extensions/native/circuit/src/extension.rs
+++ b/extensions/native/circuit/src/extension.rs
@@ -6,8 +6,8 @@ use loadstore_native_adapter::NativeLoadStoreAdapterChip;
 use native_vectorized_adapter::NativeVectorizedAdapterChip;
 use openvm_circuit::{
     arch::{
-        ExecutionBridge, MemoryConfig, SystemConfig, SystemExecutor, SystemPeriphery, SystemPort,
-        VmChipComplex, VmConfig, VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError,
+        ExecutionBridge, MemoryConfig, SystemConfig, SystemPort, VmExtension, VmInventory,
+        VmInventoryBuilder, VmInventoryError,
     },
     system::phantom::PhantomChip,
 };
diff --git a/extensions/pairing/circuit/src/config.rs b/extensions/pairing/circuit/src/config.rs
index 97bd242e32..4914fa433c 100644
--- a/extensions/pairing/circuit/src/config.rs
+++ b/extensions/pairing/circuit/src/config.rs
@@ -1,10 +1,6 @@
-use derive_more::derive::From;
 use openvm_algebra_circuit::*;
-use openvm_circuit::arch::{
-    SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex, VmConfig, VmInventoryError,
-};
-use openvm_circuit_derive::{AnyEnum, InstructionExecutor, VmConfig};
-use openvm_circuit_primitives_derive::{Chip, ChipUsageGetter};
+use openvm_circuit::arch::SystemConfig;
+use openvm_circuit_derive::VmConfig;
 use openvm_ecc_circuit::*;
 use openvm_rv32im_circuit::*;
 use openvm_stark_backend::p3_field::PrimeField32;
diff --git a/extensions/rv32im/circuit/src/extension.rs b/extensions/rv32im/circuit/src/extension.rs
index 9c6063468a..f1f67d3994 100644
--- a/extensions/rv32im/circuit/src/extension.rs
+++ b/extensions/rv32im/circuit/src/extension.rs
@@ -1,8 +1,7 @@
 use derive_more::derive::From;
 use openvm_circuit::{
     arch::{
-        SystemConfig, SystemExecutor, SystemPeriphery, SystemPort, VmChipComplex, VmConfig,
-        VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError,
+        SystemConfig, SystemPort, VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError,
     },
     system::phantom::PhantomChip,
 };
diff --git a/extensions/sha256/circuit/src/extension.rs b/extensions/sha256/circuit/src/extension.rs
index 49cc57236c..76a6c1ec0c 100644
--- a/extensions/sha256/circuit/src/extension.rs
+++ b/extensions/sha256/circuit/src/extension.rs
@@ -1,9 +1,6 @@
 use derive_more::derive::From;
 use openvm_circuit::{
-    arch::{
-        SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex, VmConfig, VmExtension,
-        VmInventory, VmInventoryBuilder, VmInventoryError,
-    },
+    arch::{SystemConfig, VmExtension, VmInventory, VmInventoryBuilder, VmInventoryError},
     system::phantom::PhantomChip,
 };
 use openvm_circuit_derive::{AnyEnum, InstructionExecutor, VmConfig};


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This PR fixes the usage of the derive macro in order to use absolute paths for structs, ensuring consistency across the codebase. The changes include:
- Removing unused or redundant imports in several extension and configuration files.
- Updating derive macro annotations to reference absolute paths.
- Adjusting type paths in the vm derive crate for consistency with the new absolute path format.

### Reviewed Changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated no comments.

<details>
<summary>Show a summary per file</summary>

| File | Description |
| ---- | ----------- |
| extensions/sha256/circuit/src/extension.rs | Removed unused imports in the arch module to align with the fix. |
| extensions/rv32im/circuit/src/extension.rs | Simplified the import list by removing unused types. |
| extensions/pairing/circuit/src/config.rs | Updated import statements to use absolute paths for SystemConfig and VmConfig. |
| extensions/native/circuit/src/extension.rs | Adjusted import order and removed unused items for consistency. |
| extensions/keccak256/circuit/src/extension.rs | Cleaned up imports in the arch module. |
| extensions/ecc/circuit/src/config.rs | Reduced imports to only the necessary absolute paths. |
| extensions/bigint/circuit/src/extension.rs | Removed redundant items from the arch module import list. |
| extensions/algebra/circuit/src/config.rs | Updated import statements to use absolute paths in line with the PR purpose. |
| crates/vm/derive/src/lib.rs | Updated derive macro annotations and type path references to use absolute paths. |
| crates/toolchain/tests/tests/transpiler_tests.rs | Removed unused derive import to reflect the changes in derive macros. |
</details>





state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-01T16:02:51Z
user: login: jonathanpwang
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-01T16:58:04Z
user: login: shuklaayush
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-04-01T18:11:26Z
user: login: jonathanpwang
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-01T19:02:28Z
user: login: jonathanpwang
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-01T19:04:12Z

Review comments:
diff_hunk: @@ -344,34 +347,34 @@ pub fn vm_generic_config_derive(input: proc_macro::TokenStream) -> proc_macro::T
             let periphery_type = Ident::new(&format!("{}Periphery", name), name.span());
 
             TokenStream::from(quote! {
-                #[derive(ChipUsageGetter, Chip, InstructionExecutor, From, AnyEnum)]
-                pub enum #executor_type<F: PrimeField32> {
+                #[derive(::openvm_circuit::circuit_derive::ChipUsageGetter, ::openvm_circuit::circuit_derive::Chip, ::openvm_circuit::derive::InstructionExecutor, ::derive_more::From, ::openvm_circuit::derive::AnyEnum)]
+                pub enum #executor_type<F: ::openvm_stark_backend::p3_field::PrimeField32> {
                     #[any_enum]
                     #source_name_upper(#source_executor_type<F>),
                     #(#executor_enum_fields)*
                 }
 
-                #[derive(ChipUsageGetter, Chip, From, AnyEnum)]
-                pub enum #periphery_type<F: PrimeField32> {
+                #[derive(::openvm_circuit::circuit_derive::ChipUsageGetter, ::openvm_circuit::circuit_derive::Chip, ::derive_more::From, ::openvm_circuit::derive::AnyEnum)]
+                pub enum #periphery_type<F: ::openvm_stark_backend::p3_field::PrimeField32> {
                     #[any_enum]
                     #source_name_upper(#source_periphery_type<F>),
                     #(#periphery_enum_fields)*
                 }
 
-                impl<F: PrimeField32> VmConfig<F> for #name {
+                impl<F: ::openvm_stark_backend::p3_field::PrimeField32> ::openvm_circuit::arch::VmConfig<F> for #name {
path: crates/vm/derive/src/lib.rs
user: login: jonathanpwang
body: it seems a good quality of life change to assume you must have `openvm-circuit` imported, but not everything needs `openvm-stark-backend` perhaps (it might just import `openvm-stark-sdk`). we could either just leave `PrimeField32` and require people to figure out how to import it themselves, or we do have a re-export `openvm-stark-backend` from `openvm-circuit`
created_at: 2025-04-01T16:58:04Z
author_association: CONTRIBUTOR
diff_hunk: @@ -344,34 +347,34 @@ pub fn vm_generic_config_derive(input: proc_macro::TokenStream) -> proc_macro::T
             let periphery_type = Ident::new(&format!("{}Periphery", name), name.span());
 
             TokenStream::from(quote! {
-                #[derive(ChipUsageGetter, Chip, InstructionExecutor, From, AnyEnum)]
-                pub enum #executor_type<F: PrimeField32> {
+                #[derive(::openvm_circuit::circuit_derive::ChipUsageGetter, ::openvm_circuit::circuit_derive::Chip, ::openvm_circuit::derive::InstructionExecutor, ::derive_more::From, ::openvm_circuit::derive::AnyEnum)]
+                pub enum #executor_type<F: ::openvm_stark_backend::p3_field::PrimeField32> {
                     #[any_enum]
                     #source_name_upper(#source_executor_type<F>),
                     #(#executor_enum_fields)*
                 }
 
-                #[derive(ChipUsageGetter, Chip, From, AnyEnum)]
-                pub enum #periphery_type<F: PrimeField32> {
+                #[derive(::openvm_circuit::circuit_derive::ChipUsageGetter, ::openvm_circuit::circuit_derive::Chip, ::derive_more::From, ::openvm_circuit::derive::AnyEnum)]
+                pub enum #periphery_type<F: ::openvm_stark_backend::p3_field::PrimeField32> {
                     #[any_enum]
                     #source_name_upper(#source_periphery_type<F>),
                     #(#periphery_enum_fields)*
                 }
 
-                impl<F: PrimeField32> VmConfig<F> for #name {
+                impl<F: ::openvm_stark_backend::p3_field::PrimeField32> ::openvm_circuit::arch::VmConfig<F> for #name {
path: crates/vm/derive/src/lib.rs
user: login: shuklaayush
body: makes sense. left it to be imported by the user
created_at: 2025-04-01T18:11:26Z
author_association: COLLABORATOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-01T16:09:00Z
body: <!--Benchmark Results-->
| group | app.proof_time_ms | app.cycles | app.cells_used | leaf.proof_time_ms | leaf.cycles | leaf.cells_used |
| -- | -- | -- | -- | -- | -- | -- |
| [verify_fibair](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/verify_fibair-6237e8014edd13cde715c92d791b08ffc94d51b8.md) |<span style='color: red'>(+5 [+0.4%])</span> 1,268 |  334,016 |  17,675,786 |- | - | - |
| [fibonacci_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/fibonacci-6237e8014edd13cde715c92d791b08ffc94d51b8.md) |<span style='color: green'>(-15 [-0.5%])</span> 2,787 |  1,500,277 |  50,589,503 |- | - | - |
| [regex_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/regex-6237e8014edd13cde715c92d791b08ffc94d51b8.md) |<span style='color: green'>(-64 [-0.8%])</span> 8,317 |  4,165,226 |  166,511,152 |- | - | - |
| [ecrecover_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/ecrecover-6237e8014edd13cde715c92d791b08ffc94d51b8.md) |<span style='color: red'>(+53 [+3.8%])</span> 1,463 |  289,447 |  14,470,186 |- | - | - |
| [pairing](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/pairing-6237e8014edd13cde715c92d791b08ffc94d51b8.md) |<span style='color: red'>(+17 [+0.3%])</span> 4,902 |  1,820,436 |  95,832,407 |- | - | - |


Commit: https://github.com/openvm-org/openvm/commit/6237e8014edd13cde715c92d791b08ffc94d51b8

[Benchmark Workflow](https://github.com/openvm-org/openvm/actions/runs/14200444359)

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-01T16:55:31Z
body: <!--Benchmark Results-->
| group | app.proof_time_ms | app.cycles | app.cells_used | leaf.proof_time_ms | leaf.cycles | leaf.cells_used |
| -- | -- | -- | -- | -- | -- | -- |
| [verify_fibair](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/verify_fibair-df53db8265cb631e1d0e146f94960e16375326c8.md) |<span style='color: red'>(+27 [+2.1%])</span> 1,290 |  334,086 |  17,676,626 |- | - | - |
| [fibonacci_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/fibonacci-df53db8265cb631e1d0e146f94960e16375326c8.md) |<span style='color: green'>(-29 [-1.0%])</span> 2,773 |  1,500,277 |  50,589,503 |- | - | - |
| [regex_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/regex-df53db8265cb631e1d0e146f94960e16375326c8.md) |<span style='color: green'>(-14 [-0.2%])</span> 8,367 |  4,165,226 |  166,511,152 |- | - | - |
| [ecrecover_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/ecrecover-df53db8265cb631e1d0e146f94960e16375326c8.md) |<span style='color: red'>(+62 [+4.4%])</span> 1,472 |  289,447 |  14,470,186 |- | - | - |
| [pairing](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/pairing-df53db8265cb631e1d0e146f94960e16375326c8.md) |<span style='color: red'>(+42 [+0.9%])</span> 4,927 |  1,820,436 |  95,832,407 |- | - | - |


Commit: https://github.com/openvm-org/openvm/commit/df53db8265cb631e1d0e146f94960e16375326c8

[Benchmark Workflow](https://github.com/openvm-org/openvm/actions/runs/14201372146)

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-01T17:50:32Z
body: <!--Benchmark Results-->
| group | app.proof_time_ms | app.cycles | app.cells_used | leaf.proof_time_ms | leaf.cycles | leaf.cells_used |
| -- | -- | -- | -- | -- | -- | -- |
| [verify_fibair](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/verify_fibair-a12d24217f4714464c9846fbf19ea2b88f512add.md) |<span style='color: red'>(+14 [+1.1%])</span> 1,277 |  334,014 |  17,675,762 |- | - | - |
| [fibonacci_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/fibonacci-a12d24217f4714464c9846fbf19ea2b88f512add.md) |<span style='color: green'>(-35 [-1.2%])</span> 2,767 |  1,500,277 |  50,589,503 |- | - | - |
| [regex_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/regex-a12d24217f4714464c9846fbf19ea2b88f512add.md) |<span style='color: green'>(-107 [-1.3%])</span> 8,274 |  4,165,226 |  166,511,152 |- | - | - |
| [ecrecover_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/ecrecover-a12d24217f4714464c9846fbf19ea2b88f512add.md) |<span style='color: red'>(+23 [+1.6%])</span> 1,433 |  289,447 |  14,470,186 |- | - | - |
| [pairing](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/pairing-a12d24217f4714464c9846fbf19ea2b88f512add.md) |<span style='color: red'>(+29 [+0.6%])</span> 4,914 |  1,820,436 |  95,832,407 |- | - | - |


Commit: https://github.com/openvm-org/openvm/commit/a12d24217f4714464c9846fbf19ea2b88f512add

[Benchmark Workflow](https://github.com/openvm-org/openvm/actions/runs/14202434406)

author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-01T19:20:54Z
body: <!--Benchmark Results-->
| group | app.proof_time_ms | app.cycles | app.cells_used | leaf.proof_time_ms | leaf.cycles | leaf.cells_used |
| -- | -- | -- | -- | -- | -- | -- |
| [verify_fibair](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/verify_fibair-144eb87a1e3588b305b161d0e276e428b151336b.md) |<span style='color: green'>(-6 [-0.5%])</span> 1,276 |  334,005 |  17,675,654 |- | - | - |
| [fibonacci_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/fibonacci-144eb87a1e3588b305b161d0e276e428b151336b.md) |<span style='color: green'>(-5 [-0.2%])</span> 2,773 |  1,500,277 |  50,589,503 |- | - | - |
| [regex_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/regex-144eb87a1e3588b305b161d0e276e428b151336b.md) |<span style='color: green'>(-130 [-1.5%])</span> 8,318 |  4,165,226 |  166,511,152 |- | - | - |
| [ecrecover_program](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/ecrecover-144eb87a1e3588b305b161d0e276e428b151336b.md) |<span style='color: red'>(+12 [+0.8%])</span> 1,437 |  289,447 |  14,470,186 |- | - | - |
| [pairing](https://github.com/openvm-org/openvm/blob/benchmark-results/benchmarks-pr/1550/pairing-144eb87a1e3588b305b161d0e276e428b151336b.md) |<span style='color: green'>(-75 [-1.5%])</span> 4,911 |  1,820,436 |  95,832,407 |- | - | - |


Commit: https://github.com/openvm-org/openvm/commit/144eb87a1e3588b305b161d0e276e428b151336b

[Benchmark Workflow](https://github.com/openvm-org/openvm/actions/runs/14204098015)

author_association: NONE