---
title: "O que é um zkEVM?"
description: "Tipos de zkEVMs, como funcionam e por que são importantes"
---

# O que é um zkEVM?

Uma zero-knowledge Ethereum Virtual Machine \(zkEVM\) é uma máquina virtual que gera [provas de conhecimento zero](https://www.alchemy.com/overviews/snarks-vs-starks) para verificar a correção de programas. As zkEVMs são projetadas para executar smart contracts de forma compatível com tecnologia de conhecimento zero.

As zkEVMs fazem parte dos [zero-knowledge \(ZK\) rollups](https://www.alchemy.com/blog/zero-knowledge-rollups), soluções de escalonamento de camada 2 do Ethereum que melhoram a taxa de transferência transferindo computação e armazenamento de estado para fora da cadeia. Um ZK-rollup envia dados de transação ao Ethereum junto com provas de conhecimento zero que verificam a validade dos lotes de transações off-chain.

Os primeiros ZK-rollups não conseguiam executar smart contracts e se limitavam a swaps de tokens e pagamentos simples. Mas, com a introdução de máquinas virtuais de conhecimento zero compatíveis com EVM, os ZK-rollups estão começando a suportar [apps](https://www.alchemy.com/dapps/top/defi-dapps) do Ethereum.

Neste artigo, exploramos como funciona uma zkEVM, por que ela importa e quais tipos de zkEVM existem.

## O que é uma zkEVM?

Uma zkEVM é uma máquina virtual compatível com EVM que suporta computação de provas de conhecimento zero. Diferente de máquinas virtuais comuns, uma zkEVM prova a correção da execução de programas, incluindo a validade das entradas e saídas usadas na operação.

Vamos detalhar essa definição para facilitar o entendimento:

### Compatibilidade com EVM

A [EVM \(Ethereum Virtual Machine\)](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) é o ambiente de execução no qual os smart contracts implantados na rede Ethereum são executados. A EVM funciona como um "computador mundial" que alimenta aplicações descentralizadas rodando na blockchain do Ethereum.

Uma máquina virtual é "compatível com EVM" se consegue executar programas criados para rodar no ambiente EVM. Essas VMs podem executar smart contracts escritos em Solidity ou em outras linguagens de alto nível usadas no desenvolvimento Ethereum. As zkEVMs são compatíveis com EVM porque conseguem executar smart contracts do Ethereum sem modificações extensas na lógica subjacente.

### Suporte a tecnologia de conhecimento zero

A EVM nunca foi projetada para suportar provas de conhecimento zero, o que torna difícil construir máquinas virtuais compatíveis com EVM e amigáveis a conhecimento zero. No entanto, avanços na pesquisa tornaram possível — até certo ponto — envolver a computação da EVM em provas de conhecimento zero.

Diferentes projetos de zkEVM adotam diferentes abordagens para combinar a execução da EVM com a computação de provas de conhecimento zero. Cada método tem trade-offs específicos, que exploramos em uma seção posterior deste guia.

## Como funciona uma zkEVM?

Assim como a EVM, uma zkEVM é uma máquina virtual que transita entre estados como resultado de operações de programas. Mas a zkEVM vai além ao produzir uma prova que atesta a correção de cada parte da computação. Essencialmente, uma zkEVM usa um mecanismo para provar que as etapas de execução \(descritas anteriormente\) seguiram as regras.

Para entender como uma zkEVM funciona \(e por que ela é diferente\), vamos revisar como a EVM funciona atualmente.

### Como a EVM funciona

A Ethereum Virtual Machine é uma máquina de estados que passa de um estado antigo para um novo estado em resposta a algumas entradas. Cada execução de smart contract dispara uma mudança no estado da EVM \(chamada de "transição de estado"\). Aqui está uma visão geral de alto nível do que acontece durante uma transação de smart contract:

1. O bytecode do contrato \(compilado a partir do código-fonte\) é carregado do armazenamento da EVM e executado por nós peer-to-peer na EVM. Os nós usam as mesmas entradas de transação, o que garante que cada nó chegue ao mesmo resultado \(caso contrário, não conseguiriam alcançar consenso\).

2. Os [opcodes da EVM](https://www.ethervm.io/) \(contidos no bytecode\) interagem com diferentes partes do estado da EVM \(memória, armazenamento e pilha\). Os opcodes realizam operações de leitura e escrita — _lendo_ \(obtendo\) valores do armazenamento de estado e _escrevendo_ \(enviando\) novos valores ao armazenamento da EVM.

3. Os opcodes da EVM realizam computação sobre os valores obtidos do armazenamento de estado antes de retornar os novos valores. Essa atualização resulta na transição da EVM para um novo estado \(por isso as transações são chamadas de "transições de estado"\). Esse novo estado é replicado por outros nós e permanece até que outra transação seja executada.

<ImageBlock
  src="https://media.alchemy.com/1704295117-evm-execution-model.png"
  alt="Um diagrama mostrando como os programas são executados na Ethereum Virtual Machine (EVM)."
  width={968}
  height={707}
  caption="Um diagrama mostrando como os programas são executados na Ethereum Virtual Machine (EVM)."
/>

### Como a zkEVM funciona

A zkEVM gera provas de conhecimento zero para verificar diversos elementos em cada computação:

1. **Acesso ao bytecode**: O código de programa apropriado foi carregado corretamente, do endereço correto?

2. **Operações de leitura e escrita**: a. O programa buscou os valores corretos da pilha/memória/armazenamento antes da computação? b. O programa escreveu os valores de saída corretos na pilha/memória/armazenamento após concluir a execução?

3. **Computação**: Os opcodes foram executados corretamente \(ou seja, um após o outro, sem pular etapas\)?

#### A arquitetura de uma zkEVM

A zkEVM é dividida em três partes: um ambiente de execução, um circuito de prova e um contrato verificador. Cada componente contribui para a execução de programas, geração de provas e verificação de provas da zkEVM.

##### 1. O ambiente de execução

Como o nome sugere, o ambiente de execução é onde os programas \(smart contracts\) são executados na zkEVM. O ambiente de execução da zkEVM funciona de forma muito parecida com a EVM: ele recebe o estado inicial e a transação atual para produzir um novo estado \(final\).

##### 2. O circuito de prova

O circuito de prova produz provas de conhecimento zero que verificam a validade das transações computadas no ambiente de execução. O processo de geração de prova é concluído usando o pré-estado, as entradas da transação e as informações de pós-estado como entradas. Depois disso, o prover obtém uma prova sucinta da validade daquela transição de estado específica.

<ImageBlock
  src="https://media.alchemy.com/1704293216-zkevm-validity-proofs.png"
  alt="Um diagrama mostrando como a zkEVM gera provas de validade para programas."
  width={902}
  height={517}
  caption="A zkEVM gera provas de validade para verificar a corretude da execução de programas."
/>

##### 3. O contrato verificador

Os ZK-rollups enviam provas de validade a um smart contract implantado na cadeia L1 \(Ethereum\) para verificação. A entrada \(pré-estados e informações de transação\) e a saída \(estados finais\) também são enviadas ao contrato verificador. Em seguida, o verificador executa computação sobre a prova fornecida e confirma que as saídas enviadas foram calculadas corretamente a partir das entradas.

## O que são opcodes de zkEVM?

Os opcodes de zkEVM são instruções de máquina de baixo nível usadas para executar programas em um ZK-rollup compatível com EVM. Assim como na EVM, contratos escritos em linguagens de alto nível precisam ser compilados para uma linguagem de baixo nível que a VM possa interpretar \(bytecode\). Esse bytecode especifica os opcodes usados na execução do programa quando ele é implantado na VM.

Precisamos de opcodes de zkEVM porque os opcodes comuns da EVM são ineficientes para uso em circuitos de prova de conhecimento zero. Geralmente há duas abordagens para criar opcodes para zkEVMs:

1. Construir circuitos ZK para opcodes nativos da EVM
1. Criar novas linguagens para computação de provas ZK

#### Construir circuitos de conhecimento zero para opcodes nativos da EVM

Essa abordagem exige implementar todos os conjuntos de instruções da EVM em um circuito aritmético — uma tarefa complexa e demorada. A vantagem é que os desenvolvedores podem criar smart contracts usando [ferramentas de desenvolvimento blockchain existentes](https://www.alchemy.com/overviews/20-blockchain-development-tools) ou portar contratos Ethereum existentes para ZK-rollups sem modificações extensas.

#### **Criar novas linguagens para computação de provas ZK**

Essa abordagem exige construir uma nova linguagem — projetada para suportar provas de validade — e desenvolver opcodes customizados. Os desenvolvedores precisarão escrever contratos diretamente na nova linguagem ou compilar código-fonte Solidity para opcodes customizados de zkEVM.

Embora esse método seja geralmente mais simples de implementar do que o primeiro, ele tem desvantagens. Por exemplo, os desenvolvedores podem não conseguir acessar a infraestrutura e os recursos existentes do Ethereum.

<ImageBlock
  src="https://media.alchemy.com/1704295202-zkevm-classification.png"
  alt="Uma classificação de máquinas virtuais de conhecimento zero de acordo com a compatibilidade com a EVM."
  width={937}
  height={587}
  caption="Uma classificação de máquinas virtuais de conhecimento zero de acordo com a compatibilidade com a EVM."
/>

## O que torna a construção de uma zkEVM difícil?

Como a EVM não foi construída com computação de zk-proof em mente, ela tem características que não são amigáveis para circuitos de prova. Aqui está uma visão geral breve de quatro coisas que tornam a construção de zkEVMs difícil:

1. Opcodes especiais
1. Arquitetura baseada em pilha
1. Overhead de armazenamento
1. Custos de prova

### 1. Opcodes especiais

Diferente de uma VM comum, a EVM usa opcodes especiais para execução de programas \(CALL, DELEGATECALL\) e tratamento de erros \(REVERT, INVALID\), entre outras operações. Isso adiciona complexidade ao processo de projetar o circuito de prova para operações da EVM.

### 2. Arquitetura baseada em pilha

A EVM usa uma arquitetura baseada em pilha que, embora mais simples que uma estrutura baseada em registradores, aumenta a dificuldade de provar a computação. É por isso que VMs de conhecimento zero de destaque, como a zkEVM do [ZkSync](https://www.alchemy.com/overviews/what-is-zksync-era) e a StarkNet da StarkWare, usam um modelo baseado em registradores.

### 3. Overhead de armazenamento

O layout de armazenamento da EVM depende de funções de hash Keccak e de uma Merkle Patricia Trie, ambas com alto overhead de prova. Algumas zkVMs, como a ZkSync, tentam contornar esse problema substituindo a função KECCAK256 — mas isso pode quebrar a compatibilidade com ferramentas e infraestrutura existentes do Ethereum.

### 4. Custos de prova

Mesmo que os problemas mencionados acima sejam resolvidos, ainda há o processo de geração de provas a enfrentar. Gerar provas de conhecimento zero requer hardware especializado, além de investimento considerável em tempo, dinheiro e esforço.

Embora não seja exaustiva, essa lista apresenta alguns dos problemas que dificultam os esforços de construir zkEVMs compatíveis com EVM. Ainda assim, [vários avanços em tecnologia de conhecimento zero](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now) tornaram possível mitigar esses problemas — levando a um interesse renovado em soluções de zkEVM.

## Por que uma zkEVM é importante?

Construir uma zkEVM totalmente funcional vai incentivar o desenvolvimento de [projetos ZK-rollup](https://www.alchemy.com/overviews/zk-rollup-projects) compatíveis com EVM. Isso apresenta várias vantagens:

1. Escalabilidade segura
1. Custos mais baixos
1. Finalidade mais rápida e eficiência de capital
1. Efeitos de rede

### **1. Escalabilidade segura**

Segundo as regras do protocolo, todos os nós validadores precisam reexecutar todas as computações realizadas na Ethereum Virtual Machine. Essa abordagem garante segurança, já que os nós do Ethereum podem verificar de forma independente a correção dos programas, mas ela impõe limites à escalabilidade que a rede Ethereum consegue gerenciar \(apenas ~15-20 transações\).

Os ZK-rollups compatíveis com EVM podem corrigir os problemas de throughput do Ethereum sem comprometer a segurança da rede. Assim como outros protocolos de escalonamento, os ZK-rollups não estão sujeitos às regras do protocolo de consenso do Ethereum e podem otimizar para velocidade de execução. Algumas estimativas sugerem que [os ZK-rollups podem processar ~2000 transações por segundo](https://blog.matter-labs.io/optimistic-vs-zk-rollup-deep-dive-ea141e71e075) sem incorrer nas altas taxas do Ethereum.

No entanto, os ZK-rollups têm garantias de segurança mais altas em comparação com outros projetos de escalonamento; eles verificam a correção da computação off-chain com provas de validade. Isso significa que transações realizadas por smart contracts na L2 podem ser verificadas de forma confiável na L1 \(Ethereum\) sem que os nós precisem reexecutar as operações. Isso pode aumentar significativamente a velocidade de processamento do Ethereum sem reduzir a segurança.

### **2. Custos mais baixos**

Os Rollups derivam segurança da [Ethereum Mainnet](https://www.alchemy.com/rpc/ethereum) escrevendo dados de transação no Ethereum como CALLDATA. No entanto, optimistic rollups e ZK-rollups diferem em quanta informação precisam publicar no Ethereum.

Como os [optimistic rollups](https://www.alchemy.com/overviews/optimistic-rollups) não fornecem prova de validade para transações off-chain, eles precisam publicar todos os dados relacionados às transações on-chain \(incluindo assinaturas e parâmetros de transação\). Sem colocar todos os dados on-chain, os desafiadores não conseguem construir fraud proofs usadas para contestar transações de rollup inválidas.

Por outro lado, os ZK-rollups podem se dar ao luxo de publicar dados mínimos no Ethereum porque as provas de validade já garantem a confiabilidade das transições de estado. A zkEVM pode até omitir as entradas de transação e publicar apenas as mudanças de estado final, reduzindo ainda mais os requisitos de CALLDATA.

Isso é benéfico para desenvolvedores e usuários porque uma [grande porcentagem dos custos de rollup](https://forum.celestia.org/t/ethereum-rollup-call-data-pricing-analysis/141) vem de publicar dados on-chain. Ao reduzir o CALLDATA ao mínimo, os ZK-rollups podem tornar mais barato usar apps, como exchanges descentralizadas, marketplaces de NFT, mercados de previsão, e muitos outros.

### 3. Finalidade mais rápida e eficiência de capital

Além de melhor segurança, os ZK-rollups têm outra vantagem sobre os optimistic rollups: finalidade mais rápida. A finalidade em blockchains é o tempo que uma transação leva para se tornar irreversível; uma transação só pode ser finalizada se os participantes da rede tiverem prova objetiva de sua validade.

Com os ZK-rollups, as transações executadas na zkEVM geralmente são finalizadas imediatamente após serem publicadas no Ethereum. Como cada lote de transações vem com uma prova de validade instantaneamente verificável, a cadeia principal do Ethereum pode aplicar as atualizações de estado rapidamente.

Como os optimistic rollups apenas publicam transações da VM sem provas, o período de contestação precisa passar antes que as transações atinjam a finalidade. O período de contestação é um período de 1-2 semanas durante o qual qualquer pessoa pode contestar uma transação após ela ser enviada ao Ethereum.

A finalidade mais lenta tem muitas implicações para a experiência do usuário. Por exemplo, os usuários não conseguem sacar ativos do rollup até que o período de atraso expire. Provedores de liquidez podem resolver o problema, mas talvez sejam ineficazes se o saque envolver ativos de alto valor ou até mesmo NFTs.

Uma zkEVM não tem nenhum desses problemas descritos acima. A finalidade mais rápida é ótima para power users, como traders de NFT, investidores DeFi ou traders de arbitragem que precisam movimentar ativos de forma fluida \(especialmente entre L1 e L2\).

### 4. Efeitos de rede

O motivo mais importante para construir zkVMs compatíveis com EVM é aproveitar os efeitos de rede do Ethereum. Como a maior plataforma de smart contracts do mundo, o Ethereum tem um ecossistema grande que fornece valor tanto para desenvolvedores quanto para projetos.

Por exemplo, os desenvolvedores podem acessar bibliotecas de código testadas em batalha e auditadas, ferramentas extensas, documentação, e assim por diante. Criar uma nova zkVM incompatível com a infraestrutura do Ethereum cortaria projetos e equipes de desenvolvimento do aproveitamento dos efeitos de rede do Ethereum.

## Que tipos de zkEVM existem?

Os projetos atuais de zkEVM se dividem em duas categorias principais: zkVMs que suportam opcodes nativos da EVM e zkVMs que usam opcodes customizados da EVM. Abaixo comparamos diferentes protocolos de zkEVM e explicamos como funcionam:

### Polygon zkEVM

Polygon Hermez é um [ZK-rollup do Polygon](https://www.alchemy.com/overviews/polygon-zk-rollups) com uma máquina virtual de conhecimento zero projetada para suportar compatibilidade com EVM. Para isso, o bytecode da EVM é compilado em "micro opcodes" e executado na uVM — uma máquina virtual que usa provas SNARK e STARK para verificar a correção da execução de programas.

A decisão de combinar os dois tipos de prova é estratégica. As provas STARK \(Scalable Transparent ARgument of Knowledge\) são mais rápidas de gerar, mas as provas SNARK \(Succinct Non-Interactive Argument of Knowledge\) são menores e mais baratas de verificar no Ethereum.

A zkEVM do Polygon Hermez usa um circuito de prova STARK para gerar provas de validade para transições de estado. Uma prova STARK verifica a correção das provas STARK \(pense nisso como gerar "prova de uma prova"\) e é enviada ao Ethereum para verificação.

### zkSync zkEVM

zkSync é um ZK-rollup compatível com EVM desenvolvido pela Matter Labs e alimentado por sua própria zkEVM. O zkSync alcança compatibilidade com o Ethereum usando a seguinte estratégia:

1. Compilar o código do contrato escrito em Solidity para Yul, uma linguagem intermediária que pode ser compilada em bytecode para diferentes máquinas virtuais.

2. Recompilar o bytecode Yul \(usando o framework LLVM\) para um conjunto de bytecode customizado e compatível com circuitos, projetado especialmente para a zkEVM do zkSync.

Assim como o Polygon Hermez, a zkEVM do zkSync alcança compatibilidade com EVM no nível da linguagem, não no nível do bytecode. Por exemplo, os opcodes tradicionais de multiplicação e adição \(ADDMOD, SMOD, MULMOD\) não são suportados pela zkEVM do zkSync.

### Scroll zkEVM

[Scroll](https://scroll.io/blog/zkEVM) é uma nova implementação de EVM de conhecimento zero em desenvolvimento. A equipe do Scroll planeja projetar circuitos de conhecimento zero para cada opcode da EVM. Isso permitiria que desenvolvedores implantassem smart contracts nativos do Ethereum EVM no Scroll sem precisar modificar o bytecode subjacente da EVM.

Entre outras coisas, a zkEVM do Scroll usará um "acumulador criptográfico" para verificar a correção do armazenamento. Isso é usado para provar que o bytecode do contrato foi carregado corretamente a partir do endereço fornecido.

Ela também fornece um circuito para vincular o bytecode com o rastro de execução. O rastro de execução é uma sequência que especifica quais instruções da VM foram executadas e em que ordem. Os provers enviarão o rastro de execução durante a geração de prova para verificar que a computação foi consistente com o bytecode original.

### AppliedZKP zkEVM

[Applied ZKP](https://github.com/privacy-scaling-explorations/zkevm-specs) é um projeto financiado pela Ethereum Foundation para desenvolver um ZK-rollup compatível com EVM e um mecanismo para gerar provas de validade para blocos do Ethereum. A última parte é crítica porque parear blocos com provas de validade eliminaria a necessidade de os nós reexecutarem os blocos.

A inovação do Applied ZKP é a separação da computação do armazenamento. Ele usa dois tipos de provas de validade — **state proofs** e **EVM proofs**:

#### **State proofs**‍

Verifica que operações que tocam armazenamento, memória e pilha aconteceram corretamente. As state proofs essencialmente verificam a precisão das operações de leitura e escrita.

#### **EVM proofs**

Verifica que a computação chamou o opcode correto no momento certo. As EVM proofs verificam a própria computação e também confirmam que a state proof executou a operação correta para cada opcode.

A zkEVM do AppliedZKP usa um bus mapping para vincular a state proof e a EVM proof. Além disso, ambas as provas precisam ser verificadas antes que o bloco do Ethereum seja considerado válido.

## Em que ponto estamos no progresso de desenvolvimento das zkEVMs?

Exceto pelo zkSync, a maioria das EVMs de conhecimento zero ainda está em produção. Ainda assim, o crescente desenvolvimento em tecnologia de conhecimento zero significa que a perspectiva de uma zkEVM totalmente funcional é melhor do que nunca.

Enquanto isso, os desenvolvedores podem aproveitar os benefícios de aplicações de conhecimento zero com a VM de conhecimento zero StarkNet. A StarkNet não é compatível com EVM, mas pode compilar código-fonte Solidity para bytecode customizado e amigável a ZK. Você também pode optar por escrever contratos em Cairo \(a linguagem da StarkNet\).

Cadastre-se na Alchemy gratuitamente para começar a [construir na StarkNet](https://www.alchemy.com/layer2/starknet) hoje mesmo.

## Perguntas frequentes

### O que significa zkEVM?

zkEVM significa Zero-Knowledge Ethereum Virtual Machine, uma máquina virtual que executa smart contracts enquanto gera provas de conhecimento zero para verificar a correção.

### Em que uma zkEVM difere da máquina virtual padrão do Ethereum?

Uma zkEVM é compatível com EVM, mas gera provas de conhecimento zero para verificar a validade das transações, permitindo execução off-chain com verificação on-chain para melhor escalabilidade.

### Quais são os principais componentes de uma zkEVM?

Uma zkEVM consiste em três partes: um ambiente de execução onde os smart contracts rodam, um circuito de prova que gera provas de conhecimento zero, e um contrato verificador que checa as provas na Layer 1 do Ethereum.

### Para que são usadas as zkEVMs?

As zkEVMs alimentam os ZK-rollups, que são soluções de escalonamento de Layer 2 do Ethereum que agrupam transações off-chain e enviam provas de validade para a Layer 1, resultando em execução mais rápida e barata.

### Por que as zkEVMs são difíceis de construir?

Construir zkEVMs é desafiador porque a EVM não foi projetada para provas de conhecimento zero, apresentando opcodes especiais, arquitetura baseada em pilha, overhead de armazenamento e altos custos de prova que complicam o design de circuitos.

### Como as zkEVMs melhoram a escalabilidade em comparação com os optimistic rollups?

As zkEVMs fornecem finalidade imediata por meio de provas de validade, eliminando o período de contestação de 1-2 semanas exigido pelos optimistic rollups e permitindo processamento de transações mais rápido.

### O que são opcodes de zkEVM?

Os opcodes de zkEVM são instruções de máquina de baixo nível para executar programas em ZK-rollups, criadas construindo circuitos ZK para opcodes nativos da EVM ou desenvolvendo novas linguagens amigáveis a ZK.

### Quais são alguns exemplos de implementações de zkEVM?

Exemplos incluem Polygon zkEVM \(usando micro opcodes e provas SNARK/STARK\), zkSync \(compilando Solidity para bytecode customizado\), e Scroll \(projetando circuitos para cada opcode da EVM\).
