diff --git a/Cargo.toml b/Cargo.toml index 84efa227f..9629f57a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -314,8 +314,6 @@ zk = [ zkas = [ "darkfi-serial", - - "zk", ] # -----END LIBRARY FEATURES----- diff --git a/src/zk/mod.rs b/src/zk/mod.rs index a6e5a808a..a73596880 100644 --- a/src/zk/mod.rs +++ b/src/zk/mod.rs @@ -58,3 +58,55 @@ where |mut region| region.assign_advice(|| "load private", column, 0, || value), ) } + +#[cfg(feature = "tinyjson")] +use darkfi_sdk::pasta::pallas; +#[cfg(feature = "tinyjson")] +use std::{collections::HashMap, fs::File, io::Write, path::Path}; +#[cfg(feature = "tinyjson")] +use tinyjson::JsonValue::{Array as JsonArray, Object as JsonObj, String as JsonStr}; + +#[cfg(feature = "tinyjson")] +/// Export witness.json which can be used by zkrunner for debugging circuits +pub fn export_witness_json>( + output_path: P, + prover_witnesses: &Vec, + public_inputs: &Vec, +) { + let mut witnesses = Vec::new(); + for witness in prover_witnesses { + let mut value_json = HashMap::new(); + match witness { + Witness::Base(value) => { + value.map(|w1| { + value_json.insert("Base".to_string(), JsonStr(format!("{:?}", w1))); + w1 + }); + } + Witness::Scalar(value) => { + value.map(|w1| { + value_json.insert("Scalar".to_string(), JsonStr(format!("{:?}", w1))); + w1 + }); + } + _ => unimplemented!(), + } + witnesses.push(JsonObj(value_json)); + } + + let mut instances = Vec::new(); + for instance in public_inputs { + instances.push(JsonStr(format!("{:?}", instance))); + } + + let witnesses_json = JsonArray(witnesses); + let instances_json = JsonArray(instances); + let witness_json = JsonObj(HashMap::from([ + ("witnesses".to_string(), witnesses_json), + ("instances".to_string(), instances_json), + ])); + // This is a debugging method. We don't care about .expect() crashing. + let json = witness_json.format().expect("cannot create debug json"); + let mut output = File::create(output_path).expect("cannot write file"); + output.write_all(json.as_bytes()).expect("write failed"); +} diff --git a/src/zkas/mod.rs b/src/zkas/mod.rs index 609e1537a..27441c751 100644 --- a/src/zkas/mod.rs +++ b/src/zkas/mod.rs @@ -56,6 +56,3 @@ pub use compiler::Compiler; /// Decoder module pub mod decoder; pub use decoder::ZkBinary; - -#[cfg(feature = "tinyjson")] -pub mod util; diff --git a/src/zkas/util.rs b/src/zkas/util.rs deleted file mode 100644 index 46320f424..000000000 --- a/src/zkas/util.rs +++ /dev/null @@ -1,49 +0,0 @@ -use darkfi_sdk::pasta::pallas; -use std::{collections::HashMap, fs::File, io::Write, path::Path}; -use tinyjson::JsonValue::{Array as JsonArray, Object as JsonObj, String as JsonStr}; - -use crate::zk::Witness; - -/// Export witness.json which can be used by zkrunner for debugging circuits -pub fn export_witness_json>( - output_path: P, - prover_witnesses: &Vec, - public_inputs: &Vec, -) { - let mut witnesses = Vec::new(); - for witness in prover_witnesses { - let mut value_json = HashMap::new(); - match witness { - Witness::Base(value) => { - value.map(|w1| { - value_json.insert("Base".to_string(), JsonStr(format!("{:?}", w1))); - w1 - }); - } - Witness::Scalar(value) => { - value.map(|w1| { - value_json.insert("Scalar".to_string(), JsonStr(format!("{:?}", w1))); - w1 - }); - } - _ => unimplemented!(), - } - witnesses.push(JsonObj(value_json)); - } - - let mut instances = Vec::new(); - for instance in public_inputs { - instances.push(JsonStr(format!("{:?}", instance))); - } - - let witnesses_json = JsonArray(witnesses); - let instances_json = JsonArray(instances); - let witness_json = JsonObj(HashMap::from([ - ("witnesses".to_string(), witnesses_json), - ("instances".to_string(), instances_json), - ])); - // This is a debugging method. We don't care about .expect() crashing. - let json = witness_json.format().expect("cannot create debug json"); - let mut output = File::create(output_path).expect("cannot write file"); - output.write_all(json.as_bytes()).expect("write failed"); -}