mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-11 23:18:07 -05:00
Compare commits
4 Commits
libzkp/deb
...
dbg_libzkp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0596bc2a60 | ||
|
|
1869e1c469 | ||
|
|
9a18377e56 | ||
|
|
d02b161f30 |
15
Cargo.lock
generated
15
Cargo.lock
generated
@@ -5040,6 +5040,7 @@ version = "1.3.0-rc.1"
|
||||
source = "git+https://github.com/openvm-org/openvm.git?rev=3c800070d363237832a66dbe5501d3c365f3c549#3c800070d363237832a66dbe5501d3c365f3c549"
|
||||
dependencies = [
|
||||
"group 0.13.0",
|
||||
"halo2curves-axiom",
|
||||
"hex-literal",
|
||||
"itertools 0.14.0",
|
||||
"num-bigint 0.4.6",
|
||||
@@ -8174,7 +8175,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "scroll-zkvm-prover"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0dd7b19#0dd7b19590b1b17c5ec5a97fc1b4f638dfd0ce8f"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0498edb#0498edbec9134bab95f179e190a9ba586669580e"
|
||||
dependencies = [
|
||||
"alloy-primitives",
|
||||
"base64 0.22.1",
|
||||
@@ -8212,7 +8213,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "scroll-zkvm-types"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0dd7b19#0dd7b19590b1b17c5ec5a97fc1b4f638dfd0ce8f"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0498edb#0498edbec9134bab95f179e190a9ba586669580e"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"bincode",
|
||||
@@ -8232,7 +8233,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "scroll-zkvm-types-base"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0dd7b19#0dd7b19590b1b17c5ec5a97fc1b4f638dfd0ce8f"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0498edb#0498edbec9134bab95f179e190a9ba586669580e"
|
||||
dependencies = [
|
||||
"alloy-primitives",
|
||||
"alloy-serde 1.0.16",
|
||||
@@ -8247,7 +8248,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "scroll-zkvm-types-batch"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0dd7b19#0dd7b19590b1b17c5ec5a97fc1b4f638dfd0ce8f"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0498edb#0498edbec9134bab95f179e190a9ba586669580e"
|
||||
dependencies = [
|
||||
"alloy-primitives",
|
||||
"halo2curves-axiom",
|
||||
@@ -8267,7 +8268,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "scroll-zkvm-types-bundle"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0dd7b19#0dd7b19590b1b17c5ec5a97fc1b4f638dfd0ce8f"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0498edb#0498edbec9134bab95f179e190a9ba586669580e"
|
||||
dependencies = [
|
||||
"alloy-primitives",
|
||||
"itertools 0.14.0",
|
||||
@@ -8280,7 +8281,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "scroll-zkvm-types-chunk"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0dd7b19#0dd7b19590b1b17c5ec5a97fc1b4f638dfd0ce8f"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0498edb#0498edbec9134bab95f179e190a9ba586669580e"
|
||||
dependencies = [
|
||||
"alloy-primitives",
|
||||
"itertools 0.14.0",
|
||||
@@ -8300,7 +8301,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "scroll-zkvm-verifier"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0dd7b19#0dd7b19590b1b17c5ec5a97fc1b4f638dfd0ce8f"
|
||||
source = "git+https://github.com/scroll-tech/zkvm-prover?rev=0498edb#0498edbec9134bab95f179e190a9ba586669580e"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"eyre",
|
||||
|
||||
@@ -17,9 +17,9 @@ repository = "https://github.com/scroll-tech/scroll"
|
||||
version = "4.5.8"
|
||||
|
||||
[workspace.dependencies]
|
||||
scroll-zkvm-prover-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "0dd7b19", package = "scroll-zkvm-prover" }
|
||||
scroll-zkvm-verifier-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "0dd7b19", package = "scroll-zkvm-verifier" }
|
||||
scroll-zkvm-types = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "0dd7b19" }
|
||||
scroll-zkvm-prover-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "0498edb", package = "scroll-zkvm-prover" }
|
||||
scroll-zkvm-verifier-euclid = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "0498edb", package = "scroll-zkvm-verifier" }
|
||||
scroll-zkvm-types = { git = "https://github.com/scroll-tech/zkvm-prover", rev = "0498edb" }
|
||||
|
||||
sbv-primitives = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/upgrade", features = ["scroll"] }
|
||||
sbv-utils = { git = "https://github.com/scroll-tech/stateless-block-verifier", branch = "chore/upgrade" }
|
||||
|
||||
@@ -5,7 +5,7 @@ pub use verifier::{TaskType, VerifierConfig};
|
||||
mod utils;
|
||||
|
||||
use sbv_primitives::B256;
|
||||
use scroll_zkvm_types::util::vec_as_base64;
|
||||
use scroll_zkvm_types::{public_inputs::ForkName, util::vec_as_base64};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::value::RawValue;
|
||||
use std::path::Path;
|
||||
@@ -30,7 +30,7 @@ pub fn checkout_chunk_task(
|
||||
pub fn gen_universal_task(
|
||||
task_type: i32,
|
||||
task_json: &str,
|
||||
fork_name: &str,
|
||||
fork_name_str: &str,
|
||||
expected_vk: &[u8],
|
||||
interpreter: Option<impl ChunkInterpreter>,
|
||||
) -> eyre::Result<(B256, String, String)> {
|
||||
@@ -48,19 +48,28 @@ pub fn gen_universal_task(
|
||||
|
||||
let (pi_hash, metadata, mut u_task) = match task_type {
|
||||
x if x == TaskType::Chunk as i32 => {
|
||||
let task = serde_json::from_str::<ChunkProvingTask>(task_json)?;
|
||||
let mut task = serde_json::from_str::<ChunkProvingTask>(task_json)?;
|
||||
let fork_name = ForkName::from(task.fork_name.to_lowercase().as_str());
|
||||
task.fork_name = fork_name.to_string();
|
||||
assert_eq!(fork_name_str, task.fork_name.as_str());
|
||||
let (pi_hash, metadata, u_task) =
|
||||
gen_universal_chunk_task(task, fork_name.into(), interpreter)?;
|
||||
gen_universal_chunk_task(task, fork_name, interpreter)?;
|
||||
(pi_hash, AnyMetaData::Chunk(metadata), u_task)
|
||||
}
|
||||
x if x == TaskType::Batch as i32 => {
|
||||
let task = serde_json::from_str::<BatchProvingTask>(task_json)?;
|
||||
let (pi_hash, metadata, u_task) = gen_universal_batch_task(task, fork_name.into())?;
|
||||
let mut task = serde_json::from_str::<BatchProvingTask>(task_json)?;
|
||||
let fork_name = ForkName::from(task.fork_name.to_lowercase().as_str());
|
||||
task.fork_name = fork_name.to_string();
|
||||
assert_eq!(fork_name_str, task.fork_name.as_str());
|
||||
let (pi_hash, metadata, u_task) = gen_universal_batch_task(task, fork_name)?;
|
||||
(pi_hash, AnyMetaData::Batch(metadata), u_task)
|
||||
}
|
||||
x if x == TaskType::Bundle as i32 => {
|
||||
let task = serde_json::from_str::<BundleProvingTask>(task_json)?;
|
||||
let (pi_hash, metadata, u_task) = gen_universal_bundle_task(task, fork_name.into())?;
|
||||
let mut task = serde_json::from_str::<BundleProvingTask>(task_json)?;
|
||||
let fork_name = ForkName::from(task.fork_name.to_lowercase().as_str());
|
||||
task.fork_name = fork_name.to_string();
|
||||
assert_eq!(fork_name_str, task.fork_name.as_str());
|
||||
let (pi_hash, metadata, u_task) = gen_universal_bundle_task(task, fork_name)?;
|
||||
(pi_hash, AnyMetaData::Bundle(metadata), u_task)
|
||||
}
|
||||
_ => return Err(eyre::eyre!("unrecognized task type {task_type}")),
|
||||
@@ -111,24 +120,6 @@ pub fn verify_proof(proof: Vec<u8>, fork_name: &str, task_type: TaskType) -> eyr
|
||||
let verifier = verifier::get_verifier(fork_name)?;
|
||||
|
||||
let ret = verifier.lock().unwrap().verify(task_type, &proof)?;
|
||||
|
||||
if let Ok(debug_value) = std::env::var("ZKVM_DEBUG_PROOF") {
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
if !ret && debug_value.to_lowercase() == "true" {
|
||||
// Dump req.input to a temporary file
|
||||
let timestamp = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap_or_default()
|
||||
.as_secs();
|
||||
let filename = format!("/tmp/proof_{}.json", timestamp);
|
||||
if let Err(e) = std::fs::write(&filename, &proof) {
|
||||
eprintln!("Failed to write proof to file {}: {}", filename, e);
|
||||
} else {
|
||||
println!("Dumped failed proof to {}", filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(ret)
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,16 @@ use std::sync::OnceLock;
|
||||
|
||||
static LOG_SETTINGS: OnceLock<Result<(), String>> = OnceLock::new();
|
||||
|
||||
fn enable_dump() -> bool {
|
||||
static ZKVM_DEBUG_DUMP: OnceLock<bool> = OnceLock::new();
|
||||
*ZKVM_DEBUG_DUMP.get_or_init(|| {
|
||||
std::env::var("ZKVM_DEBUG")
|
||||
.or_else(|_| std::env::var("ZKVM_DEBUG_PROOF"))
|
||||
.map(|s| s.to_lowercase() == "true")
|
||||
.unwrap_or(false)
|
||||
})
|
||||
}
|
||||
|
||||
/// # Safety
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn init_tracing() {
|
||||
@@ -52,14 +62,33 @@ pub unsafe extern "C" fn init_l2geth(config: *const c_char) {
|
||||
|
||||
fn verify_proof(proof: *const c_char, fork_name: *const c_char, task_type: TaskType) -> c_char {
|
||||
let fork_name_str = c_char_to_str(fork_name);
|
||||
let proof_str = proof;
|
||||
let proof = c_char_to_vec(proof);
|
||||
tracing::info!("verify proof for fork {fork_name_str}, type {task_type}");
|
||||
|
||||
match libzkp::verify_proof(proof, fork_name_str, task_type) {
|
||||
Err(e) => {
|
||||
tracing::error!("{:?} verify failed, error: {:#}", task_type, e);
|
||||
false as c_char
|
||||
}
|
||||
Ok(result) => result as c_char,
|
||||
Ok(result) => {
|
||||
if !result && enable_dump() {
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
// Dump req.input to a temporary file
|
||||
let timestamp = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap_or_default()
|
||||
.as_secs();
|
||||
let filename = format!("/tmp/proof_{}.json", timestamp);
|
||||
let cstr = unsafe { std::ffi::CStr::from_ptr(proof_str) };
|
||||
if let Err(e) = std::fs::write(&filename, cstr.to_bytes()) {
|
||||
eprintln!("Failed to write proof to file {}: {}", filename, e);
|
||||
} else {
|
||||
println!("Dumped failed proof to {}", filename);
|
||||
}
|
||||
}
|
||||
result as c_char
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,10 +179,13 @@ pub unsafe extern "C" fn gen_universal_task(
|
||||
&[]
|
||||
};
|
||||
|
||||
let fork_name_str = c_char_to_str(fork_name);
|
||||
tracing::info!("generate universtal task for fork {fork_name_str}, type {task_type}");
|
||||
|
||||
let ret = libzkp::gen_universal_task(
|
||||
task_type,
|
||||
&task_json,
|
||||
c_char_to_str(fork_name),
|
||||
fork_name_str,
|
||||
expected_vk,
|
||||
interpreter,
|
||||
);
|
||||
@@ -167,6 +199,21 @@ pub unsafe extern "C" fn gen_universal_task(
|
||||
expected_pi_hash,
|
||||
}
|
||||
} else {
|
||||
if enable_dump() {
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
// Dump req.input to a temporary file
|
||||
let timestamp = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap_or_default()
|
||||
.as_secs();
|
||||
let filename = format!("/tmp/task_{}_{}.json", fork_name_str, timestamp);
|
||||
if let Err(e) = std::fs::write(&filename, task_json.as_bytes()) {
|
||||
eprintln!("Failed to write task to file {}: {}", filename, e);
|
||||
} else {
|
||||
println!("Dumped failed task to {}", filename);
|
||||
}
|
||||
}
|
||||
|
||||
tracing::error!("gen_universal_task failed, error: {:#}", ret.unwrap_err());
|
||||
failed_handling_result()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user