100 challenges on the production ZK circuit language. Compile, constrain, prove, and ship — from multiplier.circom to zk-identity.
A hands-on Circom course. Build real circuits — a Merkle-path membership proof, an EdDSA signature verifier, a nullifier-based anonymous credential — and ship them through the full Groth16 pipeline to an on-chain Solidity verifier. This course pairs naturally with the ZKPs course: that course teaches theory, this one teaches the tool. Five capstones across membership proofs, voting, confidential transfers, zk-identity, and a custom circuit of your choosing.
Built by Lakshya
We grant free access case-by-case — students, career-switchers, builders on a tight budget. Sign in to send us a note.
Sign in to applyComplete all modules, then submit the required number of capstone projects. Each must earn a passing rating from an admin reviewer.
Build a Circom circuit that proves membership in a 2^20-leaf Merkle tree using Poseidon hashing. Submit: the .circom file, snarkjs-generated proof + verification key, and a test harness showing 10 successful inclusion proofs and 10 rejected invalid paths. Bonus: generate a Solidity verifier and produce one on-chain verification transaction.
Implement a Semaphore-style circuit: prove 'I am in this group AND my vote on topic X is Y' without revealing identity. Uses Merkle membership + nullifier derivation to prevent double-signalling. Submit: circuit, proof, nullifier computation, and a demo showing that the same identity signalling twice is detectable but anonymous.
Verify EdDSA signatures over Baby Jubjub inside a Circom circuit. Submit: circuit (should reuse circomlib's eddsa), 5 valid signatures that verify, 5 forged signatures that fail witness-gen or SNARK verification. Include constraint count (~4000) and prover time.
Build a voting circuit: voter proves group membership + casts a binary ballot + derives a nullifier. Off-chain: a tallier collects (proof, vote, nullifier) tuples and publishes a batched tally. Submit: circuit, 100 simulated votes, double-vote detection showing one voter's two proofs share a nullifier, and a final tally transcript.
Design and ship a Circom circuit for a problem YOU find interesting — zk-age-verification, zk-KYC, zk-ML inference, zk-sudoku, zk-SMT proofs. Submit: circuit source, a short README explaining the statement + threat model + why you chose Circom over Halo2 / Noir, the full snarkjs artefact bundle, and at least one valid + one invalid witness.
The standard circuit library. Read the five most common templates before Module 2.