From d02b161f309369c7237fbf0d0b3fc33ce7b31283 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 7 Jul 2025 13:13:36 +0900 Subject: [PATCH 1/4] dump debugging data --- crates/libzkp/src/lib.rs | 18 --------------- crates/libzkp_c/src/lib.rs | 47 +++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/crates/libzkp/src/lib.rs b/crates/libzkp/src/lib.rs index 33f7d55b58..e5ae97795f 100644 --- a/crates/libzkp/src/lib.rs +++ b/crates/libzkp/src/lib.rs @@ -111,24 +111,6 @@ pub fn verify_proof(proof: Vec, 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) } diff --git a/crates/libzkp_c/src/lib.rs b/crates/libzkp_c/src/lib.rs index 68aee51191..c449ec32f1 100644 --- a/crates/libzkp_c/src/lib.rs +++ b/crates/libzkp_c/src/lib.rs @@ -9,6 +9,16 @@ use std::sync::OnceLock; static LOG_SETTINGS: OnceLock> = OnceLock::new(); +fn enable_dump() -> bool { + static ZKVM_DEBUG_DUMP: OnceLock = 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,6 +62,7 @@ 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); match libzkp::verify_proof(proof, fork_name_str, task_type) { @@ -59,7 +70,24 @@ fn verify_proof(proof: *const c_char, fork_name: *const c_char, task_type: TaskT 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 + } } } @@ -167,6 +195,23 @@ 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 c_str = unsafe { std::ffi::CStr::from_ptr(fork_name) }; + let filename = format!("/tmp/task_{}_{}.json", c_str.to_str().unwrap(), timestamp); + let c_str = unsafe { std::ffi::CStr::from_ptr(task) }; + if let Err(e) = std::fs::write(&filename, c_str.to_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() } From 9a18377e566c735176eb31282a1b6f9bd32dd013 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 7 Jul 2025 13:44:19 +0900 Subject: [PATCH 2/4] more logs --- crates/libzkp_c/src/lib.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/libzkp_c/src/lib.rs b/crates/libzkp_c/src/lib.rs index c449ec32f1..15986fc19c 100644 --- a/crates/libzkp_c/src/lib.rs +++ b/crates/libzkp_c/src/lib.rs @@ -64,6 +64,7 @@ fn verify_proof(proof: *const c_char, fork_name: *const c_char, task_type: TaskT 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) => { @@ -178,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, ); @@ -202,10 +206,8 @@ pub unsafe extern "C" fn gen_universal_task( .duration_since(UNIX_EPOCH) .unwrap_or_default() .as_secs(); - let c_str = unsafe { std::ffi::CStr::from_ptr(fork_name) }; - let filename = format!("/tmp/task_{}_{}.json", c_str.to_str().unwrap(), timestamp); - let c_str = unsafe { std::ffi::CStr::from_ptr(task) }; - if let Err(e) = std::fs::write(&filename, c_str.to_bytes()) { + 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); From 1869e1c469a5bbfcd88a11ec74db38f076a546c5 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 7 Jul 2025 16:57:03 +0900 Subject: [PATCH 3/4] fix forkname issue --- crates/libzkp/src/lib.rs | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/crates/libzkp/src/lib.rs b/crates/libzkp/src/lib.rs index e5ae97795f..d9fd0b2b93 100644 --- a/crates/libzkp/src/lib.rs +++ b/crates/libzkp/src/lib.rs @@ -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, ) -> 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::(task_json)?; + let mut task = serde_json::from_str::(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::(task_json)?; - let (pi_hash, metadata, u_task) = gen_universal_batch_task(task, fork_name.into())?; + let mut task = serde_json::from_str::(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::(task_json)?; - let (pi_hash, metadata, u_task) = gen_universal_bundle_task(task, fork_name.into())?; + let mut task = serde_json::from_str::(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}")), From 0596bc2a60578ed61117c5101f2c85f358806f47 Mon Sep 17 00:00:00 2001 From: Ho Date: Mon, 7 Jul 2025 20:46:37 +0900 Subject: [PATCH 4/4] upgrade zkvm-prover --- Cargo.lock | 15 ++++++++------- Cargo.toml | 6 +++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb42386547..ca7c39f0a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/Cargo.toml b/Cargo.toml index f02a3ebdba..dd73087f9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" }