From f9046a3584d7a206f81c0ab417abef8024fc5712 Mon Sep 17 00:00:00 2001 From: Vauban Research Date: Sat, 16 May 2026 18:29:05 +0200 Subject: [PATCH 1/2] feat(scarb-prove): expose --proof-format flag for cairo_serde output Adds a --proof-format CLI flag to `scarb prove` so users can select the serialization format used by stwo-cairo-prover's `create_and_serialize_proof`. Default remains `json` to preserve existing behavior; the new `cairo-serde` value emits the felt-array layout expected by Cairo-side verifiers, enabling proof-composition (recursive aggregation) pipelines. - utils/scarb-extensions-cli/src/prove.rs: add `proof_format: ProofFormat` field with `default_value_t = ProofFormat::Json`. - utils/scarb-extensions-cli/Cargo.toml: pull cairo-air (optional) under the `prove` feature so the enum is available where the Args are defined. - extensions/scarb-prove/src/main.rs: thread `args.proof_format` into `create_and_serialize_proof` instead of the hardcoded `ProofFormat::Json`. --- Cargo.lock | 1 + extensions/scarb-prove/src/main.rs | 3 +-- utils/scarb-extensions-cli/Cargo.toml | 3 ++- utils/scarb-extensions-cli/src/prove.rs | 5 +++++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index adb98bafd..72b9a571d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7295,6 +7295,7 @@ name = "scarb-extensions-cli" version = "2.18.0" dependencies = [ "anyhow", + "cairo-air", "cairo-vm", "camino", "clap", diff --git a/extensions/scarb-prove/src/main.rs b/extensions/scarb-prove/src/main.rs index e6358cdf8..47b80b4d7 100644 --- a/extensions/scarb-prove/src/main.rs +++ b/extensions/scarb-prove/src/main.rs @@ -2,7 +2,6 @@ #![deny(clippy::disallowed_methods)] use anyhow::{Context, Result, bail, ensure}; -use cairo_air::utils::ProofFormat; use camino::{Utf8Path, Utf8PathBuf}; use clap::Parser; use create_output_dir::create_output_dir; @@ -105,7 +104,7 @@ fn main_inner(args: Args, ui: Ui) -> Result<()> { prover_input, false, proof_path.as_std_path().to_path_buf(), - ProofFormat::Json, + args.proof_format, None, )?; diff --git a/utils/scarb-extensions-cli/Cargo.toml b/utils/scarb-extensions-cli/Cargo.toml index f05167a4b..917cfcd18 100644 --- a/utils/scarb-extensions-cli/Cargo.toml +++ b/utils/scarb-extensions-cli/Cargo.toml @@ -9,6 +9,7 @@ publish = false anyhow = { workspace = true, optional = true } clap.workspace = true camino = { workspace = true, optional = true } +cairo-air = { workspace = true, optional = true } cairo-vm = { workspace = true, optional = true } scarb-ui = { path = "../scarb-ui", optional = true } @@ -24,7 +25,7 @@ execute = [ "cairo-vm/clap" ] mdbook = ["dep:camino", "dep:scarb-ui"] -prove = ["execute", "dep:scarb-ui"] +prove = ["execute", "dep:cairo-air", "dep:scarb-ui"] verify = ["dep:camino", "dep:scarb-ui"] default = [ "cairo-language-server", diff --git a/utils/scarb-extensions-cli/src/prove.rs b/utils/scarb-extensions-cli/src/prove.rs index dd6245883..df453b973 100644 --- a/utils/scarb-extensions-cli/src/prove.rs +++ b/utils/scarb-extensions-cli/src/prove.rs @@ -3,6 +3,7 @@ //! Extension CLI arguments datastructures. use crate::execute::ExecutionArgs; +use cairo_air::utils::ProofFormat; use clap::Parser; use scarb_ui::args::{PackagesFilter, VerbositySpec}; @@ -51,6 +52,10 @@ pub struct Args { #[arg(long, env = "SCARB_OUTPUT_JSON")] pub json: bool, + /// Format used to serialize the generated proof. + #[arg(long, value_enum, default_value_t = ProofFormat::Json)] + pub proof_format: ProofFormat, + /// Logging verbosity. #[command(flatten)] pub verbose: VerbositySpec, From e1c257cda6d8ac600ec9f54cae57d7cb32aad3de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Tr=C4=85tnowiecki?= Date: Wed, 27 May 2026 18:21:02 +0200 Subject: [PATCH 2/2] remove old dep --- Cargo.lock | 1 - extensions/scarb-prove/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 72b9a571d..5fd239668 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7432,7 +7432,6 @@ version = "2.18.0" dependencies = [ "anyhow", "assert_fs", - "cairo-air", "camino", "clap", "create-output-dir 1.0.0", diff --git a/extensions/scarb-prove/Cargo.toml b/extensions/scarb-prove/Cargo.toml index 863b118f5..cc684d7ba 100644 --- a/extensions/scarb-prove/Cargo.toml +++ b/extensions/scarb-prove/Cargo.toml @@ -16,7 +16,6 @@ heavy-tests = [] [dependencies] anyhow.workspace = true -cairo-air.workspace = true camino.workspace = true clap.workspace = true create-output-dir = { path = "../../utils/create-output-dir" }