Um coprocessador ZK é construído para descarregar computação da blockchain enquanto mantém a verificabilidade. No seu núcleo, a arquitetura consiste em três componentes principais: o motor provedor, o contrato verificador e a máquina virtual (zkVM ou tempo de execução do circuito).
O motor do provador é responsável por executar o cálculo fora da cadeia e gerar uma prova criptográfica de que o cálculo foi realizado corretamente. Este motor recebe dados de entrada, passa-os por uma lógica ou programa definido, e produz uma prova sucinta de conhecimento zero. O provador é geralmente um processo pesado, exigindo recursos computacionais como CPUs ou GPUs, dependendo do tipo de sistema de prova que está sendo utilizado.
O contrato de verificação é implantado na cadeia e é leve por design. Seu único propósito é validar a correção da prova submetida. Ele detém a chave de verificação, que é derivada matematicamente da mesma lógica utilizada pelo provador. Quando o contrato inteligente recebe uma prova, ele a verifica em relação à chave e confirma se o resultado é válido. Este processo é rápido e barato em comparação a executar todo o cálculo na cadeia.
O zkVM ou circuito aritmético define a lógica do programa. Ele atua como o ambiente de execução para o provador. Em alguns sistemas, este é um circuito personalizado escrito em uma DSL de baixo nível, enquanto outros usam máquinas virtuais completas que podem interpretar código em linguagens de nível superior. Juntos, esses componentes permitem a execução off-chain sem confiança e a verificação on-chain sucinta.
Várias ferramentas e estruturas surgiram para apoiar o desenvolvimento de coprocessadores ZK. Circom é uma das linguagens de circuito mais antigas e amplamente utilizadas. Permite que os desenvolvedores definam circuitos aritméticos usando uma sintaxe declarativa. Esses circuitos são então compilados em sistemas de prova como Groth16 ou PLONK. Circom é conhecido pela sua flexibilidade, mas tem uma curva de aprendizado acentuada e requer design manual de circuitos.
Noir é uma linguagem mais recente projetada para tornar o desenvolvimento ZK acessível. Desenvolvida pela Aztec, Noir é uma linguagem semelhante ao Rust que abstrai grande parte da complexidade dos sistemas de restrição. Ela se compila automaticamente em circuitos de conhecimento zero, tornando mais fácil escrever programas privados com uma sintaxe legível.
Para além das linguagens, os zkVMs estão a ganhar atenção pela sua capacidade de executar código de propósito geral num ambiente amigável para ZK. O Risc Zero oferece uma das implementações de zkVM mais avançadas. Ele emula o conjunto de instruções RISC-V e permite que os desenvolvedores executem qualquer programa escrito em Rust ou C como uma prova de conhecimento zero. O SP1, desenvolvido pela Succinct, adota uma abordagem semelhante, mas visa otimizar o desempenho e a portabilidade entre sistemas de prova.
Esses ambientes são cruciais porque determinam quão expressivos, eficientes e compostáveis podem ser os coprocessadores ZK. Embora os circuitos de baixo nível continuem a ser úteis para aplicações críticas de desempenho, os zkVMs estão permitindo uma adoção mais ampla por parte dos desenvolvedores e uma iteração mais rápida.
Para entender como funciona na prática um coprocessador ZK, considere o fluxo de execução de um sistema como Axiom ou Bonsai da Risc Zero.
No modelo da Axiom, um desenvolvedor define uma consulta sobre dados históricos do Ethereum — por exemplo, verificando se um usuário manteve um saldo específico em um bloco passado. Esta consulta é enviada para o coprocessador off-chain da Axiom. O coprocessador busca os dados on-chain relevantes, processa a consulta e executa a lógica usando um zkVM. Uma vez que a computação está completa, o coprocessador gera uma prova de zero-conhecimento que atesta a correção do resultado. Esta prova é submetida on-chain a um contrato de verificação, que a valida e permite que um contrato inteligente utilize o resultado com plena confiança.
O Bonsai da Risc Zero segue uma estrutura semelhante, mas generaliza o processo. Os desenvolvedores escrevem a lógica da sua aplicação numa linguagem de alto nível como Rust. Este código é compilado numa imagem zkVM e executado fora da cadeia utilizando a infraestrutura do Bonsai. Após a execução, é gerada uma prova que pode ser enviada de volta para qualquer blockchain através de um verificador on-chain.
Esta arquitetura permite que os desenvolvedores construam lógica poderosa e minimizada em termos de confiança sem sobrecarregar a blockchain. Também possibilita provas reutilizáveis e compostas que podem servir múltiplos contratos ou aplicações.
A força de um coprocessador ZK reside no modelo de confiança que ele possibilita. Ao contrário de oráculos centralizados ou provedores de computação off-chain, os coprocessadores ZK não exigem que os usuários confiem na entidade que realiza a computação. Em vez disso, a confiança é transferida para a matemática.
O cerne desta confiança vem da estrutura das provas de conhecimento zero. Estas provas são concebidas de forma que qualquer cálculo inválido, mesmo um único bit incorreto, resultará numa verificação falhada. O contrato de verificação não pode ser enganado para aceitar um resultado falso, assumindo que as suposições criptográficas se mantêm.
Além disso, uma vez que o verificador só precisa das entradas públicas, da prova e da chave de verificação, não há dependência da identidade ou do comportamento do provador. Qualquer terceiro pode gerar a prova, e desde que passe na verificação, é aceita. Isso significa que os provadores podem ser descentralizados, sem permissão e até incentivados, o que é uma característica que é explorada mais a fundo nas redes de prova.
Ao combinar garantias criptográficas com a finalização da blockchain, os coprocessadores ZK permitem uma nova camada de execução sem confiança que não depende de serviços centralizados, reputação ou consenso multisig.
Os coprocessadores ZK estão a encontrar uma verdadeira tração em áreas onde a computação precisa de ser minimamente confiável, eficiente em termos de custo ou privada. No DeFi, eles podem calcular preços médios ponderados pelo tempo, ativos detidos ao longo do tempo ou modelos de risco personalizados sem armazenar todos os dados na cadeia. Isso permite contratos financeiros mais inteligentes sem aumentar os custos de gás ou sobrecarregar a blockchain.
Em aplicações de cross-chain, os coprocessadores ZK podem funcionar como clientes leves. Em vez de executar nós completos para cada cadeia, as aplicações podem verificar uma prova sucinta do estado de outra cadeia. Isso simplifica drasticamente as pontes e os protocolos de mensagens, melhorando tanto a segurança quanto a interoperabilidade.
Os ecossistemas de Layer 2 também estão a adotar coprocessadores ZK como uma forma de otimizar a lógica de rollup. Em vez de executar cada interação dentro do circuito de rollup, os rollups podem delegar tarefas específicas, como deteção de fraudes, verificação de oráculos ou lógica definida pelo utilizador, a coprocessadores ZK externos. Isso reduz os custos de prova e torna os rollups mais modulares.
Os coprocessadores ZK estão assim a surgir como componentes essenciais da infraestrutura. Eles expandem o que as blockchains podem fazer sem comprometer a descentralização ou o desempenho. À medida que as ferramentas e os ambientes de execução amadurecem, é provável que se tornem opções padrão na pilha de desenvolvimento para qualquer aplicação descentralizada avançada.