Máquina virtual Ethereum (EVM)
Última atualização da página: 25 de fevereiro de 2026
A Máquina Virtual Ethereum (EVM, em inglês) é um ambiente virtual descentralizado que executa códigos de forma consistente e segura em todos os nós do Ethereum. Os nós executam a EVM para executar contratos inteligentes, usando "gás" para medir o esforço computacional necessário para operações, garantindo a alocação eficiente de recursos e a segurança da rede.
Pré-requisitos
É necessária uma familiaridade básica com a terminologia comum da ciência da computação, como bytes (opens in a new tab), memória (opens in a new tab) e pilha (opens in a new tab) para entender a EVM. Também seria útil estar familiarizado com conceitos de criptografia/blockchain, como funções de hash (opens in a new tab) e a árvore de Merkle (opens in a new tab).
Do livro-razão à máquina de estado
A analogia de um 'livro-razão distribuído' é muitas vezes usada para descrever blockchains como o Bitcoin, que permite uma moeda descentralizada usando ferramentas fundamentais de criptografia. O livro-razão mantém um registro de atividades que deve aderir a um conjunto de regras que regem o que alguém pode e não pode fazer para modificar o livro-razão. Por exemplo, um endereço de Bitcoin não pode gastar mais Bitcoin do que o recebido previamente. Essas regras sustentam todas as transações em Bitcoin e em muitas outras blockchains.
Embora o Ethereum tenha sua própria criptomoeda nativa (ether) que segue quase exatamente as mesmas regras intuitivas, ele também permite uma função muito mais poderosa: contratos inteligentes. Para este recurso mais complexo, uma analogia mais sofisticada é necessária. Em vez de um livro-razão distribuído, o Ethereum é uma máquina de estado (opens in a new tab) distribuída. O estado do Ethereum é uma grande estrutura de dados que contém não apenas todas as contas e saldos, mas também um estado da máquina, que pode mudar de bloco para bloco de acordo com um conjunto predefinido de regras e que pode executar um código de máquina arbitrário. As regras específicas para mudar o estado de bloco em bloco são definidas pela EVM.
Diagrama adaptado de Ethereum EVM illustrated (opens in a new tab)
A função de transição de estado do Ethereum
A EVM se comporta como uma função matemática seria: de acordo com a entrada, ele produz uma saída determinística. Portanto, é muito útil descrever mais formalmente o Ethereum como tendo uma função de transição de estado:
1Y(S, T)= S'Dado um estado válido antigo (S) e um novo conjunto de transações válidas (T), a função de transição de estado do Ethereum Y(S, T) produz um novo estado de saída válido S'
Estado
No contexto do Ethereum, o estado é uma enorme estrutura de dados chamada de árvore de Merkle Patricia modificada, que mantém todas as contas vinculadas por hashes e redutíveis a um único hash raiz armazenado na cadeia de blocos.
Transações
Transações são instruções assinadas criptograficamente de contas. Existem dois tipos de transações: as que resultam em chamadas de mensagem e as que resultam na criação de contratos.
A criação de contrato resulta na criação de uma nova conta de contrato contendo o bytecode compilado do contrato inteligente. Sempre que outra conta faz uma mensagem de chamada a esse contrato, ele executa seu bytecode.
Instruções da EVM
A EVM é executada como uma máquina de pilha (opens in a new tab) com uma profundidade de 1024 itens. Cada item é uma palavra de 256 bits, que foi escolhida para facilitar o uso com criptografia de 256 bits (como hashes Keccak-256 ou assinaturas secp256k1).
Durante a execução, a EVM mantém uma memória transiente (como um array de bytes endereçado por palavra), que não persiste entre transações.
Armazenamento transitório
O armazenamento transitório é um repositório de chave-valor por transação, acessado através dos opcodes TSTORE e TLOAD. Ele persiste em todas as chamadas internas durante a mesma transação, mas é apagado no final da transação. Diferentemente da memória, o armazenamento transitório é modelado como parte do estado da EVM, e não do quadro de execução, e ainda assim não é confirmado no estado global. O armazenamento transitório permite o compartilhamento temporário de estado com uso eficiente de gás entre as chamadas internas durante uma transação.
Armazenamento
Os contratos contêm uma trie de armazenamento Merkle Patricia (como um array de palavras endereçável por palavra), associada à conta em questão e parte do estado global. Este armazenamento persistente difere do armazenamento transitório, que está disponível apenas durante uma única transação e não faz parte da trie de armazenamento persistente da conta.
OpCodes
O bytecode de contrato inteligente compilado é executado como uma série de opcodes da EVM, que realizam operações de pilha padrão como XOR, AND, ADD, SUB, etc. A EVM também implementa várias operações de pilha específicas da blockchain, como ADDRESS, BALANCE, BLOCKHASH, etc. O conjunto de opcodes também inclui TSTORE e TLOAD, que fornecem acesso ao armazenamento transitório.
Diagramas adaptados de Ethereum EVM illustrated (opens in a new tab)
Implementações da EVM
Todas as implementações da EVM devem aderir à especificação descrita no Ethereum Yellowpaper.
Ao longo dos dez anos de história do Ethereum, a EVM passou por diversas revisões, e existem várias implementações da EVM em diversas linguagens de programação.
Os clientes de execução do Ethereum incluem uma implementação da EVM. Além disso, existem várias implementações independentes, incluindo:
- Py-EVM (opens in a new tab) - Python
- evmone (opens in a new tab) - C++
- ethereumjs-vm (opens in a new tab) - JavaScript
- revm (opens in a new tab) - Rust
Leitura adicional
- Yellowpaper do Ethereum (opens in a new tab)
- Jellopaper, também conhecido como KEVM: Semântica da EVM em K (opens in a new tab)
- The Beigepaper (opens in a new tab)
- Opcodes da Máquina Virtual do Ethereum (opens in a new tab)
- Referência interativa dos opcodes da Máquina Virtual Ethereum (opens in a new tab)
- Uma breve introdução na documentação do Solidity (opens in a new tab)
- Mastering Ethereum – A Máquina Virtual do Ethereum (opens in a new tab)