#[path = "../src/artifact.rs"]
mod artifact;
use std::io::Read;
use tasm_lib::triton_vm::prelude::*;
fn main() {
let args: Vec<_> = std::env::args().skip(1).collect();
assert_eq!(
args.len(),
4,
"JSON OUTPUT_PREFIX MEASURED_CYCLES MEASURED_PROVING_MS"
);
let mut bytes = Vec::new();
std::fs::File::open(&args[0])
.unwrap()
.take(64 * 1024 * 1024 + 1)
.read_to_end(&mut bytes)
.unwrap();
assert!(bytes.len() <= 64 * 1024 * 1024);
let value: serde_json::Value = serde_json::from_slice(&bytes).unwrap();
for fields in [
&value["proof"],
&value["claim"]["input"],
&value["claim"]["output"],
] {
assert!(fields
.as_array()
.unwrap()
.iter()
.all(|v| v.as_u64().is_some_and(|n| n < BFieldElement::P)));
}
let claim: Claim = serde_json::from_value(value["claim"].clone()).unwrap();
let proof: Proof = serde_json::from_value(value["proof"].clone()).unwrap();
assert_eq!(claim.version, 5);
assert_eq!(
serde_json::to_value(&claim).unwrap(),
value["claim"],
"noncanonical claim encoding"
);
artifact::write(
std::path::Path::new(&args[1]),
&claim,
&proof,
args[2].parse().unwrap(),
args[3].parse().unwrap(),
);
}