|
|
|
|
@@ -1,6 +1,7 @@
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
use alloy::primitives::Address as H160;
|
|
|
|
|
use clap::{Parser, Subcommand};
|
|
|
|
|
use clap::{Command, Parser, Subcommand};
|
|
|
|
|
use clap_complete::{generate, Generator, Shell};
|
|
|
|
|
#[cfg(feature = "python-bindings")]
|
|
|
|
|
use pyo3::{
|
|
|
|
|
conversion::{FromPyObject, PyTryFrom},
|
|
|
|
|
@@ -10,7 +11,7 @@ use pyo3::{
|
|
|
|
|
};
|
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
use std::path::PathBuf;
|
|
|
|
|
use std::{error::Error, str::FromStr};
|
|
|
|
|
use std::str::FromStr;
|
|
|
|
|
use tosubcommand::{ToFlags, ToSubcommand};
|
|
|
|
|
|
|
|
|
|
use crate::{pfsys::ProofType, Commitments, RunArgs};
|
|
|
|
|
@@ -255,33 +256,66 @@ lazy_static! {
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[allow(missing_docs)]
|
|
|
|
|
#[derive(Parser, Debug, Clone, Deserialize, Serialize)]
|
|
|
|
|
#[command(author, about, long_about = None)]
|
|
|
|
|
#[clap(version = *VERSION)]
|
|
|
|
|
pub struct Cli {
|
|
|
|
|
#[command(subcommand)]
|
|
|
|
|
#[allow(missing_docs)]
|
|
|
|
|
pub command: Commands,
|
|
|
|
|
/// Get the styles for the CLI
|
|
|
|
|
pub fn get_styles() -> clap::builder::Styles {
|
|
|
|
|
clap::builder::Styles::styled()
|
|
|
|
|
.usage(
|
|
|
|
|
clap::builder::styling::Style::new()
|
|
|
|
|
.bold()
|
|
|
|
|
.underline()
|
|
|
|
|
.fg_color(Some(clap::builder::styling::Color::Ansi(clap::builder::styling::AnsiColor::Cyan))),
|
|
|
|
|
)
|
|
|
|
|
.header(
|
|
|
|
|
clap::builder::styling::Style::new()
|
|
|
|
|
.bold()
|
|
|
|
|
.underline()
|
|
|
|
|
.fg_color(Some(clap::builder::styling::Color::Ansi(clap::builder::styling::AnsiColor::Cyan))),
|
|
|
|
|
)
|
|
|
|
|
.literal(
|
|
|
|
|
clap::builder::styling::Style::new().fg_color(Some(clap::builder::styling::Color::Ansi(clap::builder::styling::AnsiColor::Magenta))),
|
|
|
|
|
)
|
|
|
|
|
.invalid(
|
|
|
|
|
clap::builder::styling::Style::new()
|
|
|
|
|
.bold()
|
|
|
|
|
.fg_color(Some(clap::builder::styling::Color::Ansi(clap::builder::styling::AnsiColor::Red))),
|
|
|
|
|
)
|
|
|
|
|
.error(
|
|
|
|
|
clap::builder::styling::Style::new()
|
|
|
|
|
.bold()
|
|
|
|
|
.fg_color(Some(clap::builder::styling::Color::Ansi(clap::builder::styling::AnsiColor::Red))),
|
|
|
|
|
)
|
|
|
|
|
.valid(
|
|
|
|
|
clap::builder::styling::Style::new()
|
|
|
|
|
.bold()
|
|
|
|
|
.underline()
|
|
|
|
|
.fg_color(Some(clap::builder::styling::Color::Ansi(clap::builder::styling::AnsiColor::Green))),
|
|
|
|
|
)
|
|
|
|
|
.placeholder(
|
|
|
|
|
clap::builder::styling::Style::new().fg_color(Some(clap::builder::styling::Color::Ansi(clap::builder::styling::AnsiColor::White))),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Cli {
|
|
|
|
|
/// Export the ezkl configuration as json
|
|
|
|
|
pub fn as_json(&self) -> Result<String, Box<dyn Error>> {
|
|
|
|
|
let serialized = match serde_json::to_string(&self) {
|
|
|
|
|
Ok(s) => s,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
return Err(Box::new(e));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
Ok(serialized)
|
|
|
|
|
}
|
|
|
|
|
/// Parse an ezkl configuration from a json
|
|
|
|
|
pub fn from_json(arg_json: &str) -> Result<Self, serde_json::Error> {
|
|
|
|
|
serde_json::from_str(arg_json)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Print completions for the given generator
|
|
|
|
|
pub fn print_completions<G: Generator>(gen: G, cmd: &mut Command) {
|
|
|
|
|
generate(gen, cmd, cmd.get_name().to_string(), &mut std::io::stdout());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[allow(missing_docs)]
|
|
|
|
|
#[derive(Parser, Debug, Clone)]
|
|
|
|
|
#[command(author, about, long_about = None)]
|
|
|
|
|
#[clap(version = *VERSION, styles = get_styles(), trailing_var_arg = true)]
|
|
|
|
|
pub struct Cli {
|
|
|
|
|
/// If provided, outputs the completion file for given shell
|
|
|
|
|
#[clap(long = "generate", value_parser)]
|
|
|
|
|
pub generator: Option<Shell>,
|
|
|
|
|
#[command(subcommand)]
|
|
|
|
|
#[allow(missing_docs)]
|
|
|
|
|
pub command: Option<Commands>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[allow(missing_docs)]
|
|
|
|
|
#[derive(Debug, Subcommand, Clone, Deserialize, Serialize, PartialEq, PartialOrd, ToSubcommand)]
|
|
|
|
|
pub enum Commands {
|
|
|
|
|
@@ -291,7 +325,7 @@ pub enum Commands {
|
|
|
|
|
/// Loads model and prints model table
|
|
|
|
|
Table {
|
|
|
|
|
/// The path to the .onnx model file
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
model: Option<PathBuf>,
|
|
|
|
|
/// proving arguments
|
|
|
|
|
#[clap(flatten)]
|
|
|
|
|
@@ -301,29 +335,29 @@ pub enum Commands {
|
|
|
|
|
/// Generates the witness from an input file.
|
|
|
|
|
GenWitness {
|
|
|
|
|
/// The path to the .json data file
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_DATA)]
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_DATA, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
data: Option<PathBuf>,
|
|
|
|
|
/// The path to the compiled model file (generated using the compile-circuit command)
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
compiled_circuit: Option<PathBuf>,
|
|
|
|
|
/// Path to output the witness .json file
|
|
|
|
|
#[arg(short = 'O', long, default_value = DEFAULT_WITNESS)]
|
|
|
|
|
#[arg(short = 'O', long, default_value = DEFAULT_WITNESS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
output: Option<PathBuf>,
|
|
|
|
|
/// Path to the verification key file (optional - solely used to generate kzg commits)
|
|
|
|
|
#[arg(short = 'V', long)]
|
|
|
|
|
#[arg(short = 'V', long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// Path to the srs file (optional - solely used to generate kzg commits)
|
|
|
|
|
#[arg(short = 'P', long)]
|
|
|
|
|
#[arg(short = 'P', long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/// Produces the proving hyperparameters, from run-args
|
|
|
|
|
GenSettings {
|
|
|
|
|
/// The path to the .onnx model file
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
model: Option<PathBuf>,
|
|
|
|
|
/// The path to generate the circuit settings .json file to
|
|
|
|
|
#[arg(short = 'O', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'O', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
/// proving arguments
|
|
|
|
|
#[clap(flatten)]
|
|
|
|
|
@@ -334,33 +368,34 @@ pub enum Commands {
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
CalibrateSettings {
|
|
|
|
|
/// The path to the .json calibration data file.
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_CALIBRATION_FILE)]
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_CALIBRATION_FILE, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
data: Option<PathBuf>,
|
|
|
|
|
/// The path to the .onnx model file
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
model: Option<PathBuf>,
|
|
|
|
|
/// The path to load circuit settings .json file AND overwrite (generated using the gen-settings command).
|
|
|
|
|
#[arg(short = 'O', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'O', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
#[arg(long = "target", default_value = DEFAULT_CALIBRATION_TARGET)]
|
|
|
|
|
#[arg(long = "target", default_value = DEFAULT_CALIBRATION_TARGET, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
/// Target for calibration. Set to "resources" to optimize for computational resource. Otherwise, set to "accuracy" to optimize for accuracy.
|
|
|
|
|
target: CalibrationTarget,
|
|
|
|
|
/// the lookup safety margin to use for calibration. if the max lookup is 2^k, then the max lookup will be 2^k * lookup_safety_margin. larger = safer but slower
|
|
|
|
|
#[arg(long, default_value = DEFAULT_LOOKUP_SAFETY_MARGIN)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_LOOKUP_SAFETY_MARGIN, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
lookup_safety_margin: i64,
|
|
|
|
|
/// Optional scales to specifically try for calibration. Example, --scales 0,4
|
|
|
|
|
#[arg(long, value_delimiter = ',', allow_hyphen_values = true)]
|
|
|
|
|
#[arg(long, value_delimiter = ',', allow_hyphen_values = true, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
scales: Option<Vec<crate::Scale>>,
|
|
|
|
|
/// Optional scale rebase multipliers to specifically try for calibration. This is the multiplier at which we divide to return to the input scale. Example, --scale-rebase-multipliers 0,4
|
|
|
|
|
#[arg(
|
|
|
|
|
long,
|
|
|
|
|
value_delimiter = ',',
|
|
|
|
|
allow_hyphen_values = true,
|
|
|
|
|
default_value = DEFAULT_SCALE_REBASE_MULTIPLIERS
|
|
|
|
|
default_value = DEFAULT_SCALE_REBASE_MULTIPLIERS,
|
|
|
|
|
value_hint = clap::ValueHint::Other
|
|
|
|
|
)]
|
|
|
|
|
scale_rebase_multiplier: Vec<u32>,
|
|
|
|
|
/// max logrows to use for calibration, 26 is the max public SRS size
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
max_logrows: Option<u32>,
|
|
|
|
|
// whether to only range check rebases (instead of trying both range check and lookup)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_ONLY_RANGE_CHECK_REBASE, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
@@ -371,13 +406,13 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "gen-srs", arg_required_else_help = true)]
|
|
|
|
|
GenSrs {
|
|
|
|
|
/// The path to output the generated SRS
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: PathBuf,
|
|
|
|
|
/// number of logrows to use for srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
logrows: usize,
|
|
|
|
|
/// commitment used
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
commitment: Option<Commitments>,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
@@ -386,57 +421,57 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "get-srs")]
|
|
|
|
|
GetSrs {
|
|
|
|
|
/// The path to output the desired srs file, if set to None will save to $EZKL_REPO_PATH/srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, default_value = None, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// Path to the circuit settings .json file to read in logrows from. Overriden by logrows if specified.
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
/// Number of logrows to use for srs. Overrides settings_path if specified.
|
|
|
|
|
#[arg(long, default_value = None)]
|
|
|
|
|
#[arg(long, default_value = None, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
logrows: Option<u32>,
|
|
|
|
|
/// Commitment used
|
|
|
|
|
#[arg(long, default_value = None)]
|
|
|
|
|
#[arg(long, default_value = None, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
commitment: Option<Commitments>,
|
|
|
|
|
},
|
|
|
|
|
/// Loads model and input and runs mock prover (for testing)
|
|
|
|
|
Mock {
|
|
|
|
|
/// The path to the .json witness file (generated using the gen-witness command)
|
|
|
|
|
#[arg(short = 'W', long, default_value = DEFAULT_WITNESS)]
|
|
|
|
|
#[arg(short = 'W', long, default_value = DEFAULT_WITNESS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
witness: Option<PathBuf>,
|
|
|
|
|
/// The path to the compiled model file (generated using the compile-circuit command)
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
model: Option<PathBuf>,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/// Mock aggregate proofs
|
|
|
|
|
MockAggregate {
|
|
|
|
|
/// The path to the snarks to aggregate over (generated using the prove command with the --proof-type=for-aggr flag)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_delimiter = ',', allow_hyphen_values = true)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_delimiter = ',', allow_hyphen_values = true, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
aggregation_snarks: Vec<PathBuf>,
|
|
|
|
|
/// logrows used for aggregation circuit
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
logrows: Option<u32>,
|
|
|
|
|
/// whether the accumulated are segments of a larger proof
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SPLIT, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
split_proofs: Option<bool>,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/// setup aggregation circuit :)
|
|
|
|
|
/// Setup aggregation circuit and generate pk and vk
|
|
|
|
|
SetupAggregate {
|
|
|
|
|
/// The path to samples of snarks that will be aggregated over (generated using the prove command with the --proof-type=for-aggr flag)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_delimiter = ',', allow_hyphen_values = true)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_delimiter = ',', allow_hyphen_values = true, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sample_snarks: Vec<PathBuf>,
|
|
|
|
|
/// The path to save the desired verification key file to
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to save the proving key to
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
pk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// logrows used for aggregation circuit
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
logrows: Option<u32>,
|
|
|
|
|
/// whether the accumulated are segments of a larger proof
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SPLIT, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
@@ -445,19 +480,19 @@ pub enum Commands {
|
|
|
|
|
#[arg(long, default_value = DEFAULT_DISABLE_SELECTOR_COMPRESSION, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
disable_selector_compression: Option<bool>,
|
|
|
|
|
/// commitment used
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
commitment: Option<Commitments>,
|
|
|
|
|
},
|
|
|
|
|
/// Aggregates proofs :)
|
|
|
|
|
/// Aggregates proofs
|
|
|
|
|
Aggregate {
|
|
|
|
|
/// The path to the snarks to aggregate over (generated using the prove command with the --proof-type=for-aggr flag)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_delimiter = ',', allow_hyphen_values = true)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_delimiter = ',', allow_hyphen_values = true, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
aggregation_snarks: Vec<PathBuf>,
|
|
|
|
|
/// The path to load the desired proving key file (generated using the setup-aggregate command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
pk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the proof file to
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
proof_path: Option<PathBuf>,
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
@@ -467,50 +502,51 @@ pub enum Commands {
|
|
|
|
|
require_equals = true,
|
|
|
|
|
num_args = 0..=1,
|
|
|
|
|
default_value_t = TranscriptType::default(),
|
|
|
|
|
value_enum
|
|
|
|
|
value_enum,
|
|
|
|
|
value_hint = clap::ValueHint::Other
|
|
|
|
|
)]
|
|
|
|
|
transcript: TranscriptType,
|
|
|
|
|
/// logrows used for aggregation circuit
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
logrows: Option<u32>,
|
|
|
|
|
/// run sanity checks during calculations (safe or unsafe)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CHECKMODE)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CHECKMODE, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
check_mode: Option<CheckMode>,
|
|
|
|
|
/// whether the accumulated proofs are segments of a larger circuit
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SPLIT, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
split_proofs: Option<bool>,
|
|
|
|
|
/// commitment used
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
commitment: Option<Commitments>,
|
|
|
|
|
},
|
|
|
|
|
/// Compiles a circuit from onnx to a simplified graph (einsum + other ops) and parameters as sets of field elements
|
|
|
|
|
CompileCircuit {
|
|
|
|
|
/// The path to the .onnx model file
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_MODEL, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
model: Option<PathBuf>,
|
|
|
|
|
/// The path to the compiled model file (generated using the compile-circuit command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMPILED_CIRCUIT)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMPILED_CIRCUIT, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
compiled_circuit: Option<PathBuf>,
|
|
|
|
|
/// The path to load circuit settings .json file from (generated using the gen-settings command)
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
},
|
|
|
|
|
/// Creates pk and vk
|
|
|
|
|
Setup {
|
|
|
|
|
/// The path to the compiled model file (generated using the compile-circuit command)
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
compiled_circuit: Option<PathBuf>,
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the verification key file to
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the proving key file to
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
pk_path: Option<PathBuf>,
|
|
|
|
|
/// The graph witness (optional - used to override fixed values in the circuit)
|
|
|
|
|
#[arg(short = 'W', long)]
|
|
|
|
|
#[arg(short = 'W', long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
witness: Option<PathBuf>,
|
|
|
|
|
/// compress selectors
|
|
|
|
|
#[arg(long, default_value = DEFAULT_DISABLE_SELECTOR_COMPRESSION, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
@@ -521,24 +557,24 @@ pub enum Commands {
|
|
|
|
|
#[command(arg_required_else_help = true)]
|
|
|
|
|
SetupTestEvmData {
|
|
|
|
|
/// The path to the .json data file, which should include both the network input (possibly private) and the network output (public input to the proof)
|
|
|
|
|
#[arg(short = 'D', long)]
|
|
|
|
|
#[arg(short = 'D', long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
data: Option<PathBuf>,
|
|
|
|
|
/// The path to the compiled model file (generated using the compile-circuit command)
|
|
|
|
|
#[arg(short = 'M', long)]
|
|
|
|
|
#[arg(short = 'M', long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
compiled_circuit: Option<PathBuf>,
|
|
|
|
|
/// For testing purposes only. The optional path to the .json data file that will be generated that contains the OnChain data storage information
|
|
|
|
|
/// derived from the file information in the data .json file.
|
|
|
|
|
/// Should include both the network input (possibly private) and the network output (public input to the proof)
|
|
|
|
|
#[arg(short = 'T', long)]
|
|
|
|
|
#[arg(short = 'T', long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
test_data: PathBuf,
|
|
|
|
|
/// RPC URL for an Ethereum node, if None will use Anvil but WON'T persist state
|
|
|
|
|
#[arg(short = 'U', long)]
|
|
|
|
|
#[arg(short = 'U', long, value_hint = clap::ValueHint::Url)]
|
|
|
|
|
rpc_url: Option<String>,
|
|
|
|
|
/// where the input data come from
|
|
|
|
|
#[arg(long, default_value = "on-chain")]
|
|
|
|
|
#[arg(long, default_value = "on-chain", value_hint = clap::ValueHint::Other)]
|
|
|
|
|
input_source: TestDataSource,
|
|
|
|
|
/// where the output data come from
|
|
|
|
|
#[arg(long, default_value = "on-chain")]
|
|
|
|
|
#[arg(long, default_value = "on-chain", value_hint = clap::ValueHint::Other)]
|
|
|
|
|
output_source: TestDataSource,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
@@ -546,23 +582,23 @@ pub enum Commands {
|
|
|
|
|
#[command(arg_required_else_help = true)]
|
|
|
|
|
TestUpdateAccountCalls {
|
|
|
|
|
/// The path to the verifier contract's address
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
addr: H160Flag,
|
|
|
|
|
/// The path to the .json data file.
|
|
|
|
|
#[arg(short = 'D', long)]
|
|
|
|
|
#[arg(short = 'D', long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
data: Option<PathBuf>,
|
|
|
|
|
/// RPC URL for an Ethereum node, if None will use Anvil but WON'T persist state
|
|
|
|
|
#[arg(short = 'U', long)]
|
|
|
|
|
#[arg(short = 'U', long, value_hint = clap::ValueHint::Url)]
|
|
|
|
|
rpc_url: Option<String>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
/// Swaps the positions in the transcript that correspond to commitments
|
|
|
|
|
SwapProofCommitments {
|
|
|
|
|
/// The path to the proof file
|
|
|
|
|
#[arg(short = 'P', long, default_value = DEFAULT_PROOF)]
|
|
|
|
|
#[arg(short = 'P', long, default_value = DEFAULT_PROOF, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
proof_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the witness file
|
|
|
|
|
#[arg(short = 'W', long, default_value = DEFAULT_WITNESS)]
|
|
|
|
|
#[arg(short = 'W', long, default_value = DEFAULT_WITNESS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
witness_path: Option<PathBuf>,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
@@ -570,30 +606,31 @@ pub enum Commands {
|
|
|
|
|
/// Loads model, data, and creates proof
|
|
|
|
|
Prove {
|
|
|
|
|
/// The path to the .json witness file (generated using the gen-witness command)
|
|
|
|
|
#[arg(short = 'W', long, default_value = DEFAULT_WITNESS)]
|
|
|
|
|
#[arg(short = 'W', long, default_value = DEFAULT_WITNESS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
witness: Option<PathBuf>,
|
|
|
|
|
/// The path to the compiled model file (generated using the compile-circuit command)
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT)]
|
|
|
|
|
#[arg(short = 'M', long, default_value = DEFAULT_COMPILED_CIRCUIT, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
compiled_circuit: Option<PathBuf>,
|
|
|
|
|
/// The path to load the desired proving key file (generated using the setup command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PK, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
pk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the proof file to
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
proof_path: Option<PathBuf>,
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
#[arg(
|
|
|
|
|
long,
|
|
|
|
|
require_equals = true,
|
|
|
|
|
num_args = 0..=1,
|
|
|
|
|
default_value_t = ProofType::Single,
|
|
|
|
|
value_enum
|
|
|
|
|
value_enum,
|
|
|
|
|
value_hint = clap::ValueHint::Other
|
|
|
|
|
)]
|
|
|
|
|
proof_type: ProofType,
|
|
|
|
|
/// run sanity checks during calculations (safe or unsafe)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CHECKMODE)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CHECKMODE, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
check_mode: Option<CheckMode>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
@@ -601,13 +638,13 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "encode-evm-calldata")]
|
|
|
|
|
EncodeEvmCalldata {
|
|
|
|
|
/// The path to the proof file (generated using the prove command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
proof_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the Solidity code
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CALLDATA)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CALLDATA, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
calldata_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the verification key address (only used if the vk is rendered as a separate contract)
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
addr_vk: Option<H160Flag>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
@@ -615,19 +652,19 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "create-evm-verifier")]
|
|
|
|
|
CreateEvmVerifier {
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// The path to load circuit settings .json file from (generated using the gen-settings command)
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
/// The path to load the desired verification key file
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the Solidity code
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sol_code_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the Solidity verifier ABI
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VERIFIER_ABI)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VERIFIER_ABI, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
abi_path: Option<PathBuf>,
|
|
|
|
|
/// Whether the verifier key should be rendered as a separate contract.
|
|
|
|
|
/// We recommend disabling selector compression if this is enabled.
|
|
|
|
|
@@ -640,19 +677,19 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "create-evm-vk")]
|
|
|
|
|
CreateEvmVK {
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// The path to load circuit settings .json file from (generated using the gen-settings command)
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
/// The path to load the desired verification key file
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the Solidity code
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_SOL)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_SOL, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sol_code_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the Solidity verifier ABI
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_ABI)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_ABI, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
abi_path: Option<PathBuf>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
@@ -660,20 +697,20 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "create-evm-da")]
|
|
|
|
|
CreateEvmDataAttestation {
|
|
|
|
|
/// The path to load circuit settings .json file from (generated using the gen-settings command)
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the Solidity code
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE_DA)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE_DA, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sol_code_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the Solidity verifier ABI
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VERIFIER_DA_ABI)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VERIFIER_DA_ABI, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
abi_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the .json data file, which should
|
|
|
|
|
/// contain the necessary calldata and account addresses
|
|
|
|
|
/// needed to read from all the on-chain
|
|
|
|
|
/// view functions that return the data that the network
|
|
|
|
|
/// ingests as inputs.
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_DATA)]
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_DATA, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
data: Option<PathBuf>,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
@@ -682,22 +719,22 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "create-evm-verifier-aggr")]
|
|
|
|
|
CreateEvmVerifierAggr {
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// The path to load the desired verification key file
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the Solidity code
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sol_code_path: Option<PathBuf>,
|
|
|
|
|
/// The path to output the Solidity verifier ABI
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VERIFIER_AGGREGATED_ABI)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VERIFIER_AGGREGATED_ABI, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
abi_path: Option<PathBuf>,
|
|
|
|
|
// aggregated circuit settings paths, used to calculate the number of instances in the aggregate proof
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SETTINGS, value_delimiter = ',', allow_hyphen_values = true)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SETTINGS, value_delimiter = ',', allow_hyphen_values = true, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
aggregation_settings: Vec<PathBuf>,
|
|
|
|
|
// logrows used for aggregation circuit
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
logrows: Option<u32>,
|
|
|
|
|
/// Whether the verifier key should be rendered as a separate contract.
|
|
|
|
|
/// We recommend disabling selector compression if this is enabled.
|
|
|
|
|
@@ -708,16 +745,16 @@ pub enum Commands {
|
|
|
|
|
/// Verifies a proof, returning accept or reject
|
|
|
|
|
Verify {
|
|
|
|
|
/// The path to load circuit settings .json file from (generated using the gen-settings command)
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(short = 'S', long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the proof file (generated using the prove command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
proof_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the verification key file (generated using the setup command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// Reduce SRS logrows to the number of instances rather than the number of logrows used for proofs (only works if the srs were generated in the same ceremony)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_USE_REDUCED_SRS_FOR_VERIFICATION, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
@@ -726,60 +763,60 @@ pub enum Commands {
|
|
|
|
|
/// Verifies an aggregate proof, returning accept or reject
|
|
|
|
|
VerifyAggr {
|
|
|
|
|
/// The path to the proof file (generated using the prove command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
proof_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the verification key file (generated using the setup-aggregate command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_AGGREGATED)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_AGGREGATED, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
vk_path: Option<PathBuf>,
|
|
|
|
|
/// reduced srs
|
|
|
|
|
#[arg(long, default_value = DEFAULT_USE_REDUCED_SRS_FOR_VERIFICATION, action = clap::ArgAction::SetTrue)]
|
|
|
|
|
reduced_srs: Option<bool>,
|
|
|
|
|
/// The path to SRS, if None will use $EZKL_REPO_PATH/srs/kzg{logrows}.srs
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
srs_path: Option<PathBuf>,
|
|
|
|
|
/// logrows used for aggregation circuit
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_AGGREGATED_LOGROWS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
logrows: Option<u32>,
|
|
|
|
|
/// commitment
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_COMMITMENT, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
commitment: Option<Commitments>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
/// Deploys an evm verifier that is generated by ezkl
|
|
|
|
|
DeployEvmVerifier {
|
|
|
|
|
/// The path to the Solidity code (generated using the create-evm-verifier command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sol_code_path: Option<PathBuf>,
|
|
|
|
|
/// RPC URL for an Ethereum node, if None will use Anvil but WON'T persist state
|
|
|
|
|
#[arg(short = 'U', long)]
|
|
|
|
|
#[arg(short = 'U', long, value_hint = clap::ValueHint::Url)]
|
|
|
|
|
rpc_url: Option<String>,
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
/// The path to output the contract address
|
|
|
|
|
addr_path: Option<PathBuf>,
|
|
|
|
|
/// The optimizer runs to set on the verifier. Lower values optimize for deployment cost, while higher values optimize for gas cost.
|
|
|
|
|
#[arg(long, default_value = DEFAULT_OPTIMIZER_RUNS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_OPTIMIZER_RUNS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
optimizer_runs: usize,
|
|
|
|
|
/// Private secp256K1 key in hex format, 64 chars, no 0x prefix, of the account signing transactions. If None the private key will be generated by Anvil
|
|
|
|
|
#[arg(short = 'P', long)]
|
|
|
|
|
#[arg(short = 'P', long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
private_key: Option<String>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
/// Deploys an evm verifier that is generated by ezkl
|
|
|
|
|
DeployEvmVK {
|
|
|
|
|
/// The path to the Solidity code (generated using the create-evm-verifier command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_SOL)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_VK_SOL, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sol_code_path: Option<PathBuf>,
|
|
|
|
|
/// RPC URL for an Ethereum node, if None will use Anvil but WON'T persist state
|
|
|
|
|
#[arg(short = 'U', long)]
|
|
|
|
|
#[arg(short = 'U', long, value_hint = clap::ValueHint::Url)]
|
|
|
|
|
rpc_url: Option<String>,
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS_VK)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS_VK, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
/// The path to output the contract address
|
|
|
|
|
addr_path: Option<PathBuf>,
|
|
|
|
|
/// The optimizer runs to set on the verifier. Lower values optimize for deployment cost, while higher values optimize for gas cost.
|
|
|
|
|
#[arg(long, default_value = DEFAULT_OPTIMIZER_RUNS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_OPTIMIZER_RUNS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
optimizer_runs: usize,
|
|
|
|
|
/// Private secp256K1 key in hex format, 64 chars, no 0x prefix, of the account signing transactions. If None the private key will be generated by Anvil
|
|
|
|
|
#[arg(short = 'P', long)]
|
|
|
|
|
#[arg(short = 'P', long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
private_key: Option<String>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
@@ -787,25 +824,25 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "deploy-evm-da")]
|
|
|
|
|
DeployEvmDataAttestation {
|
|
|
|
|
/// The path to the .json data file, which should include both the network input (possibly private) and the network output (public input to the proof)
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_DATA)]
|
|
|
|
|
#[arg(short = 'D', long, default_value = DEFAULT_DATA, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
data: Option<PathBuf>,
|
|
|
|
|
/// The path to load circuit settings .json file from (generated using the gen-settings command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SETTINGS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SETTINGS, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
settings_path: Option<PathBuf>,
|
|
|
|
|
/// The path to the Solidity code
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE_DA)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_SOL_CODE_DA, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
sol_code_path: Option<PathBuf>,
|
|
|
|
|
/// RPC URL for an Ethereum node, if None will use Anvil but WON'T persist state
|
|
|
|
|
#[arg(short = 'U', long)]
|
|
|
|
|
#[arg(short = 'U', long, value_hint = clap::ValueHint::Url)]
|
|
|
|
|
rpc_url: Option<String>,
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS_DA)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS_DA, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
/// The path to output the contract address
|
|
|
|
|
addr_path: Option<PathBuf>,
|
|
|
|
|
/// The optimizer runs to set on the verifier. (Lower values optimize for deployment, while higher values optimize for execution)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_OPTIMIZER_RUNS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_OPTIMIZER_RUNS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
optimizer_runs: usize,
|
|
|
|
|
/// Private secp256K1 key in hex format, 64 chars, no 0x prefix, of the account signing transactions. If None the private key will be generated by Anvil
|
|
|
|
|
#[arg(short = 'P', long)]
|
|
|
|
|
#[arg(short = 'P', long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
private_key: Option<String>,
|
|
|
|
|
},
|
|
|
|
|
#[cfg(not(target_arch = "wasm32"))]
|
|
|
|
|
@@ -813,19 +850,32 @@ pub enum Commands {
|
|
|
|
|
#[command(name = "verify-evm")]
|
|
|
|
|
VerifyEvm {
|
|
|
|
|
/// The path to the proof file (generated using the prove command)
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_PROOF, value_hint = clap::ValueHint::FilePath)]
|
|
|
|
|
proof_path: Option<PathBuf>,
|
|
|
|
|
/// The path to verifier contract's address
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS)]
|
|
|
|
|
#[arg(long, default_value = DEFAULT_CONTRACT_ADDRESS, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
addr_verifier: H160Flag,
|
|
|
|
|
/// RPC URL for an Ethereum node, if None will use Anvil but WON'T persist state
|
|
|
|
|
#[arg(short = 'U', long)]
|
|
|
|
|
#[arg(short = 'U', long, value_hint = clap::ValueHint::Url)]
|
|
|
|
|
rpc_url: Option<String>,
|
|
|
|
|
/// does the verifier use data attestation ?
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
addr_da: Option<H160Flag>,
|
|
|
|
|
// is the vk rendered seperately, if so specify an address
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
#[arg(long, value_hint = clap::ValueHint::Other)]
|
|
|
|
|
addr_vk: Option<H160Flag>,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
impl Commands {
|
|
|
|
|
/// Converts the commands to a json string
|
|
|
|
|
pub fn as_json(&self) -> String {
|
|
|
|
|
serde_json::to_string(self).unwrap()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Converts a json string to a Commands struct
|
|
|
|
|
pub fn from_json(json: &str) -> Self {
|
|
|
|
|
serde_json::from_str(json).unwrap()
|
|
|
|
|
}
|
|
|
|
|
}
|