From 8eab6dce2891c9f550827ee1d2dc2b7c00cc4862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex?= Date: Fri, 29 May 2026 18:56:50 +0200 Subject: [PATCH] feat: Expose all circuit artifacts via macro. (#37) --- .../src/artifacts.rs | 45 +++++++++++++++++++ .../src/lib.rs | 1 + .../src/lib.rs | 2 +- .../src/native.rs | 5 +-- .../src/lib.rs | 2 +- .../src/native.rs | 5 +-- .../src/lib.rs | 2 +- .../src/native.rs | 5 +-- .../src/lib.rs | 2 +- .../src/native.rs | 7 +-- 10 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 rust/logos-blockchain-circuits-common/src/artifacts.rs diff --git a/rust/logos-blockchain-circuits-common/src/artifacts.rs b/rust/logos-blockchain-circuits-common/src/artifacts.rs new file mode 100644 index 0000000..3da9fa9 --- /dev/null +++ b/rust/logos-blockchain-circuits-common/src/artifacts.rs @@ -0,0 +1,45 @@ +/// Generates a `pub mod artifacts` containing the circuit compilation +/// artifacts. +/// +/// The artifacts are loaded from the directory pointed to by +/// `LBC_{CIRCUIT}_LIB_DIR`, set by the crate's build script. +/// +/// # Generated items +/// +/// | Item | Description | +/// |-------------------------|-----------------------------------------| +/// | `PROVING_KEY_PATH` | Path to the proving key (`.zkey`) | +/// | `PROVING_KEY` | Proving key bytes | +/// | `VERIFICATION_KEY_PATH` | Path to the verification key (`.json`) | +/// | `VERIFICATION_KEY` | Verification key bytes | +/// | `CIRCUIT_DAT_PATH` | Path to the witness generator data | +/// | `CIRCUIT_DAT` | Witness generator data bytes | +/// +/// # Example +/// +/// ```ignore +/// lbc_common::circuit_artifacts!("POQ"); // uses LBC_POQ_LIB_DIR +/// ``` +#[macro_export] +macro_rules! circuit_artifacts { + ($circuit_stem:literal) => { + pub mod artifacts { + macro_rules! __circuit_file { + ($file:literal) => { + concat!(env!(concat!("LBC_", $circuit_stem, "_LIB_DIR")), "/", $file) + }; + } + + pub const PROVING_KEY_PATH: &str = __circuit_file!("proving_key.zkey"); + pub static PROVING_KEY: &[u8] = include_bytes!(__circuit_file!("proving_key.zkey")); + + pub const VERIFICATION_KEY_PATH: &str = __circuit_file!("verification_key.json"); + pub static VERIFICATION_KEY: &[u8] = + include_bytes!(__circuit_file!("verification_key.json")); + + pub const CIRCUIT_DAT_PATH: &str = __circuit_file!("witness_generator.dat"); + pub static CIRCUIT_DAT: &[u8] = + include_bytes!(__circuit_file!("witness_generator.dat")); + } + }; +} diff --git a/rust/logos-blockchain-circuits-common/src/lib.rs b/rust/logos-blockchain-circuits-common/src/lib.rs index d245b85..44ee970 100644 --- a/rust/logos-blockchain-circuits-common/src/lib.rs +++ b/rust/logos-blockchain-circuits-common/src/lib.rs @@ -1 +1,2 @@ +pub mod artifacts; pub mod string; diff --git a/rust/logos-blockchain-circuits-poc-sys/src/lib.rs b/rust/logos-blockchain-circuits-poc-sys/src/lib.rs index a90e5f1..71cace8 100644 --- a/rust/logos-blockchain-circuits-poc-sys/src/lib.rs +++ b/rust/logos-blockchain-circuits-poc-sys/src/lib.rs @@ -1,4 +1,4 @@ mod ffi; pub mod native; -pub use native::{PocWitnessInput, generate_witness, generate_witness_from_files}; +pub use native::{PocWitnessInput, artifacts, generate_witness, generate_witness_from_files}; diff --git a/rust/logos-blockchain-circuits-poc-sys/src/native.rs b/rust/logos-blockchain-circuits-poc-sys/src/native.rs index bbc6527..3666c03 100644 --- a/rust/logos-blockchain-circuits-poc-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-poc-sys/src/native.rs @@ -8,12 +8,11 @@ use lbc_types::{ use crate::ffi::{poc_generate_witness, poc_generate_witness_from_files}; -static RAW_CIRCUIT_DAT: &[u8] = - include_bytes!(concat!(env!("LBC_POC_LIB_DIR"), "/witness_generator.dat")); +lbc_common::circuit_artifacts!("POC"); pub struct PocDat; impl<'dat> lbc_types::CircuitDat<'dat> for PocDat { - const DAT: &'dat [u8] = RAW_CIRCUIT_DAT; + const DAT: &'dat [u8] = artifacts::CIRCUIT_DAT; } pub type PocWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, PocDat>; diff --git a/rust/logos-blockchain-circuits-pol-sys/src/lib.rs b/rust/logos-blockchain-circuits-pol-sys/src/lib.rs index 2c5a80c..e4cbdeb 100644 --- a/rust/logos-blockchain-circuits-pol-sys/src/lib.rs +++ b/rust/logos-blockchain-circuits-pol-sys/src/lib.rs @@ -1,4 +1,4 @@ mod ffi; pub mod native; -pub use native::{PolWitnessInput, generate_witness, generate_witness_from_files}; +pub use native::{PolWitnessInput, artifacts, generate_witness, generate_witness_from_files}; diff --git a/rust/logos-blockchain-circuits-pol-sys/src/native.rs b/rust/logos-blockchain-circuits-pol-sys/src/native.rs index c177e0c..409c786 100644 --- a/rust/logos-blockchain-circuits-pol-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-pol-sys/src/native.rs @@ -8,12 +8,11 @@ use lbc_types::{ use crate::ffi::{pol_generate_witness, pol_generate_witness_from_files}; -static RAW_CIRCUIT_DAT: &[u8] = - include_bytes!(concat!(env!("LBC_POL_LIB_DIR"), "/witness_generator.dat")); +lbc_common::circuit_artifacts!("POL"); pub struct PolDat; impl<'dat> lbc_types::CircuitDat<'dat> for PolDat { - const DAT: &'dat [u8] = RAW_CIRCUIT_DAT; + const DAT: &'dat [u8] = artifacts::CIRCUIT_DAT; } pub type PolWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, PolDat>; diff --git a/rust/logos-blockchain-circuits-poq-sys/src/lib.rs b/rust/logos-blockchain-circuits-poq-sys/src/lib.rs index b52fc8e..e87ef3a 100644 --- a/rust/logos-blockchain-circuits-poq-sys/src/lib.rs +++ b/rust/logos-blockchain-circuits-poq-sys/src/lib.rs @@ -1,4 +1,4 @@ mod ffi; pub mod native; -pub use native::{PoqWitnessInput, generate_witness, generate_witness_from_files}; +pub use native::{PoqWitnessInput, artifacts, generate_witness, generate_witness_from_files}; diff --git a/rust/logos-blockchain-circuits-poq-sys/src/native.rs b/rust/logos-blockchain-circuits-poq-sys/src/native.rs index 0189e09..a721545 100644 --- a/rust/logos-blockchain-circuits-poq-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-poq-sys/src/native.rs @@ -8,12 +8,11 @@ use lbc_types::{ use crate::ffi::{poq_generate_witness, poq_generate_witness_from_files}; -static RAW_CIRCUIT_DAT: &[u8] = - include_bytes!(concat!(env!("LBC_POQ_LIB_DIR"), "/witness_generator.dat")); +lbc_common::circuit_artifacts!("POQ"); pub struct PoqDat; impl<'dat> lbc_types::CircuitDat<'dat> for PoqDat { - const DAT: &'dat [u8] = RAW_CIRCUIT_DAT; + const DAT: &'dat [u8] = artifacts::CIRCUIT_DAT; } pub type PoqWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, PoqDat>; diff --git a/rust/logos-blockchain-circuits-signature-sys/src/lib.rs b/rust/logos-blockchain-circuits-signature-sys/src/lib.rs index bad4692..eb248da 100644 --- a/rust/logos-blockchain-circuits-signature-sys/src/lib.rs +++ b/rust/logos-blockchain-circuits-signature-sys/src/lib.rs @@ -1,4 +1,4 @@ mod ffi; pub mod native; -pub use native::{SignatureWitnessInput, generate_witness, generate_witness_from_files}; +pub use native::{SignatureWitnessInput, artifacts, generate_witness, generate_witness_from_files}; diff --git a/rust/logos-blockchain-circuits-signature-sys/src/native.rs b/rust/logos-blockchain-circuits-signature-sys/src/native.rs index c2c847f..4a336f8 100644 --- a/rust/logos-blockchain-circuits-signature-sys/src/native.rs +++ b/rust/logos-blockchain-circuits-signature-sys/src/native.rs @@ -8,14 +8,11 @@ use lbc_types::{ use crate::ffi::{signature_generate_witness, signature_generate_witness_from_files}; -static RAW_CIRCUIT_DAT: &[u8] = include_bytes!(concat!( - env!("LBC_SIGNATURE_LIB_DIR"), - "/witness_generator.dat" -)); +lbc_common::circuit_artifacts!("SIGNATURE"); pub struct SignatureDat; impl<'dat> lbc_types::CircuitDat<'dat> for SignatureDat { - const DAT: &'dat [u8] = RAW_CIRCUIT_DAT; + const DAT: &'dat [u8] = artifacts::CIRCUIT_DAT; } pub type SignatureWitnessInput<'dat> = lbc_types::CircuitWitnessInput<'dat, SignatureDat>;