---
title: "O que é a Ethereum virtual machine (EVM)?"
description: "Um panorama completo sobre a EVM"
---

## **A EVM - uma máquina com muitos nomes**

The World's Computer. The Unstoppable Machine. The Heart of Ethereum. A Ethereum Virtual Machine \(EVM\) tem muitos nomes, o que evidencia sua importância para a Ethereum Network. É o recurso central que faz dela não apenas um 'distributed ledger' como o Bitcoin, mas uma 'distributed state machine'.

A EVM permite que desenvolvedores criem smart contracts em uma linguagem de programação chamada [Solidity](https://www.alchemy.com/overviews/solidity). Uma aplicação popular de smart contracts é gerenciar a geração e a troca de tokens. Muitas aplicações e protocolos usam tokens para recompensar usuários por ações importantes para seu objetivo. Sem a EVM, nada disso seria possível.

Para entender melhor o poder da EVM, vamos ver alguns de seus componentes centrais:

## **Virtual machines - a plataforma da EVM**

Redes descentralizadas são difíceis de derrubar. Se você quiser fazer isso, precisará remover todos os nós atualmente online e encontrar uma forma de impedir que surjam mais.

<ImageBlock
  src="https://media.alchemy.com/1703769963-distributed-networks.png"
  alt="Diagrama comparando topologias de rede centralizadas, descentralizadas e distribuídas"
  width={1445}
  height={420}
  caption="Redes distribuídas"
/>

Uma boa forma de escalar uma rede descentralizada é usar virtual machines \(VM\). Isso ocorre porque VMs podem ser executadas em diferentes sistemas operacionais e hardware, e a partir de qualquer localização geográfica. VMs funcionam como uma camada de abstração entre o código e a máquina que executa o código.

VMs funcionam de forma parecida com uma máquina física, com storage, memória e CPU, mas operam puramente como código. Em teoria, qualquer pessoa pode rodar uma VM, o que a torna uma plataforma altamente portátil para uma rede descentralizada. A EVM usa uma rede descentralizada de nós para executar smart contracts.

## **Smart contracts - o app da EVM**

Smart contracts são linhas de código autoexecutáveis que permitem que partes transacionem entre si sem a necessidade de nenhuma autoridade central. Dentro de um smart contract há uma lista de operações definidas que são executadas quando certas condições, on-chain ou off-chain, são atendidas. Algumas operações podem ser transferir fundos para um determinado endereço, comunicar-se com outro contract ou até criar um novo contract. Em vez de um terceiro executar a transação, qualquer remetente pode enviar fundos para o endereço do smart contract para acionar essas operações.

<ImageBlock
  src="https://media.alchemy.com/1703770046-how-smart-contract-works.png"
  alt="Diagrama de como um contrato inteligente se autoexecuta quando suas condições são atendidas"
  width={820}
  height={521}
  caption="Como funciona um contrato inteligente"
/>

O que torna os smart contracts um método seguro de transacionar é o fato de o código não poder ser alterado ou modificado. Sempre há um resultado esperado do smart contract, que é a confiança embutida no código. Toda vez que um contract é executado, diz-se que ele altera o state da EVM.

A EVM pode ser descrita como uma "state machine" porque é responsável por computar as mudanças de state resultantes da execução do código dos smart contracts. Isso significa que ela mantém os saldos de ether das contas, o armazenamento de dados dos smart contracts e as transações tanto no nível de conta quanto de contract à medida que são concluídas. Todas essas ações são o que altera o 'state' da rede.

<ImageBlock
  src="https://media.alchemy.com/1703770183-evm-transactions.png"
  alt="Diagrama de transações EVM alterando o estado da rede Ethereum"
  width={1080}
  height={607}
  caption="Transações EVM"
/>

Smart contracts são escritos principalmente na linguagem Solidity. A EVM não consegue executar Solidity diretamente, então o código precisa primeiro ser compilado em instruções de máquina de nível mais baixo chamadas opcodes.

## **Opcodes - a linguagem da EVM**

A EVM é amplamente descrita como [Turing Complete](https://en.wikipedia.org/wiki/Turing_completeness), ou, mais precisamente, quasi-Turing Complete. Isso significa que a EVM pode, em teoria, resolver qualquer problema computacional. Isso é feito executando instruções de nível de máquina chamadas EVM opcodes.

Os EVM opcodes ajudam a EVM a concluir as tarefas específicas de um smart contract ou transação. Atualmente, há cerca de 150 opcodes que a EVM pode executar. Eles cobrem uma variedade de operações, incluindo: aritmética, parada, logging, duplicação, push, memória, comparação e troca. Além disso, servem para recuperar informações de block e de ambiente. Você pode encontrar uma lista de opcodes [aqui](https://github.com/wolflo/evm-opcodes/blob/main/gas.md).

<ImageBlock
  src="https://media.alchemy.com/1703770312-evm-opcodes.jpeg"
  alt="Diagrama dos opcodes EVM, as instruções em nível de máquina executadas pela EVM"
  width={1600}
  height={916}
  caption="Opcodes EVM"
/>

Por eficiência, a EVM converte seu bytecode em opcode, onde cada opcode recebe um ou mais bytes no bytecode. Cada operação de opcode requer uma quantidade específica de gas para ser executada pela EVM. Você provavelmente já ouviu falar sobre gas, mas o que é isso?

## **Gas - o combustível da EVM**

Gas é provavelmente o tópico mais falado e menos compreendido sobre a EVM. No momento em que este texto foi escrito, os preços de gas podem ser extremamente altos, mas há esforços para melhorar isso. Preços altos de gas podem ser uma grande barreira para a adoção mainstream da Ethereum. Mas por que precisamos pagar preços de gas e o que faz o preço ser tão alto?

O propósito do gas é atuar como uma taxa pela computação das operações de um smart contract feita por cada nó da Ethereum. É necessário haver uma taxa para a computação a fim de impedir que um atacante paralise a rede implantando uma grande quantidade de contracts complexos que exigem longos tempos de computação. Esse tipo de ataque DDoS é desencorajado porque seria muito caro de executar.

Cada opcode tem um [gas cost](https://github.com/wolflo/evm-opcodes/blob/main/gas.md) atribuído a ele, sendo que os opcodes mais complexos têm custos mais altos. Por exemplo, uma adição simples custa 3 gas e toda transação começa com um custo de 21.000 gas. A maior parte das reclamações não é sobre o gas em si, mas sobre o gas limit necessário para concluir uma transação com sucesso.

Gas limit é a quantidade máxima de gas que o remetente está disposto a pagar para que a transação seja executada e validada. Para obter a gas fee, você pode multiplicar o custo total de gas \(os valores base das operações\) pelo preço do gas \(o custo de completar essas operações\). De forma parecida com quando você abastece seu carro com gasolina de verdade, há o custo do combustível em si e a quantidade de combustível necessária para chegar ao seu destino.

Gas Fee = Total Gas Cost x Gas Price

A gas fee serve para compensar o validator responsável por garantir que as informações na transação sejam válidas, que não haja erros/exceções por parte da EVM e que o remetente tenha os fundos necessários para pagar pela computação. Quando um remetente define um gas limit alto, isso indica que a operação é complexa, o que incentiva os validators a pegarem as transações em troca de uma recompensa maior.

<ImageBlock
  src="https://media.alchemy.com/1703770395-evm-gas.png"
  alt="Diagrama de como as taxas de gas compensam os validadores pela computação da EVM"
  width={1080}
  height={607}
  caption="Gas da EVM"
/>

Quando a atividade da rede está alta, os validators podem simplesmente escolher, dentre o pool de transações pendentes, aquelas com gas limits mais altos. As gas fees são, portanto, influenciadas pela oferta e demanda. O bom é que qualquer gas não consumido é reembolsado ao remetente.

Se o gas limit pré-pago for atingido, o validator ainda é compensado pelo seu trabalho, mas a transação não é concluída. Dessa forma, a EVM é quasi-Turing Complete, já que as computações que ela pode concluir são limitadas ao valor que um remetente está disposto a pagar para que sejam concluídas.

## **Casos de uso da EVM**

Agora que cobrimos cada um dos elementos da EVM, vamos ver como essas partes se combinam para ajudar a viabilizar os projetos na Ethereum:

### **Tokens ERC-20**

Tokens [ERC-20](https://www.alchemy.com/overviews/erc20-solidity) são tokens que podem ser transferidos entre endereços, têm uma quantidade fixa e seu valor é o mesmo em toda a rede. Smart contracts que seguem uma estrutura de dados definida na EVM são usados para criar tokens ERC-20. Essa estrutura de dados controla a nomeação, distribuição, quantidade de supply e monitoramento do token.

Diversas aplicações e projetos usam tokens ERC-20 para incentivar usuários. [Livepeer](https://www.alchemy.com/dapps/livepeer), uma rede descentralizada de streaming de vídeo, usa o token Livepeer \(LPT\) para incentivar quem fornece recursos à rede. [Nexus Mutual](https://www.alchemy.com/dapps/nexus-mutual), um seguro descentralizado baseado em smart contracts, usa o token NXM para permitir que usuários comprem cobertura e façam claims.

### Exchanges descentralizadas

Uma exchange descentralizada implanta smart contracts para permitir que usuários troquem tokens ERC-20. Esses smart contracts são chamados de Automated Market Makers \(AMM\) porque permitem que usuários contribuam para liquidity pools de determinados tokens sem que nenhum terceiro os controle. Algumas das exchanges populares, como [Uniswap](https://www.alchemy.com/dapps/uniswap) e [SushiSwap](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/), são aplicações desse modelo de AMM.

<ImageBlock
  src="https://media.alchemy.com/1703770478-automated-market-maker.png"
  alt="Diagrama de um criador de mercado automatizado combinando trocas de tokens por meio de pools de liquidez"
  width={1236}
  height={1128}
  caption="Criador de mercado automatizado"
/>

### **Tokens ERC-721**

O outro padrão de token amplamente popular é o primo não fungível do ERC-20, o [ERC-721](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/). Esses smart contracts são usados para mintar NFTs \(Non-fungible tokens\), que são tokens com valor único em toda a blockchain. Criar obras de arte únicas é o maior caso de uso desse tipo de token. Outros projetos da área de games, como [Axie Infinity](https://www.alchemy.com/dapps/axie-infinity) e God Unchained, usam esses tokens para colecionáveis dentro do jogo.

### A EVM e além

A EVM faz da Ethereum uma plataforma, e não apenas uma blockchain. No entanto, a EVM não é um sistema perfeito. Há muitos desafios relacionados à velocidade de transação e ao throughput da rede. Essa é uma área de foco para a comunidade de desenvolvimento e para o [roadmap da Ethereum](https://ethereum.org/en/roadmap/). Se a Ethereum for cumprir suas promessas de revolucionar a forma como transacionamos entre nós, isso vai depender de melhorias na EVM.
