cargo_openvm/commands/
keygen.rs

1use std::path::PathBuf;
2
3use clap::Parser;
4use eyre::Result;
5use openvm_sdk::{
6    fs::{write_app_pk_to_file, write_app_vk_to_file},
7    Sdk,
8};
9
10use crate::{
11    default::{DEFAULT_APP_CONFIG_PATH, DEFAULT_APP_PK_PATH, DEFAULT_APP_VK_PATH},
12    util::read_config_toml_or_default,
13};
14
15#[derive(Parser)]
16#[command(name = "keygen", about = "Generate an application proving key")]
17pub struct KeygenCmd {
18    #[arg(long, action, help = "Path to app config TOML file", default_value = DEFAULT_APP_CONFIG_PATH)]
19    config: PathBuf,
20
21    #[arg(
22        long,
23        action,
24        help = "Path to output app proving key file",
25        default_value = DEFAULT_APP_PK_PATH
26    )]
27    output: PathBuf,
28
29    #[arg(
30        long,
31        action,
32        help = "Path to output app verifying key file",
33        default_value = DEFAULT_APP_VK_PATH
34    )]
35    vk_output: PathBuf,
36}
37
38impl KeygenCmd {
39    pub fn run(&self) -> Result<()> {
40        let app_config = read_config_toml_or_default(&self.config)?;
41        let app_pk = Sdk::new().app_keygen(app_config)?;
42        write_app_vk_to_file(app_pk.get_app_vk(), &self.vk_output)?;
43        write_app_pk_to_file(app_pk, &self.output)?;
44        Ok(())
45    }
46}