Simple Science

Ciência de ponta explicada de forma simples

# Informática# Lógica na Informática

A Máquina Virtual do Ethereum Explicada

Um olhar sobre a Máquina Virtual do Ethereum e seu impacto nos contratos inteligentes.

― 8 min ler


Entendendo o EVMEntendendo o EVMEthereum.Uma imersão profunda na Máquina Virtual
Índice

Ethereum é uma plataforma descentralizada que permite que desenvolvedores construam e rodem aplicativos sem precisar de uma autoridade central. No coração do Ethereum tá um sistema especial chamado Ethereum Virtual Machine (EVM). Essa máquina é responsável por executar Transações na rede Ethereum. Transações não são só trocas simples de moeda; elas também podem envolver uma lógica de programação complexa conhecida como Contratos Inteligentes.

O que é a Ethereum Virtual Machine?

A Ethereum Virtual Machine é uma parte crucial da rede Ethereum. Ela atua como um computador global que roda todos os contratos inteligentes. Contratos inteligentes são contratos autoexecutáveis com os termos do acordo escritos diretamente em código. Eles aplicam e executam automaticamente os termos quando certas condições são atendidas, sem precisar de um intermediário.

A EVM lê e executa esses contratos inteligentes, garantindo que todos os participantes da rede Ethereum concordem com o estado atual do sistema. Isso é feito através de um processo de consenso, onde todos os participantes da rede confirmam e validam as transações.

Como Funcionam as Transações no Ethereum

Quando uma transação é iniciada no Ethereum, ela consiste em duas etapas principais:

  1. Acordo sobre a Sequência de Transações: Todos os participantes da rede concordam sobre a ordem em que as transações são processadas. Essa sequência é essencial para manter a integridade da blockchain.

  2. Computação da Transição de Estado: Uma vez que a sequência de transações é acordada, a EVM computa as mudanças de estado correspondentes. O estado aqui se refere ao status atual de todas as contas, saldos e contratos inteligentes na rede.

Para alcançar isso, a EVM executa o código escrito nos contratos inteligentes. Esses contratos são, essencialmente, programas que ditam como os fundos podem ser transferidos, como os dados podem ser manipulados e outras lógicas de negócios.

A Necessidade de uma Especificação Formal

Embora a EVM seja poderosa, sua especificação original, conhecida como Yellow Paper, tem algumas limitações. É difícil de ler e falta uma linguagem formal. Isso torna complicado para os desenvolvedores interpretarem consistentemente as regras e o comportamento da EVM.

Uma especificação formal é essencial para um desenvolvimento confiável. Ela fornece uma definição precisa de como a EVM opera, o que pode ajudar a evitar mal-entendidos que podem levar a erros e vulnerabilidades em contratos inteligentes.

Nossa Contribuição

Para resolver essas questões, uma nova especificação formal da EVM foi proposta. Essa especificação é escrita em uma linguagem de programação amigável à verificação. Ela visa oferecer vários benefícios:

  • Legibilidade: A nova especificação é projetada para ser mais fácil de ler e entender, tornando-a mais acessível para os desenvolvedores.

  • Verificação Formal: Usando uma linguagem amigável à verificação, permite que os desenvolvedores escrevam provas sobre a correção de seus contratos inteligentes. Isso significa que eles podem ter certeza de que os contratos vão se comportar como esperado.

  • Usabilidade: A especificação não é apenas formal, mas também executável, o que significa que os desenvolvedores podem rodar o código para simular como a EVM vai se comportar.

Visão Geral das Instruções da EVM

A EVM opera usando um conjunto de instruções, que são como comandos que ditam quais ações realizar. No total, são 142 instruções, cobrindo várias operações, como:

  • Operações Aritméticas: Instruções como ADD e MUL para cálculos matemáticos.
  • Operações de Comparação: Instruções como ISZERO e NOT para comparar valores.
  • Operações Criptográficas: Instruções como SHA3 para hashing de dados.
  • Fluxo de Controle: Instruções como JUMP e CALL para navegar pelo programa.

Cada instrução vem com requisitos específicos e só pode ser executada em estados particulares. Por exemplo, operações aritméticas podem exigir que um certo número de itens esteja presente na pilha, que é uma seção de memória usada para armazenamento temporário durante a execução.

