Skip to content

Commit 135073c

Browse files
author
colinlyguo
committed
Reapply "feat: add euclidv2 verifier"
This reverts commit 7d5b77a.
1 parent bab0e4f commit 135073c

File tree

4 files changed

+155
-8
lines changed

4 files changed

+155
-8
lines changed

common/libzkp/impl/Cargo.lock

Lines changed: 73 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

common/libzkp/impl/Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ ruint = { git = "https://github.com/scroll-tech/uint.git", branch = "v1.12.3" }
1414
tiny-keccak = { git = "https://github.com/scroll-tech/tiny-keccak", branch = "scroll-patch-v2.0.2-openvm-v1.0.0-rc.1" }
1515

1616
[dependencies]
17-
euclid_prover = { git = "https://github.com/scroll-tech/zkvm-prover.git", tag = "v0.1.1-rc.2", package = "scroll-zkvm-prover" }
18-
euclid_verifier = { git = "https://github.com/scroll-tech/zkvm-prover.git", tag = "v0.1.1-rc.2", package = "scroll-zkvm-verifier" }
17+
euclid_prover = { git = "https://github.com/scroll-tech/zkvm-prover.git", tag = "v0.1.0-rc.6", package = "scroll-zkvm-prover" }
18+
euclid_verifier = { git = "https://github.com/scroll-tech/zkvm-prover.git", tag = "v0.1.0-rc.6", package = "scroll-zkvm-verifier" }
19+
euclidv2_prover = { git = "https://github.com/scroll-tech/zkvm-prover.git", tag = "v0.1.1-rc.2", package = "scroll-zkvm-prover" }
20+
euclidv2_verifier = { git = "https://github.com/scroll-tech/zkvm-prover.git", tag = "v0.1.1-rc.2", package = "scroll-zkvm-verifier" }
1921

2022
base64 = "0.13.0"
2123
env_logger = "0.9.0"

common/libzkp/impl/src/verifier.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
#![allow(static_mut_refs)]
22

33
mod euclid;
4+
mod euclidv2;
45

56
use anyhow::{bail, Result};
67
use euclid::EuclidVerifier;
8+
use euclidv2::EuclidV2Verifier;
79
use serde::{Deserialize, Serialize};
810
use std::{cell::OnceCell, path::Path, rc::Rc};
911

@@ -47,7 +49,17 @@ static mut VERIFIER_LOW: OnceCell<VerifierPair> = OnceCell::new();
4749
static mut VERIFIER_HIGH: OnceCell<VerifierPair> = OnceCell::new();
4850

4951
pub fn init(config: VerifierConfig) {
50-
let verifier = EuclidVerifier::new(&config.high_version_circuit.assets_path);
52+
let verifier = EuclidVerifier::new(&config.low_version_circuit.assets_path);
53+
unsafe {
54+
VERIFIER_LOW
55+
.set(VerifierPair(
56+
config.low_version_circuit.fork_name,
57+
Rc::new(Box::new(verifier)),
58+
))
59+
.unwrap_unchecked();
60+
}
61+
62+
let verifier = EuclidV2Verifier::new(&config.high_version_circuit.assets_path);
5163
unsafe {
5264
VERIFIER_LOW
5365
.set(VerifierPair(
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
use super::{ProofVerifier, TaskType, VKDump};
2+
3+
use anyhow::Result;
4+
5+
use crate::utils::panic_catch;
6+
use euclidv2_prover::{BatchProof, BundleProof, ChunkProof};
7+
use euclidv2_verifier::verifier::{BatchVerifier, BundleVerifier, ChunkVerifier};
8+
use std::{fs::File, path::Path};
9+
10+
pub struct EuclidV2Verifier {
11+
chunk_verifier: ChunkVerifier,
12+
batch_verifier: BatchVerifier,
13+
bundle_verifier: BundleVerifier,
14+
}
15+
16+
impl EuclidV2Verifier {
17+
pub fn new(assets_dir: &str) -> Self {
18+
let verifier_bin = Path::new(assets_dir).join("verifier.bin");
19+
let config = Path::new(assets_dir).join("root-verifier-vm-config");
20+
let exe = Path::new(assets_dir).join("root-verifier-committed-exe");
21+
22+
Self {
23+
chunk_verifier: ChunkVerifier::setup(&config, &exe, &verifier_bin)
24+
.expect("Setting up chunk verifier"),
25+
batch_verifier: BatchVerifier::setup(&config, &exe, &verifier_bin)
26+
.expect("Setting up batch verifier"),
27+
bundle_verifier: BundleVerifier::setup(&config, &exe, &verifier_bin)
28+
.expect("Setting up bundle verifier"),
29+
}
30+
}
31+
}
32+
33+
impl ProofVerifier for EuclidV2Verifier {
34+
fn verify(&self, task_type: super::TaskType, proof: Vec<u8>) -> Result<bool> {
35+
panic_catch(|| match task_type {
36+
TaskType::Chunk => {
37+
let proof = serde_json::from_slice::<ChunkProof>(proof.as_slice()).unwrap();
38+
self.chunk_verifier
39+
.verify_proof(proof.proof.as_root_proof().unwrap())
40+
}
41+
TaskType::Batch => {
42+
let proof = serde_json::from_slice::<BatchProof>(proof.as_slice()).unwrap();
43+
self.batch_verifier
44+
.verify_proof(proof.proof.as_root_proof().unwrap())
45+
}
46+
TaskType::Bundle => {
47+
let proof = serde_json::from_slice::<BundleProof>(proof.as_slice()).unwrap();
48+
self.bundle_verifier
49+
.verify_proof_evm(&proof.proof.as_evm_proof().unwrap())
50+
}
51+
})
52+
.map_err(|err_str: String| anyhow::anyhow!(err_str))
53+
}
54+
55+
fn dump_vk(&self, file: &Path) {
56+
let f = File::create(file).expect("Failed to open file to dump VK");
57+
58+
let dump = VKDump {
59+
chunk_vk: base64::encode(self.chunk_verifier.get_app_vk()),
60+
batch_vk: base64::encode(self.batch_verifier.get_app_vk()),
61+
bundle_vk: base64::encode(self.bundle_verifier.get_app_vk()),
62+
};
63+
serde_json::to_writer(f, &dump).expect("Failed to dump VK");
64+
}
65+
}

0 commit comments

Comments
 (0)