WEB3DEV

Cover image for EVM: Ethereum Virtual Machine — Tudo o que você precisa saber
Diogo Jorge
Diogo Jorge

Posted on

EVM: Ethereum Virtual Machine — Tudo o que você precisa saber

Image description
Máquina Virtual Blockchain conectada com a vida diária do ser humano

  • EVM (Máquina Virtual Ethereum): um computador descentralizado global é a parte da Ethereum que lida com a implantação e execução de contratos inteligentes. Não envolve simples transferência de moeda de usuário para usuário, mas tudo que envolve uma atualização de estado computada pela EVM.
  • O trabalho da EVM é atualizar o estado da Ethereum computando transições de estado válidas como resultado da execução do código de contrato inteligente, conforme definido pelo protocolo da Ethereum.
  • A EVM é uma máquina de estado quase-Turing-completa; “quase” porque todos os processos de execução são limitados a um número finito de etapas computacionais pela quantidade de gás disponível.
  • A EVM possui uma arquitetura baseada em pilha, armazenando todos os valores na memória com tamanho de palavra de 256 bits e possui componentes de programa, memória e armazenamento.
  • O conjunto de instruções da EVM oferece: operações aritméticas e lógicas, acesso à pilha, memória e armazenamento, operação do fluxo de controle e operadores de registro e chamada.
  • A EVM tem acesso às informações da conta: endereço, saldo, número do bloco e preço atual do gás
  • Os códigos operacionais disponíveis são:

Image description

  • Operações Aritméticas

Image description
Operações aritméticas da máquina virtual Ethereum

  • Operações de Pilha

Image description

  • Operações de Fluxo de Processo

Image description

  • Operações do Sistema

Image description

  • Operações Lógicas

Image description

  • Operações de Ambiente

Image description

  • Operações de Bloco

Image description

  • cada endereço Ethereum representa uma conta que contém um saldo de ether (armazenado como o número de wei de propriedade da conta)
  • um nonce (representando o número de transações enviadas com sucesso desta conta, se for uma Conta de Propriedade Externa (EOA), ou o número de contratos criados por ela, se for uma conta de contrato)
  • o armazenamento da conta (que é um armazenamento de dados permanente, usado apenas por contratos inteligentes) e
  • o código do programa da conta (novamente, somente se a conta for uma conta de contrato inteligente). Uma EOA nunca terá código e o armazenamento estará vazio.
  • A EVM rodando em uma cópia isolada do sistema global da Ethereum, com esta versão isolada sendo descartada completamente se a execução não puder ser concluída como OOG: Out of Gas (Sem Gás).

Bytecode

Para criar um novo contrato, é necessária uma transação especial que tenha seu campo “to” (para) definido como o endereço especial 0x0 e seu campo “data” (dados) definido como o endereço do código de iniciação do contrato. Os contratos vivem na blockchain em um formato binário específico da Ethereum (bytecode EVM). No entanto, os contratos são normalmente escritos em alguma linguagem de alto nível, como Solidity, e depois compilados em bytecode para serem carregados na blockchain.

Programas disponíveis para Desmontar o Bytecode:

Descompilador para bytecode de EVM em contratos de sintaxe Solidity legíveis — para permitir a análise estática e dinâmica de contratos compilados, mas também a descoberta de vulnerabilidades

Quando você envia uma transação para um contrato inteligente compatível com ABI (que você pode assumir que todos os contratos são), a transação primeiro interage com o despachante (dispatcher) do contrato inteligente. O despachante lê o campo de dados da transação e envia a parte relevante para a função apropriada.

Completude de Turing:

  • um sistema ou linguagem de programação é Turing completo se ele pode executar qualquer programa
  • Devemos realmente executar o programa e esperar que a execução termine para saber se demorará uma eternidade ou não para executar; Este é o chamado problema de parada (halting problem)
  • A Ethereum age como uma máquina de thread único, sem nenhum agendador, então se ela ficar presa em um loop infinito (problema de parada), isso significaria que ele se tornaria inutilizável, a solução é o GÁS

