Máquina Virtual Ethereum (EVM)
A Máquina Virtual Ethereum (EVM) é um ambiente virtual descentralizado que executa código de forma consistente e segura em todos os nós da Ethereum. Os nós executam a EVM para executar contratos inteligentes, usando "gás" para medir o esforço computacional necessário para as operações, garantindo a alocação eficiente de recursos e a segurança da rede.
Pré-requisitos
Alguma familiaridade básica com a terminologia comum em ciência da computação, como bytes (opens in a new tab), memória (opens in a new tab) e uma pilha (stack) (opens in a new tab) é necessária para entender a EVM. Também seria útil estar confortável 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' é frequentemente usada para descrever blockchains como o Bitcoin, que permitem 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 governam o que alguém pode e não pode fazer para modificar o livro-razão. Por exemplo, um endereço Bitcoin não pode gastar mais Bitcoin do que recebeu anteriormente. Essas regras sustentam todas as transações no Bitcoin e em muitas outras blockchains.
Embora a Ethereum tenha sua própria criptomoeda nativa (ether) que segue quase exatamente as mesmas regras intuitivas, ela também permite uma função muito mais poderosa: contratos inteligentes. Para esse recurso mais complexo, é necessária uma analogia mais sofisticada. Em vez de um livro-razão distribuído, a Ethereum é uma máquina de estado (opens in a new tab) distribuída. O estado da Ethereum é uma grande estrutura de dados que contém não apenas todas as contas e saldos, mas um estado de máquina, que pode mudar de bloco para bloco de acordo com um conjunto de regras predefinidas, e que pode executar código de máquina arbitrário. As regras específicas de mudança de estado de bloco para 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 da Ethereum
A EVM se comporta como uma função matemática: dada uma entrada, ela produz uma saída determinística. Portanto, é bastante útil descrever a Ethereum de forma mais formal como tendo uma função de transição de estado:
Y(S, T)= S'
Dado um estado antigo válido (S) e um novo conjunto de transações válidas (T), a função de transição de estado da Ethereum Y(S, T) produz um novo estado de saída válido S'
Estado
No contexto da Ethereum, o estado é uma enorme estrutura de dados chamada de trie de Merkle Patricia modificada, que mantém todas as contas vinculadas por hashes e redutíveis a um único hash raiz armazenado na blockchain.
Transações
Transações são instruções assinadas criptograficamente a partir de contas. Existem dois tipos de transações: aquelas que resultam em chamadas de mensagem e aquelas 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 chamada de mensagem para esse contrato, ele executa seu bytecode.
Instruções da EVM
A EVM é executada como uma máquina de pilha (stack machine) (opens in a new tab) com uma profundidade de 1024 itens. Cada item é uma palavra de 256 bits, que foi escolhida pela facilidade de uso com criptografia de 256 bits (como hashes Keccak-256 ou assinaturas secp256k1).
Durante a execução, a EVM mantém uma memória transitória (como uma matriz de bytes endereçada por palavra), que não persiste entre as transações.
Armazenamento transitório
O armazenamento transitório é um armazenamento de chave-valor por transação acessado por meio dos códigos de operação TSTORE e TLOAD. Ele persiste em todas as chamadas internas durante a mesma transação, mas é limpo no final da transação. Ao contrário da memória, o armazenamento transitório é modelado como parte do estado da EVM em vez do quadro de execução, mas não é confirmado no estado global. O armazenamento transitório permite o compartilhamento de estado temporário com eficiência de gás em chamadas internas durante uma transação.
Armazenamento
Os contratos contêm uma trie de armazenamento Merkle Patricia (como uma matriz de palavras endereçável por palavra), associada à conta em questão e parte do estado global. Esse armazenamento persistente difere do armazenamento transitório, que está disponível apenas pela duração de uma única transação e não faz parte da trie de armazenamento persistente da conta.
Códigos de operação
O bytecode compilado do contrato inteligente é executado como uma série de códigos de operação da EVM, que executam 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 de blockchain, como ADDRESS, BALANCE, BLOCKHASH, etc. O conjunto de códigos de operação 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 yellow paper da Ethereum.
Ao longo dos dez anos de história da Ethereum, a EVM passou por várias revisões e existem várias implementações da EVM em várias linguagens de programação.
Os clientes de execução da 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
- Yellow paper da Ethereum (opens in a new tab)
- Jellopaper, também conhecido como KEVM: Semântica da EVM em K (opens in a new tab)
- O Beigepaper (opens in a new tab)
- Códigos de operação da Máquina Virtual Ethereum (opens in a new tab)
- Referência interativa de códigos de operação da Máquina Virtual Ethereum (opens in a new tab)
- Uma breve introdução na documentação da Solidity (opens in a new tab)
- Mastering Ethereum - A Máquina Virtual Ethereum (opens in a new tab)
Tópicos relacionados
Tutoriais: Máquina Virtual Ethereum (EVM) / Códigos de operação na Ethereum
- Entendendo as especificações da EVM do yellow paper – Um passo a passo guiado da especificação formal da EVM do yellow paper da Ethereum.
- Engenharia reversa de um contrato – Como fazer engenharia reversa de um contrato inteligente compilado usando códigos de operação da EVM.