Compare commits

...

4 Commits

Author SHA1 Message Date
Ho
0596bc2a60 upgrade zkvm-prover 2025-07-07 20:46:37 +09:00
Ho
1869e1c469 fix forkname issue 2025-07-07 20:43:47 +09:00
Ho
9a18377e56 more logs 2025-07-07 13:44:19 +09:00
Ho
d02b161f30 dump debugging data 2025-07-07 13:13:36 +09:00
4 changed files with 77 additions and 38 deletions

15
Cargo.lock generated
View File

@@ -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",

View File

@@ -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" }

View File

@@ -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)
}

View File

@@ -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()
}