Generate Groth16 ZK Proof
Free to download on every platform. Comes pre-installed on BotFone, BotPad and BotFlip — with extra free apps included.
About this app
WHAT IT DOES
Generate Groth16 ZK Proof enables you to produce Groth16 zero-knowledge proofs, the most widely used zk-SNARK proof system for blockchain applications. Groth16 offers the smallest proof size and fastest verification among zk-SNARKs, making it ideal for on-chain verification in Ethereum and other EVM chains. The tool takes circuit inputs (JSON or text), a proving key, and a verification key, and generates a complete Groth16 proof that demonstrates knowledge of inputs satisfying a circuit without revealing those inputs. This is fundamental to privacy-preserving applications, scalable rollups, and efficient verification of complex computations. The tool supports bn128 curve (the standard for EVM compatibility) and can generate proofs compatible with widely used verification libraries including SnarkJS and the ethsnarks Solidity verifier.
HOW TO USE
Connect your wallet using the BGWallet connector (required for context). Select the input format: "JSON" for structured inputs (recommended for most circuits) or "Text" for simple single-value inputs. Enter the circuit inputs in the text area—these should match the structure expected by your circuit (e.g., {"a": "123", "b": "456"} for a simple arithmetic circuit). Paste your circuit-specific proving key as a hex string with 0x prefix. Paste your verification key as a hex string with 0x prefix. Click "Generate Proof" to run the proof generation process. The tool displays the input format, key lengths, and the generated proof, including the proof components (pi_a, pi_b, pi_c) and metadata. You can copy the complete proof to your clipboard for use with smart contracts or off-chain verification systems.
TECHNICAL MECHANISM
This tool implements Groth16 proof generation following the standard zk-SNARK protocol. The circuit is represented as a rank-1 constraint system (R1CS) which is compiled into a quadratic arithmetic program (QAP). The proving key contains the precomputed elements needed for the prover: the powers of tau, the Lagrange basis polynomials, and the linear combinations of the R1CS matrices. Given the circuit inputs and the proving key, the prover computes the witness (all intermediate values in the circuit) and uses the QAP to compute the three elliptic curve points that make up the proof: pi_a ∈ G1, pi_b ∈ G2, pi_c ∈ G1. The proof generation involves multiple scalar multiplications on the bn128 (also known as BN254) curve, which is the standard curve for Ethereum compatibility. The proof is structured as a tuple (pi_a, pi_b, pi_c) that can be verified using the verification key. The tool uses the bn128 curve for all operations, ensuring compatibility with the Ethereum precompiles for pairings, enabling fast on-chain verification with the ethsnarks verifier.
WHAT IT CANNOT SEE
This tool cannot verify that the inputs correspond to actual on-chain state or values—you must ensure the inputs are correct and match the circuit's expected format. It does not support all ZK proof systems (only Groth16). The tool cannot generate proofs without the circuit-specific proving and verification keys; both are required for generation. It does not support hardware acceleration for proof generation; all computation is done in software in the browser. The tool cannot verify the correctness of the proving key without additional trust assumptions; you must trust the key generation ceremony. It does not support proof generation for circuits larger than browser memory limits; very large circuits may cause performance issues or errors. The tool cannot guarantee the security of the generated proof if the proving key is compromised; key integrity is essential for security. It does not support proof aggregation or recursive proofs; it only generates a single proof for a single input. The tool cannot generate proofs for circuits with mutable or dynamic parameters; the circuit and keys must be fixed.
PLEASE NOTE
This tool is designed for developers working with Groth16 zk-SNARKs on Ethereum and EVM-compatible chains. The bn128 curve is the standard for Ethereum, enabling efficient on-chain verification using the pairing precompiles. The proving key and verification key must be generated from the same circuit using a trusted setup ceremony. The proof is structured as a tuple (pi_a, pi_b, pi_c) which can be verified using the ethsnarks Solidity verifier or SnarkJS. The input format must match the circuit's expectations exactly; mismatches will cause the proof generation to fail. The tool uses pure JavaScript for cryptographic operations, which may be slower than native implementations but works entirely in the browser. Always verify the generated proof using the verification key before using it in production systems. The proof is deterministic for a given set of inputs and keys, making it suitable for reproducible builds and testing.