Estado e Execução na EVM

Um estado de execução da EVM consiste em vários componentes:

  • Contador de Programa (PC): Indica a posição atual no Bytecode que está sendo executado.
  • Pilha: Uma área de armazenamento para valores que estão sendo processados.
  • Memória: Uma área de armazenamento volátil usada durante a execução.
  • Código: O bytecode real que representa o contrato inteligente ou a transação.

Quando uma transação é executada, ela resulta em um estado de sucesso ou um estado de falha. Um estado de falha acontece quando a execução não pode continuar devido a um erro, como recursos insuficientes ou operações inválidas.

Bytecode e Sua Verificação

Contratos inteligentes são compilados em bytecode antes de serem executados pela EVM. Esse bytecode é o que a EVM entende e processa. No entanto, verificar a correção desse bytecode é crucial para garantir que ele se comporte como esperado.

Uma linguagem amigável à verificação pode instrumentar o bytecode com checagens e condições adicionais, tornando possível provar várias propriedades sobre o contrato. Por exemplo, podemos verificar que certos resultados acontecerão sob condições específicas, como garantir que uma operação aritmética não resulte em overflow.

Exemplo de um Contrato Inteligente Simples

Vamos considerar um contrato inteligente simples que soma dois números. Aqui está como o processo de verificação funciona:

  1. Inicialização: A EVM é inicializada com um pouco de Gás e o bytecode para executar.

  2. Passos de Execução: A EVM executa o bytecode passo a passo. Por exemplo, ela coloca dois números na pilha, os soma e então armazena o resultado.

  3. Aserções: Em vários pontos durante a execução, são feitas asserções para garantir que condições esperadas sejam verdadeiras. Por exemplo, verifica-se se o resultado da adição é de fato a soma dos dois números de entrada.

Através desse processo, podemos garantir que o contrato inteligente se comporte como planejado e atenda suas propriedades.

Lidando com Overflow e Reversões

Um aspecto crucial dos contratos inteligentes é lidar com situações onde um overflow pode ocorrer. Um overflow acontece quando um cálculo produz um resultado que ultrapassa o limite máximo do tipo de dado sendo usado.

Para evitar tais problemas, a EVM pode ser projetada para reverter a transação, ou seja, ela vai cancelar a operação se um overflow for detectado. Isso garante que o contrato não entre em um estado inválido, protegendo a integridade do sistema.

Chamadas de Contratos e Interações Externas

Contratos no Ethereum podem chamar outros contratos, o que adiciona outra camada de complexidade à sua execução. Essas chamadas podem potencialmente executar um número desconhecido de instruções, dependendo do que o contrato chamado faz.

Para lidar com chamadas de contrato de forma segura, a EVM pode usar um método semelhante a continuações. Em vez de executar contratos chamados recursivamente, ela pode empacotar as informações necessárias e devolver o controle a um driver externo. Esse design permite que o sistema acompanhe o fluxo geral de execução sem sobrecarregar o verificador com chamadas recursivas complexas.

O Papel do Gás nas Transações

Gás é outro conceito essencial no Ethereum. Cada operação realizada pela EVM consome gás, que serve como uma forma de alocação de recursos. Os usuários devem pagar taxas de gás para executar transações, o que cria um incentivo econômico para escrever contratos inteligentes eficientes.

O processo de verificação também pode incorporar cálculos de gás, garantindo que as transações não fiquem sem gás durante a execução. Se um contrato exceder seu limite de gás, ele será revertido, mantendo a estabilidade do sistema.

Conclusão

A Ethereum Virtual Machine é uma ferramenta poderosa que permite que contratos inteligentes executem autonomamente em uma rede descentralizada. No entanto, para garantir confiabilidade e segurança, uma especificação formal é necessária. Usando linguagens amigáveis à verificação, podemos fornecer uma descrição clara, executável e verificável da EVM.

Esse avanço abre novas possibilidades para desenvolver contratos inteligentes mais seguros e eficientes. Através da verificação formal, os desenvolvedores podem criar contratos que funcionam como pretendido, promovendo a confiança no ecossistema Ethereum.

Artigos semelhantes