feat: Rapidsnark crate (#39)

This commit is contained in:
Álex 2026-05-29 21:14:17 +02:00 committed by GitHub
parent 2939c83a67
commit 0fdacbe01a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 86 additions and 10 deletions

7
rust/Cargo.lock generated
View File

@ -231,6 +231,13 @@ dependencies = [
"serde_json",
]
[[package]]
name = "logos-blockchain-circuits-rapidsnark-sys"
version = "0.5.0"
dependencies = [
"logos-blockchain-circuits-build",
]
[[package]]
name = "logos-blockchain-circuits-signature-sys"
version = "0.5.0"

View File

@ -18,6 +18,7 @@ members = [
"logos-blockchain-circuits-tests",
"logos-blockchain-circuits-types",
"logos-blockchain-circuits-common",
"logos-blockchain-circuits-rapidsnark-sys",
]
resolver = "3"
@ -28,6 +29,7 @@ lbc-build = { package = "logos-blockchain-circuits-build", path = "./logos-block
lbc-poc-sys = { package = "logos-blockchain-circuits-poc-sys", path = "./logos-blockchain-circuits-poc-sys" }
lbc-pol-sys = { package = "logos-blockchain-circuits-pol-sys", path = "./logos-blockchain-circuits-pol-sys" }
lbc-poq-sys = { package = "logos-blockchain-circuits-poq-sys", path = "./logos-blockchain-circuits-poq-sys" }
lbc-rapidsnark-sys = { package = "logos-blockchain-circuits-rapidsnark-sys", path = "./logos-blockchain-circuits-rapidsnark-sys" }
lbc-signature-sys = { package = "logos-blockchain-circuits-signature-sys", path = "./logos-blockchain-circuits-signature-sys" }
lbc-types = { default-features = false, package = "logos-blockchain-circuits-types", path = "./logos-blockchain-circuits-types" }

View File

@ -115,13 +115,13 @@ mod prebuilt {
}
}
pub fn build(circuit_name: &str) {
fn resolve_root() -> PathBuf {
println!("cargo:rerun-if-env-changed={LBC_ROOT_DIR}");
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
println!("cargo:rerun-if-changed=Cargo.toml");
println!("cargo:rerun-if-changed=build.rs");
let lbc_root_dir = std::env::var(LBC_ROOT_DIR).map_or_else(
let root = std::env::var(LBC_ROOT_DIR).map_or_else(
|_| {
#[cfg(not(feature = "prebuilt"))]
panic!(
@ -150,23 +150,30 @@ pub fn build(circuit_name: &str) {
},
);
let lbc_root_dir_str = lbc_root_dir
let root_str = root
.to_str()
.expect("Failed to convert the root directory path to a string");
let circuit_dir = lbc_root_dir.join(circuit_name);
println!("cargo:rustc-env={LBC_ROOT_DIR}={root_str}");
root
}
pub fn build_circuit(circuit_name: &str) {
let root = resolve_root();
let circuit_dir = root.join(circuit_name);
let circuit_dir_str = circuit_dir
.to_str()
.expect("Failed to convert the circuit directory path to a string");
let lib_dir = lbc_root_dir.join("lib");
let lib_dir = root.join("lib");
let lib_dir_str = lib_dir
.to_str()
.expect("Failed to convert the lib directory path to a string");
println!("cargo:rerun-if-changed={circuit_dir_str}");
println!("cargo:rerun-if-changed={lib_dir_str}");
println!("cargo:rustc-env={LBC_ROOT_DIR}={lbc_root_dir_str}");
println!("cargo:rustc-link-search=native={circuit_dir_str}");
println!("cargo:rustc-link-search=native={lib_dir_str}");
println!("cargo:rustc-link-lib=static={circuit_name}");
@ -177,3 +184,12 @@ pub fn build(circuit_name: &str) {
println!("cargo:rustc-link-lib={cpp_lib}");
println!("cargo:rustc-link-lib=static=gmp");
}
pub fn build_rapidsnark() {
let root = resolve_root();
for binary in ["prover", "verifier"] {
let path = root.join(binary);
println!("cargo:rerun-if-changed={}", path.display());
}
}

View File

@ -1,3 +1,3 @@
fn main() {
lbc_build::build("poc");
lbc_build::build_circuit("poc");
}

View File

@ -1,3 +1,3 @@
fn main() {
lbc_build::build("pol");
lbc_build::build_circuit("pol");
}

View File

@ -1,3 +1,3 @@
fn main() {
lbc_build::build("poq");
lbc_build::build_circuit("poq");
}

View File

@ -0,0 +1,22 @@
[package]
name = "logos-blockchain-circuits-rapidsnark-sys"
categories.workspace = true
description.workspace = true
edition.workspace = true
keywords.workspace = true
license.workspace = true
readme.workspace = true
repository.workspace = true
version.workspace = true
[features]
default = ["prebuilt"]
prebuilt = ["lbc-build/prebuilt"]
[lints]
workspace = true
[dependencies]
[build-dependencies]
lbc-build = { workspace = true }

View File

@ -0,0 +1,3 @@
fn main() {
lbc_build::build_rapidsnark();
}

View File

@ -0,0 +1,26 @@
use std::path::PathBuf;
#[cfg(target_os = "windows")]
const PROVER_BINARY: &str = "prover.exe";
#[cfg(not(target_os = "windows"))]
const PROVER_BINARY: &str = "prover";
#[cfg(target_os = "windows")]
const VERIFIER_BINARY: &str = "verifier.exe";
#[cfg(not(target_os = "windows"))]
const VERIFIER_BINARY: &str = "verifier";
#[must_use]
fn lbc_root_dir() -> PathBuf {
PathBuf::from(env!("LBC_ROOT_DIR"))
}
#[must_use]
pub fn prover() -> PathBuf {
lbc_root_dir().join(PROVER_BINARY)
}
#[must_use]
pub fn verifier() -> PathBuf {
lbc_root_dir().join(VERIFIER_BINARY)
}

View File

@ -1,3 +1,3 @@
fn main() {
lbc_build::build("signature");
lbc_build::build_circuit("signature");
}