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}