Escrito por Pablo Gómez
Founder & CEO de Metlabs · Revisado el 11 de octubre de 2026
El circuito aritmético es el puente obligatorio de cualquier sistema de prueba: ningún esquema puede demostrar nada sobre un programa hasta que ese programa se exprese como restricciones. El cálculo se modela con puertas de suma y multiplicación conectadas por cables, y después se compila a un sistema de restricciones, normalmente R1CS (Rank-1 Constraint System), donde cada restricción tiene la forma (A·s) × (B·s) = (C·s) y el vector s recoge la asignación de todos los cables.
El probador busca una asignación válida a esos cables, llamada testigo o witness, que satisfaga todas las restricciones, y genera la prueba sobre ese R1CS con un sistema como Groth16 o PLONK. Una regla clave es que las restricciones deben ser cuadráticas, de grado dos, por lo que las expresiones complejas se descomponen en multiplicaciones de a pares. El número y la calidad de las restricciones determinan directamente el coste de generar la prueba.
Para escribir estos circuitos sin hacerlo a mano existen lenguajes especializados. Circom, desarrollado por Iden3, define circuitos que se compilan a R1CS y genera el programa que computa el witness; lo usan Tornado Cash y Semaphore a través de la librería circomlib. Noir, creado por Aztec y con sintaxis inspirada en Rust, trabaja a más alto nivel y compila a una representación intermedia (ACIR) que admite distintos backends de prueba. Ambos permiten que un desarrollador exprese la lógica que luego un SNARK demostrará.
También conocido como
- ZK circuit
- circuito ZK





