diff --git a/src/circom/builder.rs b/src/circom/builder.rs index ab20303..2b1ab5d 100644 --- a/src/circom/builder.rs +++ b/src/circom/builder.rs @@ -7,7 +7,10 @@ use super::{CircomCircuit, R1CS}; use num_bigint::BigInt; use std::collections::HashMap; -use crate::{circom::R1CSFile, witness::WitnessCalculator}; +use crate::{ + circom::R1CSFile, + witness::{Wasm, WitnessCalculator}, +}; use color_eyre::Result; #[derive(Debug)] @@ -38,6 +41,19 @@ impl CircomConfig { sanity_check: false, }) } + + pub fn new_from_wasm(wasm: Wasm, r1cs: impl AsRef) -> Result { + let mut store = Store::default(); + let wtns = WitnessCalculator::new_from_wasm(&mut store, wasm).unwrap(); + let reader = File::open(r1cs)?; + let r1cs = R1CSFile::new(reader)?.into(); + Ok(Self { + wtns, + r1cs, + store, + sanity_check: false, + }) + } } impl CircomBuilder { diff --git a/src/witness/witness_calculator.rs b/src/witness/witness_calculator.rs index 323bb80..ce73edc 100644 --- a/src/witness/witness_calculator.rs +++ b/src/witness/witness_calculator.rs @@ -57,10 +57,6 @@ impl WitnessCalculator { Self::from_file(store, path) } - pub fn new_from_wasm(store: &mut Store, wasm: Wasm) -> Result { - Self::from_wasm(store, wasm) - } - pub fn from_file(store: &mut Store, path: impl AsRef) -> Result { let module = Module::from_file(&store, path)?; Self::from_module(store, module) @@ -68,7 +64,7 @@ impl WitnessCalculator { pub fn from_module(store: &mut Store, module: Module) -> Result { let wasm = Self::make_wasm_runtime(store, module)?; - Self::from_wasm(store, wasm) + Self::new_from_wasm(store, wasm) } pub fn make_wasm_runtime(store: &mut Store, module: Module) -> Result { @@ -99,7 +95,7 @@ impl WitnessCalculator { Ok(wasm) } - pub fn from_wasm(store: &mut Store, wasm: Wasm) -> Result { + pub fn new_from_wasm(store: &mut Store, wasm: Wasm) -> Result { let version = wasm.get_version(store).unwrap_or(1); // Circom 2 feature flag with version 2 #[cfg(feature = "circom-2")]