Fork of Rate-Limiting-Nullifier/circom-rln at v1.0.0.
Circuits at v1.0.0 were audited by Veridise, yAcademy fellows and PSE.
The other circuits were added in this fork and have not been externally audited.
RLN is a zero-knowledge gadget that enables spam prevention in anonymous environments.
The core parts of RLN are:
- zk-circuits in Circom (this repo);
- registry smart-contract;
- set of libraries to build app with RLN (rlnjs, zerokit).
To learn more on RLN and how it works - check out documentation.
- Node.js 18 (
circom_testerdoes not support newer versions) - circom 2.1.5, installed with
./scripts/install-circom.sh(needs Rust) - Run
npm cito install the Node.js dependencies (circomlib, snarkjs, circom_tester)
npm run build # every main circuit
./scripts/build-circuits.sh rln_single # a specific circuitCompiles the circuit, runs the Groth16 setup and writes the artifacts to zkeyFiles/<circuit>/.
npm testRuns the ts-mocha suite in test/: witness fixtures for every RLN circuit, official Poseidon2
reference vectors for every arity, and both withdraw circuits.
Runs circomspect on every circuit.
./scripts/circomspect.shRuns Picus on every main circuit (needs Docker).
./scripts/picus.shRuns zkFuzz on every main circuit.
./scripts/zkfuzz.sh