Escrito por Pablo Gómez
Founder & CEO da Metlabs · Revisado em 11 de outubro de 2026
O circuito aritmético é a ponte obrigatória de qualquer sistema de prova: nenhum esquema pode demonstrar nada sobre um programa até que esse programa seja expresso como restrições. O cálculo é modelado com portas de soma e multiplicação conectadas por fios e, depois, compilado para um sistema de restrições, normalmente R1CS (Rank-1 Constraint System), em que cada restrição tem a forma (A·s) × (B·s) = (C·s) e o vetor s reúne a atribuição de todos os fios.
O provador busca uma atribuição válida para esses fios, chamada testemunha ou witness, que satisfaça todas as restrições, e gera a prova sobre esse R1CS com um sistema como Groth16 ou PLONK. Uma regra-chave é que as restrições devem ser quadráticas, de grau dois, de modo que as expressões complexas são decompostas em multiplicações de pares. O número e a qualidade das restrições determinam diretamente o custo de gerar a prova.
Para escrever esses circuitos sem fazê-lo à mão existem linguagens especializadas. Circom, desenvolvida pela Iden3, define circuitos que são compilados para R1CS e gera o programa que computa o witness; é usada por Tornado Cash e Semaphore por meio da biblioteca circomlib. Noir, criada pela Aztec e com sintaxe inspirada em Rust, trabalha em um nível mais alto e compila para uma representação intermediária (ACIR) que admite diferentes backends de prova. Ambas permitem que um desenvolvedor expresse a lógica que depois um SNARK demonstrará.
Também conhecido como
- ZK circuit





