EVM é uma camada de abstração entre o código e o host que serve como garantia para manter o bom funcionamento do Ethereum. Afinal, o que é EVM? Quais são os princípios e casos de uso típicos do EVM? Vamos mergulhar mais fundo nisso.
Como o blockchain mais popular atualmente, o Ethereum fornece aos usuários uma variedade de aplicativos descentralizados. É o termo mais mencionado quando as pessoas se referem a DeFi, NFTs, etc. E o EVM, como parte central do Ethereum, também atrai a atenção das pessoas. Então, qual é a relação entre EVM e Ethereum?
EVM significa máquina virtual Ethereum. Conforme definido pela Ethereum, EVM é o ambiente de tempo de execução no qual todas as contas Ethereum e contratos inteligentes residem na cadeia Ethereum.
O EVM existe como uma única entidade mantida por todos os computadores conectados executando um cliente Ethereum. É o que define as regras para calcular um novo estado válido de bloco para bloco.
Em vez de um livro-razão distribuído como o Bitcoin, o Ethereum é uma máquina de estado distribuída. A mudança de bloco para bloco representa uma atualização do estado de todas as contas e saldos no Ethereum. A atualização é calculada com base no código do contrato pelo EVM.
Figura: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM é uma máquina virtual baseada em pilha e executa todas as suas operações diretamente na pilha. Quando o contrato inteligente é compilado em bytecode, o EVM executa operações com base no bytecode, incluindo buscar variáveis da memória e adicionar à pilha, calcular as variáveis na pilha e armazenar variáveis na memória, etc.
Existem dois tipos principais de armazenamento de dados no EVM: memória e armazenamento. As variáveis em armazenamento serão armazenadas no Ethereum permanentemente após a execução do contrato, enquanto as variáveis em memória existem temporariamente enquanto o código está sendo executado no EVM.
Tome como exemplo a convocação de um contrato. Escrevemos um contrato com a Solidity, compilamos metadados por meio de um compilador e os publicamos no Ethereum. Quando precisamos atualizar o estado do contrato, precisamos chamar o método contract. No entanto, nem o sistema operacional nem o Windows podem executar contratos inteligentes diretamente. O EVM é necessário para fornecer um ambiente de execução para contratos inteligentes. As etapas específicas são as seguintes: Primeiro, o EVM encontra o código do contrato armazenado no Ethereum por meio do endereço do contrato; então, um ambiente de execução é gerado; finalmente, o conteúdo do contrato é convertido em bytecode e colocado no EVM para operação. O resultado obtido com a operação será armazenado como último estado no próximo bloco, completando assim o processo de atualização de estado.
Figura: https://cnodejs.org/topic/5aeecba802591040485bab2a
Implementações de EVM
Atualmente, todos os clientes Ethereum incluem uma implementação EVM. A Ethereum lançou o código-fonte de várias linguagens de programação, incluindo Python, C++, js, Go, etc., para implementar as funcionalidades do EVM. Ele ajuda os usuários a entender o princípio do EVM de uma maneira mais conveniente.
Py-EVM - Python: https://github.com/ethereum/py-evm
evmone - C++: https://github.com/ethereum/evmone
Ethereumjs - vm - JavaScript: https://github.com/ethereumjs/ ethereumjs-monorepo
eEVM - C++: https://github.com/microsoft/eevm
Hyperledger Burrow - Go: https://github.com/hyperledger/burrow
Contratos inteligentes são códigos executados exclusivamente no EVM. Eles não podem ser alterados depois de implantados. O Ethereum define, modifica e armazena o estado por meio de contratos inteligentes para obter vários aplicativos descentralizados. O EVM atua como um ambiente onde contratos inteligentes podem ser executados, o que é semelhante à relação entre uma rodovia e um carro.
É necessário um poder de computação significativo para executar contratos inteligentes no EVM, que consome uma certa quantidade de gás. Para melhor compreensão, pense em veículos que precisam pagar pedágio em rodovias com pedágio.
As taxas de gás ajudam a incentivar mineradores de todo o mundo a participar e fornecer poder de computação, como uma forma de tornar o Ethereum mais descentralizado. Ele também impede que os usuários enviem solicitações de operações aleatórias que podem levar ao congestionamento da Mainnet Ethereum ou protege o Ethereum de travar, evitando ataques maliciosos.
Os contratos inteligentes da Ethereum são escritos em Solidity e compilados em bytecode antes de serem executados no EVM. Bytecode contém opcodes, ou códigos de operação. O EVM possui 144 opcodes, cada um com funcionalidade específica, o que torna o EVM Turing-completo. Ele pode resolver qualquer tipo de problema de computação. Solidity e Opcodes nos permitem escrever contratos inteligentes complexos e implementar uma ampla variedade de funções no EVM, fornecendo assim aos usuários uma variedade de dApps.
Para o mesmo trecho de código, a saída é a mesma após ser executada em diferentes EVMs, pois não tem nada a ver com o ambiente de execução e o número de execuções. A certeza do EVM garante a confiabilidade do código e evita consequências inesperadas. Esse recurso ajuda a proteger os interesses dos usuários, especialmente quando eles estão fazendo grandes transações no Ethereum.
EVM é como uma caixa de proteção isolada onde o código é executado. O processo em execução não prejudicará o software/hardware do computador nem afetará o protocolo subjacente do Ethereum. O isolamento do EVM impede que hackers ataquem a máquina que executa um EVM e também protege o protocolo subjacente do Ethereum de ser adulterado. Serve como uma garantia que protege o Ethereum.
O processo de execução do código EVM pode ser interrompido. Se o usuário executar o código errado, como um loop infinito, o mecanismo de gás pode ser implantado para encerrar o processo de execução, a fim de evitar que esse código ocupe o poder de computação indefinidamente. Antes de executar o código no EVM, o limite superior de gás deve ser definido com antecedência. Quando o gás acabar, o código parará de funcionar e o estado será revertido sem nenhuma atualização na cadeia.
À medida que os usuários aumentam, o Ethereum Mainnet encontra muitos problemas, como redes congestionadas e altas taxas de gás. Limitados ao design do Ethereum, esses problemas não podem ser resolvidos radicalmente.
Nos últimos anos, existem muitas novas cadeias públicas com taxas de gás mais baixas e redes mais rápidas e cadeias de camada 2 projetadas para escalar o Ethereum. Essas cadeias são todas cadeias de contratos inteligentes, que dizem ter melhores designs subjacentes e podem ser usadas para criar uma variedade de dApps.
Essas cadeias atendem às demandas excedentes do ecossistema Ethereum e desafiam o status dominante do Ethereum. É necessário que as contrapartes Ethereum sejam compatíveis com EVM? Em relação a essa divergência, essas cadeias são divididas em duas categorias: cadeias compatíveis com EVM e cadeias não EVM.
Recentemente, as cadeias públicas da Camada 1 surgiram uma após a outra. Embora reconstruir um ecossistema on-chain que funcione em paralelo com o Ethereum possa superar as deficiências existentes do Ethereum, são necessários recursos humanos significativos para construir um ecossistema completo e desenvolver um dApp do zero. A falta de programadores qualificados impede o crescimento de novos ecossistemas de cadeias públicas. Para uma cadeia pública com um ecossistema subdesenvolvido, seria difícil atrair um usuário do Ethereum em um curto período de tempo.
Diante disso, algumas cadeias públicas são projetadas para serem compatíveis com EVM. Os DApps originalmente executados no Ethereum podem ser completamente transferidos para cadeias públicas compatíveis com EVM com apenas pequenas modificações no código-fonte. Ele pode não apenas maximizar o uso dos recursos de desenvolvimento, mas também fornecer aos usuários uma melhor experiência no processo de migração do Ethereum para uma nova cadeia.
No entanto, a compatibilidade EVM inevitavelmente trouxe alguns problemas. Confinadas às regras de EVM, muitas cadeias compatíveis com EVM encontram um problema em relação a como alcançar a inovação sem homogeneização. No entanto, as cadeias não EVM podem quebrar essas regras e desenvolver um novo conjunto de regras a partir do zero, alcançando assim a inovação fundamentalmente.
Atualmente, mais de 70% das cadeias públicas convencionais são compatíveis com EVM, como BSC, Avalanche, Fantom, Tron, Celo, etc. Não seria difícil para os desenvolvedores desenvolver dApps ou implantar aplicativos Ethereum nessas cadeias para maior desempenho e taxas de gás mais baixas, melhorando assim a experiência do usuário.
Algumas outras cadeias públicas não são EVM, mas desenvolveram suas próprias máquinas virtuais, como Sol, Terra, etc. Embora não sejam compatíveis com EVM, essas cadeias atraíram um grupo de usuários e instituições fiéis com seu design inovador e excelente desempenho na cadeia. Por exemplo, os dois jogos blockchain, Step N e Let me speak, que se tornaram populares em todo o mundo recentemente, são baseados na cadeia Sol e atraíram fãs entusiasmados de todo o mundo para participar.
Notavelmente, as cadeias compatíveis com EVM podem coexistir com cadeias não EVM. Algumas cadeias não EVM também começam a ser compatíveis com EVM. O processo de conseguir isso seria árduo, pois requer grandes esforços para modificar o código. Um exemplo disso é Sol, que lançou o Neon, que permite aos desenvolvedores criar dApps no EVM.
Figura: Compatibilidade EVM de cadeias públicas
Como uma solução de escala do Ethereum, a Camada 2 é complementar ao Ethereum em vez de seu concorrente. As cadeias da Camada 2 são todas compatíveis com EVM, com um nível de compatibilidade mais alto que o da Camada 1. Para que a Camada 2 seja compatível com EVM, temos duas soluções: compatibilidade com EVM e equivalência com EVM.
As primeiras cadeias da Camada 2 são compatíveis com EVM, o que é semelhante à compatibilidade EVM das cadeias da Camada 1. Contratos inteligentes na camada 1 do Ethereum podem ser implantados na camada 2 fazendo algumas modificações. Por exemplo, o Unipig, lançado pela Optimism, é uma reconstrução completa do código Uniswap. É considerado Uniswap na Camada 2.
Existem algumas limitações para compatibilidade com EVM. Ao desenvolver contratos inteligentes em uma cadeia compatível com EVM, algumas ferramentas e estruturas de desenvolvimento baseadas em EVM podem não estar disponíveis. Além disso, para os contratos inteligentes originalmente organizados na Camada 1, os desenvolvedores ainda precisam fazer alguns ajustes para que os contratos inteligentes possam funcionar sem problemas no blockchain compatível com EVM.
A equivalência EVM visa oferecer aos desenvolvedores exatamente a mesma experiência ao desenvolver contratos inteligentes na Camada 2 e na Camada 1 do Ethereum. Isso beneficiou muito os desenvolvedores de Layer2, melhorou ainda mais a eficiência do desenvolvimento e economizou os custos de desenvolvimento e manutenção do código com base na compatibilidade do EVM.
Atualmente, as principais soluções de Camada 2, como Artbitrum, Optimism e Metis, alcançaram a equivalência EVM. A equivalência EVM pode transferir melhor os recursos do Ethereum para a Camada 2, com o objetivo de minimizar o custo de desenvolvimento e migração causado pelo dimensionamento. Espera-se que a equivalência EVM se torne o padrão principal da Camada 2 no futuro, e muitas soluções da Camada 2 terão uma corrida feroz em torno da equivalência EVM.
EVM é o núcleo que mantém o Ethereum funcionando. Com o estabelecimento do domínio da Ethereum, as principais cadeias públicas e as cadeias de Camada 2 seguiram ou são compatíveis com o conceito de design subjacente do EVM. Portanto, o EVM definitivamente teve um impacto profundo em todo o blockchain. O próprio EVM vem com muitos problemas, dificultando a compatibilidade das novas cadeias com o EVM. Apesar disso, os desenvolvedores têm trabalhado arduamente para fazer melhorias, o que facilitou muito o surgimento de muitas outras cadeias públicas.
EVM é uma camada de abstração entre o código e o host que serve como garantia para manter o bom funcionamento do Ethereum. Afinal, o que é EVM? Quais são os princípios e casos de uso típicos do EVM? Vamos mergulhar mais fundo nisso.
Como o blockchain mais popular atualmente, o Ethereum fornece aos usuários uma variedade de aplicativos descentralizados. É o termo mais mencionado quando as pessoas se referem a DeFi, NFTs, etc. E o EVM, como parte central do Ethereum, também atrai a atenção das pessoas. Então, qual é a relação entre EVM e Ethereum?
EVM significa máquina virtual Ethereum. Conforme definido pela Ethereum, EVM é o ambiente de tempo de execução no qual todas as contas Ethereum e contratos inteligentes residem na cadeia Ethereum.
O EVM existe como uma única entidade mantida por todos os computadores conectados executando um cliente Ethereum. É o que define as regras para calcular um novo estado válido de bloco para bloco.
Em vez de um livro-razão distribuído como o Bitcoin, o Ethereum é uma máquina de estado distribuída. A mudança de bloco para bloco representa uma atualização do estado de todas as contas e saldos no Ethereum. A atualização é calculada com base no código do contrato pelo EVM.
Figura: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM é uma máquina virtual baseada em pilha e executa todas as suas operações diretamente na pilha. Quando o contrato inteligente é compilado em bytecode, o EVM executa operações com base no bytecode, incluindo buscar variáveis da memória e adicionar à pilha, calcular as variáveis na pilha e armazenar variáveis na memória, etc.
Existem dois tipos principais de armazenamento de dados no EVM: memória e armazenamento. As variáveis em armazenamento serão armazenadas no Ethereum permanentemente após a execução do contrato, enquanto as variáveis em memória existem temporariamente enquanto o código está sendo executado no EVM.
Tome como exemplo a convocação de um contrato. Escrevemos um contrato com a Solidity, compilamos metadados por meio de um compilador e os publicamos no Ethereum. Quando precisamos atualizar o estado do contrato, precisamos chamar o método contract. No entanto, nem o sistema operacional nem o Windows podem executar contratos inteligentes diretamente. O EVM é necessário para fornecer um ambiente de execução para contratos inteligentes. As etapas específicas são as seguintes: Primeiro, o EVM encontra o código do contrato armazenado no Ethereum por meio do endereço do contrato; então, um ambiente de execução é gerado; finalmente, o conteúdo do contrato é convertido em bytecode e colocado no EVM para operação. O resultado obtido com a operação será armazenado como último estado no próximo bloco, completando assim o processo de atualização de estado.
Figura: https://cnodejs.org/topic/5aeecba802591040485bab2a
Implementações de EVM
Atualmente, todos os clientes Ethereum incluem uma implementação EVM. A Ethereum lançou o código-fonte de várias linguagens de programação, incluindo Python, C++, js, Go, etc., para implementar as funcionalidades do EVM. Ele ajuda os usuários a entender o princípio do EVM de uma maneira mais conveniente.
Py-EVM - Python: https://github.com/ethereum/py-evm
evmone - C++: https://github.com/ethereum/evmone
Ethereumjs - vm - JavaScript: https://github.com/ethereumjs/ ethereumjs-monorepo
eEVM - C++: https://github.com/microsoft/eevm
Hyperledger Burrow - Go: https://github.com/hyperledger/burrow
Contratos inteligentes são códigos executados exclusivamente no EVM. Eles não podem ser alterados depois de implantados. O Ethereum define, modifica e armazena o estado por meio de contratos inteligentes para obter vários aplicativos descentralizados. O EVM atua como um ambiente onde contratos inteligentes podem ser executados, o que é semelhante à relação entre uma rodovia e um carro.
É necessário um poder de computação significativo para executar contratos inteligentes no EVM, que consome uma certa quantidade de gás. Para melhor compreensão, pense em veículos que precisam pagar pedágio em rodovias com pedágio.
As taxas de gás ajudam a incentivar mineradores de todo o mundo a participar e fornecer poder de computação, como uma forma de tornar o Ethereum mais descentralizado. Ele também impede que os usuários enviem solicitações de operações aleatórias que podem levar ao congestionamento da Mainnet Ethereum ou protege o Ethereum de travar, evitando ataques maliciosos.
Os contratos inteligentes da Ethereum são escritos em Solidity e compilados em bytecode antes de serem executados no EVM. Bytecode contém opcodes, ou códigos de operação. O EVM possui 144 opcodes, cada um com funcionalidade específica, o que torna o EVM Turing-completo. Ele pode resolver qualquer tipo de problema de computação. Solidity e Opcodes nos permitem escrever contratos inteligentes complexos e implementar uma ampla variedade de funções no EVM, fornecendo assim aos usuários uma variedade de dApps.
Para o mesmo trecho de código, a saída é a mesma após ser executada em diferentes EVMs, pois não tem nada a ver com o ambiente de execução e o número de execuções. A certeza do EVM garante a confiabilidade do código e evita consequências inesperadas. Esse recurso ajuda a proteger os interesses dos usuários, especialmente quando eles estão fazendo grandes transações no Ethereum.
EVM é como uma caixa de proteção isolada onde o código é executado. O processo em execução não prejudicará o software/hardware do computador nem afetará o protocolo subjacente do Ethereum. O isolamento do EVM impede que hackers ataquem a máquina que executa um EVM e também protege o protocolo subjacente do Ethereum de ser adulterado. Serve como uma garantia que protege o Ethereum.
O processo de execução do código EVM pode ser interrompido. Se o usuário executar o código errado, como um loop infinito, o mecanismo de gás pode ser implantado para encerrar o processo de execução, a fim de evitar que esse código ocupe o poder de computação indefinidamente. Antes de executar o código no EVM, o limite superior de gás deve ser definido com antecedência. Quando o gás acabar, o código parará de funcionar e o estado será revertido sem nenhuma atualização na cadeia.
À medida que os usuários aumentam, o Ethereum Mainnet encontra muitos problemas, como redes congestionadas e altas taxas de gás. Limitados ao design do Ethereum, esses problemas não podem ser resolvidos radicalmente.
Nos últimos anos, existem muitas novas cadeias públicas com taxas de gás mais baixas e redes mais rápidas e cadeias de camada 2 projetadas para escalar o Ethereum. Essas cadeias são todas cadeias de contratos inteligentes, que dizem ter melhores designs subjacentes e podem ser usadas para criar uma variedade de dApps.
Essas cadeias atendem às demandas excedentes do ecossistema Ethereum e desafiam o status dominante do Ethereum. É necessário que as contrapartes Ethereum sejam compatíveis com EVM? Em relação a essa divergência, essas cadeias são divididas em duas categorias: cadeias compatíveis com EVM e cadeias não EVM.
Recentemente, as cadeias públicas da Camada 1 surgiram uma após a outra. Embora reconstruir um ecossistema on-chain que funcione em paralelo com o Ethereum possa superar as deficiências existentes do Ethereum, são necessários recursos humanos significativos para construir um ecossistema completo e desenvolver um dApp do zero. A falta de programadores qualificados impede o crescimento de novos ecossistemas de cadeias públicas. Para uma cadeia pública com um ecossistema subdesenvolvido, seria difícil atrair um usuário do Ethereum em um curto período de tempo.
Diante disso, algumas cadeias públicas são projetadas para serem compatíveis com EVM. Os DApps originalmente executados no Ethereum podem ser completamente transferidos para cadeias públicas compatíveis com EVM com apenas pequenas modificações no código-fonte. Ele pode não apenas maximizar o uso dos recursos de desenvolvimento, mas também fornecer aos usuários uma melhor experiência no processo de migração do Ethereum para uma nova cadeia.
No entanto, a compatibilidade EVM inevitavelmente trouxe alguns problemas. Confinadas às regras de EVM, muitas cadeias compatíveis com EVM encontram um problema em relação a como alcançar a inovação sem homogeneização. No entanto, as cadeias não EVM podem quebrar essas regras e desenvolver um novo conjunto de regras a partir do zero, alcançando assim a inovação fundamentalmente.
Atualmente, mais de 70% das cadeias públicas convencionais são compatíveis com EVM, como BSC, Avalanche, Fantom, Tron, Celo, etc. Não seria difícil para os desenvolvedores desenvolver dApps ou implantar aplicativos Ethereum nessas cadeias para maior desempenho e taxas de gás mais baixas, melhorando assim a experiência do usuário.
Algumas outras cadeias públicas não são EVM, mas desenvolveram suas próprias máquinas virtuais, como Sol, Terra, etc. Embora não sejam compatíveis com EVM, essas cadeias atraíram um grupo de usuários e instituições fiéis com seu design inovador e excelente desempenho na cadeia. Por exemplo, os dois jogos blockchain, Step N e Let me speak, que se tornaram populares em todo o mundo recentemente, são baseados na cadeia Sol e atraíram fãs entusiasmados de todo o mundo para participar.
Notavelmente, as cadeias compatíveis com EVM podem coexistir com cadeias não EVM. Algumas cadeias não EVM também começam a ser compatíveis com EVM. O processo de conseguir isso seria árduo, pois requer grandes esforços para modificar o código. Um exemplo disso é Sol, que lançou o Neon, que permite aos desenvolvedores criar dApps no EVM.
Figura: Compatibilidade EVM de cadeias públicas
Como uma solução de escala do Ethereum, a Camada 2 é complementar ao Ethereum em vez de seu concorrente. As cadeias da Camada 2 são todas compatíveis com EVM, com um nível de compatibilidade mais alto que o da Camada 1. Para que a Camada 2 seja compatível com EVM, temos duas soluções: compatibilidade com EVM e equivalência com EVM.
As primeiras cadeias da Camada 2 são compatíveis com EVM, o que é semelhante à compatibilidade EVM das cadeias da Camada 1. Contratos inteligentes na camada 1 do Ethereum podem ser implantados na camada 2 fazendo algumas modificações. Por exemplo, o Unipig, lançado pela Optimism, é uma reconstrução completa do código Uniswap. É considerado Uniswap na Camada 2.
Existem algumas limitações para compatibilidade com EVM. Ao desenvolver contratos inteligentes em uma cadeia compatível com EVM, algumas ferramentas e estruturas de desenvolvimento baseadas em EVM podem não estar disponíveis. Além disso, para os contratos inteligentes originalmente organizados na Camada 1, os desenvolvedores ainda precisam fazer alguns ajustes para que os contratos inteligentes possam funcionar sem problemas no blockchain compatível com EVM.
A equivalência EVM visa oferecer aos desenvolvedores exatamente a mesma experiência ao desenvolver contratos inteligentes na Camada 2 e na Camada 1 do Ethereum. Isso beneficiou muito os desenvolvedores de Layer2, melhorou ainda mais a eficiência do desenvolvimento e economizou os custos de desenvolvimento e manutenção do código com base na compatibilidade do EVM.
Atualmente, as principais soluções de Camada 2, como Artbitrum, Optimism e Metis, alcançaram a equivalência EVM. A equivalência EVM pode transferir melhor os recursos do Ethereum para a Camada 2, com o objetivo de minimizar o custo de desenvolvimento e migração causado pelo dimensionamento. Espera-se que a equivalência EVM se torne o padrão principal da Camada 2 no futuro, e muitas soluções da Camada 2 terão uma corrida feroz em torno da equivalência EVM.
EVM é o núcleo que mantém o Ethereum funcionando. Com o estabelecimento do domínio da Ethereum, as principais cadeias públicas e as cadeias de Camada 2 seguiram ou são compatíveis com o conceito de design subjacente do EVM. Portanto, o EVM definitivamente teve um impacto profundo em todo o blockchain. O próprio EVM vem com muitos problemas, dificultando a compatibilidade das novas cadeias com o EVM. Apesar disso, os desenvolvedores têm trabalhado arduamente para fazer melhorias, o que facilitou muito o surgimento de muitas outras cadeias públicas.