diff --git a/gnark-wrapper/.gitignore b/gnark-wrapper/.gitignore old mode 100644 new mode 100755 diff --git a/gnark-wrapper/README.md b/gnark-wrapper/README.md old mode 100644 new mode 100755 index 2d4e816..8948636 --- a/gnark-wrapper/README.md +++ b/gnark-wrapper/README.md @@ -54,26 +54,39 @@ This folder `testdata/dummy` must contain: - `proof_with_public_inputs.json` - `common_circuit_data.json` -2. Compile: +2. **Create or edit your `params.sh`** +Define your defaults (circuit folder, output dir, proof system, dummy mode) in `params.sh` ```bash -./compile.sh ./testdata/dummy ./gnark_output groth16 false +export CIRCUIT_DIR="$PWD/testdata/dummy" # path to Plonky2 JSON files +export DATA_DIR="$PWD/gnark_output" # where to save gnark outputs +export PROOF_SYSTEM="groth16" # "plonk" or "groth16" +export DUMMY="false" # dummy or real setup ``` -Produces ./gnark_output/groth16/r1cs.bin, pk.bin, vk.bin, and Verifier.sol. -3. Prove: +3. **Run the full end-to-end using defaults in `params.sh`** ```bash -./prove.sh ./testdata/dummy ./gnark_output groth16 false +./run_gnark_cli.sh ``` -Produces ./gnark_output/groth16/proof.json and public_witness.bin. +If you don’t supply any of `--compile`, `--prove` or `--verify` flags, it will run all three compile → prove → verify in sequence. -4. Verify: -```bash -./verify.sh ./testdata/dummy ./gnark_output groth16 false -``` -Checks proof.json + vk.bin + public_witness.bin. +4. **Run individual steps** +Append any combination of: +- `--compile` +- `--prove` +- `--verify` -5. (Optional) Full end-to-end ```bash -./test.sh ./testdata/dummy ./gnark_output groth16 false +# Compile only +./run_gnark_cli.sh --compile + +# Prove and then verify +./run_gnark_cli.sh --prove --verify +``` + +5. **Use a custom params.sh location** +Pass -P or --params-file before any other flags: +```bash +./run_gnark_cli.sh \ + -P /path/to/your/params.sh \ + --compile --prove ``` -Calls compile → prove → verify in sequence. diff --git a/gnark-wrapper/circuit.go b/gnark-wrapper/circuit.go old mode 100644 new mode 100755 diff --git a/gnark-wrapper/cli.go b/gnark-wrapper/cli.go old mode 100644 new mode 100755 index d5e6f6f..31cabf9 --- a/gnark-wrapper/cli.go +++ b/gnark-wrapper/cli.go @@ -183,7 +183,6 @@ func ProveCircuit(circuitPath string, dataPath string, proofSystem string, isDum log.Err(err).Msg("failed sanity check to verify proof") os.Exit(1) } - log.Info().Msgf("number of public input: %s", publicWitness) log.Info().Msg("Successfully passed sanity check - proof verification") } } else { diff --git a/gnark-wrapper/compile.sh b/gnark-wrapper/compile.sh deleted file mode 100755 index b12e010..0000000 --- a/gnark-wrapper/compile.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Usage: ./compile.sh -CIRCUIT_DIR=${1:-"$PWD/testdata/dummy"} # path to your Plonky2 JSON folder -DATA_DIR=${2:-"$PWD/gnark_output"} # where to save gnark outputs -PROOF_SYSTEM=${3:-"groth16"} # "plonk" or "groth16" -DUMMY=${4:-"false"} # dummy or real setup - -echo "Building verifier binary..." -go build -o verifier . - -echo "Compiling circuit ($PROOF_SYSTEM)…" -./verifier \ - -circuit "${CIRCUIT_DIR}" \ - -data "${DATA_DIR}" \ - -proof-system "${PROOF_SYSTEM}" \ - -dummy="${DUMMY}" \ - -compile diff --git a/gnark-wrapper/go.mod b/gnark-wrapper/go.mod old mode 100644 new mode 100755 diff --git a/gnark-wrapper/go.sum b/gnark-wrapper/go.sum old mode 100644 new mode 100755 diff --git a/gnark-wrapper/params.sh b/gnark-wrapper/params.sh new file mode 100755 index 0000000..98104df --- /dev/null +++ b/gnark-wrapper/params.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +export CIRCUIT_DIR="$PWD/testdata/dummy" # path to Plonky2 JSON files +export DATA_DIR="$PWD/gnark_output" # where to save gnark outputs +export PROOF_SYSTEM="groth16" # "plonk" or "groth16" +export DUMMY="false" # dummy or real setup \ No newline at end of file diff --git a/gnark-wrapper/prove.sh b/gnark-wrapper/prove.sh deleted file mode 100644 index 0b3d6aa..0000000 --- a/gnark-wrapper/prove.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Usage: ./prove.sh [proof_system] -CIRCUIT_DIR=${1:-"$PWD/testdata/dummy"} -DATA_DIR=${2:-"$PWD/gnark_output"} -PROOF_SYSTEM=${3:-"groth16"} -DUMMY=${4:-"false"} - -echo "Generating proof ($PROOF_SYSTEM)…" -./verifier \ - -circuit "${CIRCUIT_DIR}" \ - -data "${DATA_DIR}" \ - -proof-system "${PROOF_SYSTEM}" \ - -dummy="${DUMMY}" \ - -prove diff --git a/gnark-wrapper/prover.go b/gnark-wrapper/prover.go old mode 100644 new mode 100755 diff --git a/gnark-wrapper/run_gnark_cli.sh b/gnark-wrapper/run_gnark_cli.sh new file mode 100755 index 0000000..8c3b73e --- /dev/null +++ b/gnark-wrapper/run_gnark_cli.sh @@ -0,0 +1,120 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <&2 + exit 1 +fi + +# Initialize flags +do_compile=false +do_prove=false +do_verify=false + +# Parse command-line arguments for operations and options +while [[ $# -gt 0 ]]; do + case "$1" in + -c|--circuit-dir) + CIRCUIT_DIR="$2"; shift 2;; + -d|--data-dir) + DATA_DIR="$2"; shift 2;; + -s|--proof-system) + PROOF_SYSTEM="$2"; shift 2;; + --dummy) + DUMMY="true"; shift;; + --no-dummy) + DUMMY="false"; shift;; + --compile) + do_compile=true; shift;; + --prove) + do_prove=true; shift;; + --verify) + do_verify=true; shift;; + -h|--help) + usage; exit 0;; + *) + echo "Error: Unknown option: $1" >&2; usage; exit 1;; + esac +done + +# If no operations are specified, perform all +if ! $do_compile && ! $do_prove && ! $do_verify; then + do_compile=true + do_prove=true + do_verify=true +fi + +# Build verifier binary +if $do_compile || $do_prove || $do_verify; then + echo "Building verifier binary..." + go build -o verifier . +fi + +# Helper to run gnark verifier with a specific operation +run_verifier() { + local mode_flag="$1" + local action_name="$2" + echo "${action_name} (${PROOF_SYSTEM})…" + ./verifier \ + -circuit "${CIRCUIT_DIR}" \ + -data "${DATA_DIR}" \ + -proof-system "${PROOF_SYSTEM}" \ + -dummy="${DUMMY}" \ + "${mode_flag}" +} + +# Execute requested operations +if $do_compile; then + run_verifier "-compile" "Compiling circuit" +fi + +if $do_prove; then + run_verifier "-prove" "Generating proof" +fi + +if $do_verify; then + run_verifier "-verify" "Verifying proof" +fi diff --git a/gnark-wrapper/test.sh b/gnark-wrapper/test.sh deleted file mode 100644 index e3fd198..0000000 --- a/gnark-wrapper/test.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Usage: ./test.sh - -CIRCUIT_DIR=${1:-"$PWD/testdata/dummy"} # path to your Plonky2 JSON folder -DATA_DIR=${2:-"$PWD/gnark_output"} # where to save gnark outputs -PROOF_SYSTEM=${3:-"groth16"} # "plonk" or "groth16" -DUMMY=${4:-"false"} # dummy or real setup - -echo "Running full test: compile → prove → verify" -./compile.sh "${CIRCUIT_DIR}" "${DATA_DIR}" "${PROOF_SYSTEM}" "${DUMMY}" -./prove.sh "${CIRCUIT_DIR}" "${DATA_DIR}" "${PROOF_SYSTEM}" "${DUMMY}" -./verify.sh "${CIRCUIT_DIR}" "${DATA_DIR}" "${PROOF_SYSTEM}" "${DUMMY}" diff --git a/gnark-wrapper/testdata/dummy/common_circuit_data.json b/gnark-wrapper/testdata/dummy/common_circuit_data.json old mode 100644 new mode 100755 diff --git a/gnark-wrapper/testdata/dummy/proof_with_public_inputs.json b/gnark-wrapper/testdata/dummy/proof_with_public_inputs.json old mode 100644 new mode 100755 diff --git a/gnark-wrapper/testdata/dummy/verifier_only_circuit_data.json b/gnark-wrapper/testdata/dummy/verifier_only_circuit_data.json old mode 100644 new mode 100755 diff --git a/gnark-wrapper/verifier.go b/gnark-wrapper/verifier.go old mode 100644 new mode 100755 diff --git a/gnark-wrapper/verify.sh b/gnark-wrapper/verify.sh deleted file mode 100644 index 9b8e020..0000000 --- a/gnark-wrapper/verify.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Usage: ./verify.sh [proof_system] -CIRCUIT_DIR=${1:-"$PWD/testdata/dummy"} -DATA_DIR=${2:-"$PWD/gnark_output"} -PROOF_SYSTEM=${3:-"groth16"} -DUMMY=${4:-"false"} - -echo "Verifying proof ($PROOF_SYSTEM)…" -./verifier \ - -circuit "${CIRCUIT_DIR}" \ - -data "${DATA_DIR}" \ - -proof-system "${PROOF_SYSTEM}" \ - -dummy="${DUMMY}" \ - -verify