GNARK-Plonky2 Verifier CLI

This repository provides a Go-based CLI for compiling, proving, and verifying Plonky2-wrapped circuits using GNARK (either Plonk or Groth16). It automates:

  • Compilation of the plonky2 verifier circuit (R1CS, PK, VK).
  • Proof generation for compiled circuits.
  • Proof verification.

Prerequisites

  • Go 1.22+ installed.

Installation

Clone this repository:

git clone https://github.com/codex-storage/proof-aggregation.git
cd proof-aggregation/gnark-wrapper
go mod tidy
chmod +x compile.sh prove.sh verify.sh test.sh

Building the Verifier Binary

go build -o verifier .

CLI Usage

The verifier binary has three modes:

-compile: Compiles circuit (outputs R1CS, PK, VK, Solidity contract).

-prove: Generates a proof for the compiled circuit.

-verify: Verifies an existing proof.

Flags:

Flag Description Default
-circuit Directory containing Plonky2 JSON files ./testdata/dummy
-data Output directory ./gnark_output
-proof-system "plonk" or "groth16" "groth16"
-dummy Dummy setup (Groth16 only) "false"
-contract Generate Solidity verifier "true"

Workflow

  1. Prepare your Plonky2 JSON folder This folder testdata/dummy must contain:
  • verifier_only_circuit_data.json
  • proof_with_public_inputs.json
  • common_circuit_data.json
  1. Create or edit your params.sh Define your defaults (circuit folder, output dir, proof system, dummy mode) in params.sh
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
  1. Run the full end-to-end using defaults in params.sh
./run_gnark_cli.sh

If you dont supply any of --compile, --prove or --verify flags, it will run all three compile → prove → verify in sequence.

  1. Run individual steps Append any combination of:
  • --compile
  • --prove
  • --verify
# Compile only
./run_gnark_cli.sh --compile

# Prove and then verify
./run_gnark_cli.sh --prove --verify
  1. Use a custom params.sh location Pass -P or --params-file before any other flags:
./run_gnark_cli.sh \
  -P /path/to/your/params.sh \
  --compile --prove