2025-06-17 12:32:54 +02:00

93 lines
2.6 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
```bash
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
```bash
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`
2. **Create or edit your `params.sh`**
Define your defaults (circuit folder, output dir, proof system, dummy mode) in `params.sh`
```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
```
3. **Run the full end-to-end using defaults in `params.sh`**
```bash
./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.
4. **Run individual steps**
Append any combination of:
- `--compile`
- `--prove`
- `--verify`
```bash
# 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
```