GÁS

  • Gás é a unidade da Ethereum para medir os recursos computacionais e de armazenamento necessários para executar ações na blockchain Ethereum
  • A Ethereum deve contabilizar cada etapa computacional realizada por transações e execução de código de contrato inteligente.
  • Cada operação realizada por uma transação ou contrato custa uma quantidade fixa de gás
  • Quando uma EVM é necessária para concluir uma transação, ela recebe inicialmente um suprimento de gás igual ao valor especificado pelo limite de gás na transação
  • Antes de cada operação, a EVM verifica se há gás suficiente para pagar a execução da operação. Se não houver gás suficiente, a execução é interrompida e a transação é revertida.
  • Se a execução for bem-sucedida, o gás é pago ao minerador como taxa de transação em ether. taxa do minerador = custo do gás * preço do gás

Nota do tradutor: Desde o “The Merge” da Ethereum (15/09/22), as transações da rede não são mais mineradas por mineradores (Mecanismo de Consenso de Prova de Trabalho (PoW)), e sim validadas por validadores (Mecanismo de Consenso de Prova de Participação (PoS)).

  • O gás restante é devolvido ao remetente em ether gás restante = limite de gás - custo do gás | ether devolvido = gás restante * preço do gás
  • Se a transação ficar sem gás durante a execução, a operação é encerrada, aumentando a exceção de gás, e a transação e todas as alterações no estado são revertidas, mas o remetente será cobrado uma taxa de transação pelo trabalho executado.
  • Cada operação custa Gás com base em seu uso computacional, como a função SHA3 custa 10 vezes (30 Gás) mais que a operação ADD (3 Gás), a memória EVM e o armazenamento de dados no armazenamento na cadeia do contrato também custam Gás.
  • Ao construir um novo bloco, os mineradores da rede Ethereum podem escolher entre as transações pendentes, selecionando aquelas que se oferecem para pagar um preço de gás mais alto, o que resulta em transações com confirmação mais rápida.
  • Embora o gás tenha um preço, ele não pode ser “possuído” nem “gasto”. O gás existe apenas dentro da EVM, como uma contagem de quanto trabalho computacional está sendo executado. O remetente é cobrado uma taxa de transação em ether, que é então convertida em gás para contabilidade EVM e depois de volta para ether como uma taxa de transação paga aos mineradores.
  • Custos de gás negativos: exclusão de variáveis ​​e contas de armazenamento usadas, reembolsando parte do gás; (i) Exclusão de um contrato (SELFDESTRUCT) (ii) Alteração do endereço de armazenamento de valor diferente de não zero para zero (SSTORE[x] = 0); o reembolso máximo para uma transação é definido como metade da quantidade total de gás usado

Limite de Gás do Bloco

  • O limite de gás do bloco é a quantidade máxima de gás que pode ser consumida por todas as transações em um bloco e restringe quantas transações podem caber em um bloco.
  • Os mineradores na rede decidem coletivamente que o limite de gás do bloco usa um programa de mineração, como o Ethminer, que se conecta a um cliente Geth ou Parity Ethereum.
  • O protocolo Ethereum possui um mecanismo embutido onde os mineradores podem votar no limite de gás para que a capacidade possa ser aumentada ou diminuída em blocos subsequentes.

“Dominando Ethereum por Andreas M. Antonopoulos e Dr. Gavin Wood (O'Reilly). Copyright 2019 The Ethereum Book LLC e Gavin Wood, 978–1–491–97194–9.”

Siga-me no twitter:https://twitter.com/BgxDoc

https://web3doctor.medium.com/learn-web3-smart-contract-hacking-in-2023-step-by-step-guide-dbc4f7a16902

Este artigo foi escrito por Dr. Gupta e traduzido por Diogo Jorge. O artigo original pode ser encontrado aqui.

Top comments (0)