cargo_openvm/commands/
verify.rs
1use std::path::PathBuf;
2
3use clap::Parser;
4use eyre::Result;
5use openvm_sdk::{
6 fs::{
7 read_app_proof_from_file, read_app_vk_from_file, read_evm_proof_from_file,
8 read_evm_verifier_from_folder,
9 },
10 Sdk,
11};
12
13use crate::default::{
14 DEFAULT_APP_PROOF_PATH, DEFAULT_APP_VK_PATH, DEFAULT_EVM_PROOF_PATH, DEFAULT_VERIFIER_FOLDER,
15};
16
17#[derive(Parser)]
18#[command(name = "verify", about = "Verify a proof")]
19pub struct VerifyCmd {
20 #[command(subcommand)]
21 command: VerifySubCommand,
22}
23
24#[derive(Parser)]
25enum VerifySubCommand {
26 App {
27 #[arg(long, action, help = "Path to app verifying key", default_value = DEFAULT_APP_VK_PATH)]
28 app_vk: PathBuf,
29
30 #[arg(long, action, help = "Path to app proof", default_value = DEFAULT_APP_PROOF_PATH)]
31 proof: PathBuf,
32 },
33 Evm {
34 #[arg(long, action, help = "Path to EVM proof", default_value = DEFAULT_EVM_PROOF_PATH)]
35 proof: PathBuf,
36 },
37}
38
39impl VerifyCmd {
40 pub fn run(&self) -> Result<()> {
41 let sdk = Sdk::new();
42 match &self.command {
43 VerifySubCommand::App { app_vk, proof } => {
44 let app_vk = read_app_vk_from_file(app_vk)?;
45 let app_proof = read_app_proof_from_file(proof)?;
46 sdk.verify_app_proof(&app_vk, &app_proof)?;
47 }
48 VerifySubCommand::Evm { proof } => {
49 let evm_verifier = read_evm_verifier_from_folder(DEFAULT_VERIFIER_FOLDER).map_err(|e| {
50 eyre::eyre!("Failed to read EVM verifier: {}\nPlease run 'cargo openvm evm-proving-setup' first", e)
51 })?;
52 let evm_proof = read_evm_proof_from_file(proof)?;
53 sdk.verify_evm_proof(&evm_verifier, &evm_proof)?;
54 }
55 }
56 Ok(())
57 }
58}