Pular para o conteúdo principal
Change page

Máquina virtual do Ethereum (EVM)

Última edição: , 19 de janeiro de 2024

O contexto físico da Máquina Virtual do Ethereum (EVM, na sigla em inglês) não pode ser descrito da mesma maneira que é descrita uma nuvem no céu ou uma onda no meio do oceano, se não que deve ser entendido como uma entidade singular mantida por milhares de computadores conectados operando um cliente de Ethereum.

O próprio protocolo Ethereum existe apenas com o propósito de manter a operação contínua, ininterrupta e imutável dessa máquina de estado especial. É o ambiente em que todas as contas Ethereum e contratos inteligentes vivem. Para qualquer bloco na cadeia, o Ethereum tem um estado "canônico", e a EVM é a responsável por definir as regras para registrar um novo estado válido de um bloco para o seguinte.

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 pilha(opens in a new tab) é necessária para entender a EVM. Também recomendamos se familiarizar com conceitos de criptografia/cadeia de blocos, como funções hash(opens in a new tab) e a árvore Merkle(opens in a new tab).

Do livro-razão para a 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 Ethereum tenha sua própria criptomoeda nativa (Ether), que segue quase exatamente as mesmas regras intuitivas, ele também permite dispor de uma função muito mais poderosa: os contratos inteligentes. Para este recurso mais complexo, uma analogia mais sofisticada é necessária. Em vez de um livro-razão distribuído, Ethereum é uma máquina de estado distribuída(opens in a new tab). 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, as quais podem executar código de máquina arbitrário. As regras específicas para mudar o estado de bloco em bloco são definidas pela EVM.

Um diagrama mostrando a criação da EVM Diagrama adaptado do Ethereum EVM ilustrado(opens in a new tab)

A função de transição do estado 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, é bastante útil descrever mais formalmente o Ethereum como tendo uma função de transição de estado:

1Y(S, T)= S'

Dado um antigo estado (S) e um novo conjunto de transações válidas (T), a função de transição de estado de 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 á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 do contrato resulta na criação de uma nova conta de contrato que contém 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 1.024 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 direcionado por palavra) que não persiste entre as transações.

Os contratos, no entanto, contêm uma árvore Merkle Patricia de armazenamento (como um array direcionado por palavras) associada com a conta em questão e parte do estado global.

O bytecode compilado do contrato inteligente executa como um número de opcodes de EVM, que realizam operações padrão de stake como XOR, AND, ADD, SUB etc. A EVM também implementa um número de operações de stake específicas da blockchain, como ADDRESS, BALANCE, BLOCKHASH etc.

Diagrama mostrando onde o consumo de gás é utilizado para as operações da EVM Diagrama adaptado do Ethereum EVM ilustrado(opens in a new tab)

Implementações da EVM

Todas as implementações da EVM devem aderir à especificação descrita no Ethereum Yellowpaper.

Durante o histórico de 9 anos do 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 Ethereum incluem uma implementação EVM. Além disso, existem várias implementações independentes, incluindo:

Leitura adicional

Este artigo foi útil?