This repository was archived by the owner on Apr 18, 2025. It is now read-only.
forked from privacy-scaling-explorations/zkevm-circuits
-
Notifications
You must be signed in to change notification settings - Fork 390
/
Copy pathcompression.rs
60 lines (56 loc) · 1.88 KB
/
compression.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use super::Prover;
use crate::{
config::layer_config_path,
io::{load_snark, write_snark},
utils::gen_rng,
};
use anyhow::{anyhow, Result};
use compression::{utils::ce_snark_to_snark, CompressionCircuit};
use rand::Rng;
use snark_verifier_sdk::Snark;
use ce_snark_verifier_sdk::halo2::aggregation::AggregationConfigParams;
use std::env;
impl<'params> Prover<'params> {
pub fn gen_comp_snark(
&mut self,
id: &str,
has_accumulator: bool,
degree: u32,
mut rng: impl Rng + Send,
prev_snark: Snark,
) -> Result<Snark> {
env::set_var("COMPRESSION_CONFIG", layer_config_path(id));
let circuit =
CompressionCircuit::new(AggregationConfigParams::from_path(layer_config_path(id)), self.params(degree), prev_snark, has_accumulator, &mut rng)
.map_err(|err| anyhow!("Failed to construct compression circuit: {err:?}"))?;
let ce_snark = self.gen_snark_ce(id, degree, &mut rng, circuit, "gen_comp_snark")?;
Ok(ce_snark_to_snark(ce_snark))
}
pub fn load_or_gen_comp_snark(
&mut self,
name: &str,
id: &str,
has_accumulator: bool,
degree: u32,
prev_snark: Snark,
output_dir: Option<&str>,
) -> Result<Snark> {
let file_path = format!(
"{}/compression_snark_{}_{}.json",
output_dir.unwrap_or_default(),
id,
name
);
match output_dir.and_then(|_| load_snark(&file_path).ok().flatten()) {
Some(snark) => Ok(snark),
None => {
let rng = gen_rng();
let result = self.gen_comp_snark(id, has_accumulator, degree, rng, prev_snark);
if let (Some(_), Ok(snark)) = (output_dir, &result) {
write_snark(&file_path, snark);
}
result
}
}
}
}