Máquina Virtual Ethereum (EVM)

Máquina Virtual Ethereum (EVM)

  • A Ethereum Virtual Machine (EVM) é o ambiente operacional para contratos inteligentes
  • Cada nó participante da rede executa o EVM como parte do protocolo de validação de bloco . Eles verificam as transações listadas no bloco que está sendo validado e executam o código acionado por transações no EVM
  • EVM não é apenas sandbox, mas também completamente isolado, o que significa que o código em execução no EVM não pode acessar a rede, sistema de arquivos e outros processos, e até mesmo o acesso entre contratos inteligentes é restrito
  • Os contratos existem no blockchain no formato bytecode (EVM bytecode)
  • O contrato geralmente é escrito em uma linguagem de alto nível (solidez), compilado em bytecode pelo compilador EVM e, finalmente, implantado na rede blockchain por meio do cliente

EVM e contas

  • Existem dois tipos de contas no Ethereum: contas externas e contas de contrato , que compartilham o mesmo espaço de endereço no EVM
  • Quer a conta armazene ou não o código, esses dois tipos de contas são tratados exatamente da mesma forma para o EVM
  • Cada conta possui um armazenamento persistente na forma de pares chave-valor no EVM . Entre eles, o comprimento da chave e do valor é de 256 bits, o que é chamado de espaço de armazenamento (armazenamento)

 EVM e transações

  • Uma transação pode ser vista como uma mensagem enviada de uma conta para outra, pode conter dados binários ( payload ) e ether
  • Se a conta de destino contiver code , esse código será executado no EVM e o payload será usado como parâmetro de entrada, que é  a chamada do contrato
  • Se a conta de destino for uma conta zero (o endereço da conta é 0), esta transação criará um novo contrato , e a carga útil da transação usada para criar o contrato será convertida em bytecode EVM e executada, e a saída da execução será permanentemente armazenado como o código do contrato

EVM e gás

  • Quando um contrato é invocado por uma transação, a instrução será executada em todos os nós de toda a rede: isso requer o consumo de custos de cálculo; a execução de cada instrução tem um consumo específico e o gás usa essa quantificação para representar esse consumo de custo
  • Uma vez criada, cada transação é pré-paga com uma certa quantidade de gás, o objetivo é limitar a quantidade de trabalho necessária para executar a transação e pagar a taxa de transação pela transação
  • Quando o EVM realizar uma transação, o gás será consumido gradativamente de acordo com regras específicas
  • O preço do gás é um valor definido pelo remetente da transação como o preço unitário da taxa de transação pré-paga do remetente. Caso haja sobra após a efetivação da transação, o gás será devolvido pela rota original
  • Não importa onde seja executado, assim que o gás acabar (como cair para um valor negativo), uma exceção de falta de gás será acionada. Todas as modificações de estado feitas pelo quadro de chamada atual ( quadro de chamada ) serão revertidas

armazenamento de dados EVM

Armazenar

  • Cada conta possui um espaço de armazenamento persistente, chamado storage, que é uma área de armazenamento de chave-valor que mapeia palavras de 256 bits para palavras de 256 bits, que podem ser entendidas como um banco de dados de contratos
  • Armazenado permanentemente no blockchain, uma vez que as variáveis ​​de estado do contrato são salvas permanentemente, a sobrecarga de gás para leitura e gravação também é a maior

Memória

  • Para cada chamada de mensagem, o contrato obterá temporariamente um espaço de memória limpo
  • O ciclo de vida ocorre apenas durante a execução de todo o método e é reciclado após a chamada da função. Como apenas variáveis ​​temporárias são salvas, a sobrecarga de gás para leitura e gravação é relativamente pequena

Pilha

  • O EVM não é baseado em registro, mas sim em pilha, portanto todos os cálculos são realizados em uma área chamada de pilha (stack)
  • Armazena algumas variáveis ​​de tipo de valor local, quase liberando memória, mas há um limite no número

conjunto de instruções EVM

  • Todas as instruções operam no tipo de dados básico de "palavra de 256 bits (palavra)"
  • Possui operações comuns de aritmética, bit, lógica e comparação, e também pode executar saltos condicionais e incondicionais
  • Os contratos podem acessar propriedades relevantes do bloco atual, como a altura do bloco e o carimbo de data/hora

Chamadas de mensagem (Chamadas de mensagem)

  •  Os contratos podem chamar outros contratos ou enviar ether para contas sem contrato chamando
  • Um contrato pode decidir quanto do gás restante deve enviar e manter em suas chamadas de mensagens internas
  • Se ocorrer uma exceção de falta de gás (ou qualquer outra exceção) em uma chamada de mensagem interna, isso será indicado por um valor de erro empurrado para a pilha; neste ponto, apenas o gás enviado com a chamada de mensagem interna será consumido

 

 Delegar chamada (Delegatecall)

  •  Um tipo especial de chamada de mensagem
  • O código no endereço de destino será executado no contexto do contrato de chamada, e msg.sender e msg.value permanecerão inalterados
  • A "biblioteca" pode ser realizada desta forma: a biblioteca de código reutilizável pode ser colocada no armazenamento de um contrato e o código correspondente pode ser introduzido através da chamada do delegado

 

 Criação de contrato e autodestruição

  • Ao chamar create calls com uma mensagem especial , os contratos podem criar outros contratos (em vez de simplesmente chamar zero endereços)
  • A única maneira de o código do contrato ser removido do blockchain é o contrato realizar uma operação de autodestruição no endereço do contrato  o ether restante na conta do contrato é enviado para o destino especificado e, em seguida, seu armazenamento e código são removido do estado

Supongo que te gusta

Origin blog.csdn.net/m0_46262108/article/details/123310598
Recomendado
Clasificación