Skip to content
This repository was archived by the owner on Apr 18, 2025. It is now read-only.

Commit cf71a0e

Browse files
committed
batch proof load/save
1 parent 3cf9779 commit cf71a0e

File tree

5 files changed

+40
-22
lines changed

5 files changed

+40
-22
lines changed

Diff for: Cargo.lock

+13-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: prover/src/aggregator/prover.rs

+15-4
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,28 @@ impl Prover {
8787
.or_else(|| self.raw_vk_bundle.clone())
8888
}
8989

90-
// Return the EVM proof for verification.
90+
// Return the batch proof for a BatchProvingTask.
91+
// TODO: should we rename the method name to `load_or_gen_batch_proof`?
9192
pub fn gen_batch_proof(
9293
&mut self,
9394
batch: BatchProvingTask,
9495
name: Option<&str>,
9596
output_dir: Option<&str>,
9697
) -> Result<BatchProof> {
9798
let name = name.map_or_else(|| batch.identifier(), |name| name.to_string());
99+
log::info!("gen_batch_proof with identifier {name}");
100+
101+
if let Some(output_dir) = output_dir {
102+
if let Ok(batch_proof) = BatchProof::from_json_file(output_dir, &name) {
103+
log::info!("batch proof loaded from {output_dir}");
104+
return Ok(batch_proof);
105+
}
106+
}
98107

99108
let (layer3_snark, batch_hash) =
100109
self.load_or_gen_last_agg_snark::<MAX_AGG_SNARKS>(&name, batch, output_dir)?;
101110

102-
// Load or generate final compression thin EVM proof (layer-4).
111+
// Load or generate batch compression thin proof (layer-4).
103112
let layer4_snark = self.prover_impl.load_or_gen_comp_snark(
104113
&name,
105114
LayerId::Layer4.id(),
@@ -108,14 +117,16 @@ impl Prover {
108117
layer3_snark,
109118
output_dir,
110119
)?;
111-
log::info!("Got final compression thin EVM proof (layer-4): {name}");
120+
log::info!("Got batch compression thin proof (layer-4): {name}");
112121

113122
self.check_batch_vk();
114123

115124
let pk = self.prover_impl.pk(LayerId::Layer4.id());
116125
let batch_proof = BatchProof::new(layer4_snark, pk, batch_hash)?;
117126
if let Some(output_dir) = output_dir {
118-
batch_proof.dump(output_dir, "agg")?;
127+
batch_proof.dump_vk(output_dir, "agg")?;
128+
batch_proof.dump(output_dir, &name)?;
129+
log::debug!("batch proof dumped to {output_dir}");
119130
}
120131

121132
Ok(batch_proof)

Diff for: prover/src/common/verifier.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ impl<C: CircuitExt<Fr>> Verifier<C> {
3333
}
3434

3535
pub fn from_params_dir(params_dir: &str, degree: u32, vk: &[u8]) -> Self {
36-
let params = load_params(params_dir, degree, None).unwrap();
36+
let params = load_params(params_dir, degree, None).expect("load params failed");
3737

3838
Self::from_params(params, vk)
3939
}

Diff for: prover/src/io.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ pub fn serialize_vk(vk: &VerifyingKey<G1Affine>) -> Vec<u8> {
102102

103103
pub fn deserialize_vk<C: Circuit<Fr>>(raw_vk: &[u8]) -> VerifyingKey<G1Affine> {
104104
VerifyingKey::<G1Affine>::read::<_, C>(&mut Cursor::new(raw_vk), SerdeFormat::Processed)
105-
.unwrap()
105+
.unwrap_or_else(|_| panic!("failed to deserialize vk with len {}", raw_vk.len()))
106106
}
107107

108108
pub fn write_snark(file_path: &str, snark: &Snark) {

Diff for: prover/src/proof/batch.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,18 @@ impl BatchProof {
4545
from_json_file(dir, &dump_filename(name))
4646
}
4747

48-
pub fn dump(&self, dir: &str, name: &str) -> Result<()> {
48+
pub fn dump_vk(&self, dir: &str, name: &str) -> Result<()> {
4949
let filename = dump_filename(name);
50+
if self.proof.vk.is_empty() {
51+
log::warn!("batch proof vk is empty, skip dumping");
52+
} else {
53+
dump_vk(dir, &filename, &self.proof.vk)
54+
}
55+
Ok(())
56+
}
5057

51-
dump_vk(dir, &filename, &self.proof.vk);
52-
58+
pub fn dump(&self, dir: &str, name: &str) -> Result<()> {
59+
let filename = dump_filename(name);
5360
dump_as_json(dir, &filename, &self)
5461
}
5562
}

0 commit comments

Comments
 (0)