All notable changes to this project are documented here. This project adheres to Semantic Versioning.
v0.2.0 — 2026-06-21
First release of the rebuilt zkkit library on modern gnark. This is a
ground-up rewrite of the original 2020-era proof of concept; the old API is gone
and preserved only under legacy/.
prove— a compile → setup → prove → verify harness over Groth16 on BN254 (Compile,Setup,Prove,Verify,Run), plus persistence for the constraint system, proving/verifying keys, proof, and public witness (Keys.Save/LoadKeys,SaveProof/LoadProof,SaveCCS/LoadCCS,SavePublicWitness/LoadPublicWitness) so setup, proving, and verification can run as separate steps from on-disk artifacts.- PLONK backend in
prove(CompilePLONK,SetupPLONK,ProvePLONK,VerifyPLONK,RunPLONK) alongside Groth16, using the scs builder and a development-only KZG SRS. The rollup circuit is cross-checked under both backends. - Solidity verifier export:
prove.ExportSolidityVerifier/SaveSolidityVerifieremit an on-chain Groth16 verifier contract (BN254). gadget— reusable in-circuit building blocks:Account.Commit(MiMC account commitment) andVerifyMembership(binds a commitment to a Merkle leaf and proof to a public root, then checks inclusion).rollup— an account-based zk-rollup reference: nativeAccount,Transfer, andOperator(MiMC Merkle state, EdDSA transfers, batch application producing aTransferWitness) plus the in-circuitCircuitand itsAssign, proving a batch of transfers was applied correctly.examples— runnable, tested circuits:cubic,mimc,eddsa.- Benchmarks & sizing:
TestReportConstraintslogs circuit sizes;BenchmarkProveGroth16/BenchmarkProvePLONKtime proving for the rollup (~29.8k constraints/transfer; Groth16 ~0.24s, PLONK ~1.1s for batch=1). - Rollup generality test covering a batch of distinct sender/receiver pairs.
- Tooling:
make verifygate (fmt, vet, test, secrets scan), GitHub Actions CI and release workflows, spec-kit documents underspecs/, and a decision log.
- Curve BN254. Backends: Groth16 (default) and PLONK.
- Requires Go ≥ 1.25 (gnark v0.15 needs ≥ 1.25.7); the toolchain is pinned in
go.mod. - The trusted setup performed by
prove.Setupis an in-process, development-only setup — not a ceremony. Do not use its keys in production.
v0.1.0 — legacy
A "test release" tag on the original gnark v0.2.1-alpha proof of concept
(Initial commit). Kept for history; the code lives under legacy/v0.2-alpha/
and does not build with modern gnark.