This project is for show-casing Ere with Ream codebase. Each guest program runs process_attestation which is quite simple (and also includes BLS verification).
You should install all necessary dependencies for each zkVMs. Find out missing SDK in eth-act/ere repository (link).
Warning
As Zisk is not explictly supported in macOS (See release note of v0.9.0), I haven't been able to test Zisk.
Warning
Jolt is not fully supported by Ere. make run_jolt will exit with a message.
# Select zkVM with Rust Features in compile time.
make run_<sp1,risc0,openvm,pico,zisk,jolt>You can modify host/main.rs like following:
fn main() -> Result<(), Box<dyn std::error::Error>> {
// ...
let (proof, report) = zkvm.prove(&input)?;
println!("prove cost: {:?} s", report.proving_time.as_secs_f64());
let is_verifier = zkvm.verify(&proof).is_ok();
if is_verifier {
println!("Executed successfully");
} else {
println!("Verification failed.");
}
Ok(())
}But as BLS verification is included, proving process would take so much time in daily laptops like MacBook. We might improve this by leveraging precompiles.
/// ProgramExecutionReport produces information about a particular program
/// execution.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ProgramExecutionReport {
/// Total number of cycles for the entire workload execution.
pub total_num_cycles: u64,
/// Region-specific cycles, mapping region names (e.g., "setup", "compute") to their cycle counts.
pub region_cycles: IndexMap<String, u64>,
/// Execution duration.
pub execution_duration: Duration,
}Although ProgramExecutionReport has the fields, I'd like to note that not every zkVM supports feature corresponding to each field. For example, region_cycles is only available on SP1 as it supports a cycle tracking feature.
eth-act/ere: Great abstraction for various zkVMs. I really appreciate their effort for doing low level stuffs.SuccinctPaul/ere-zkvm-examples: This project is inspired by Paul's example usage.