zk: Move export_witness_json() to zk module.

zkas should be kept dependency-free.
This commit is contained in:
parazyd
2023-10-27 09:05:24 +02:00
parent 299e70fea8
commit 54ad30201f
4 changed files with 52 additions and 54 deletions

View File

@@ -314,8 +314,6 @@ zk = [
zkas = [
"darkfi-serial",
"zk",
]
# -----END LIBRARY FEATURES-----

View File

@@ -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<P: AsRef<Path>>(
output_path: P,
prover_witnesses: &Vec<Witness>,
public_inputs: &Vec<pallas::Base>,
) {
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");
}

View File

@@ -56,6 +56,3 @@ pub use compiler::Compiler;
/// Decoder module
pub mod decoder;
pub use decoder::ZkBinary;
#[cfg(feature = "tinyjson")]
pub mod util;

View File

@@ -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<P: AsRef<Path>>(
output_path: P,
prover_witnesses: &Vec<Witness>,
public_inputs: &Vec<pallas::Base>,
) {
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");
}