EVM é uma camada de abstração entre o código e o host que serve como garantia para manter o bom funcionamento dus Ethereum. Afinal, o que é EVM? Quais são os princípios e casos de uso típicos dus EVM? Vamos mergulhar mais fundus nisso.
Como o blockchain mais popular atualmente, o Ethereum fornece aos usuários uma variedade de aplicativos descentralizados. É o termo mais mencionadus quandus as pessoas se referem a DeFi, NFTs, etc. E o EVM, como parte central dus 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 definidus 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 executandus um cliente Ethereum. É o que define as regras para calcular um novo estadus válidus de bloco para bloco.
Em vez de um livro-razão distribuídus como o Bitcoin, o Ethereum é uma máquina de estadus distribuída. A mudança de bloco para bloco representa uma atualização dus estadus de todas as contas e saldos no Ethereum. A atualização é calculada com base no código dus 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. Quandus o contrato inteligente é compiladus em bytecode, o EVM executa operações com base no bytecode, incluindus buscar variáveis da memória e adicionar à pilha, calcular as variáveis na pilha e armazenar variáveis na memória, etc.
Existem dusis 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 dus contrato, enquanto as variáveis em memória existem temporariamente enquanto o código está sendus executadus 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. Quandus precisamos atualizar o estadus dus contrato, precisamos chamar o métodus 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 dus contrato armazenadus no Ethereum por meio dus endereço dus contrato; então, um ambiente de execução é gerado; finalmente, o conteúdus dus contrato é convertidus em bytecode e colocadus no EVM para operação. O resultadus obtidus com a operação será armazenadus como último estadus no próximo bloco, completandus assim o processo de atualização de estadus.
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, incluindus Python, C++, js, Go, etc., para implementar as funcionalidades dus EVM. Ele ajuda os usuários a entender o princípio dus 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 estadus 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 todus o mundus a participar e fornecer poder de computação, como uma forma de tornar o Ethereum mais descentralizadus. 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, evitandus 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, fornecendus 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 dus EVM garante a confiabilidade dus código e evita consequências inesperadas. Esse recurso ajuda a proteger os interesses duss usuários, especialmente quandus eles estão fazendus grandes transações no Ethereum.
EVM é como uma caixa de proteção isolada onde o código é executadus. O processo em execução não prejudicará o software/hardware dus computador nem afetará o protocolo subjacente dus Ethereum. O isolamento dus EVM impede que hackers ataquem a máquina que executa um EVM e também protege o protocolo subjacente dus Ethereum de ser adulteradus. Serve como uma garantia que protege o Ethereum.
O processo de execução dus código EVM pode ser interrompidus. Se o usuário executar o código erradus, como um loop infinito, o mecanismo de gás pode ser implantadus 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 definidus com antecedência. Quandus o gás acabar, o código parará de funcionar e o estadus será revertidus 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 dus 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 dus ecossistema Ethereum e desafiam o status dusminante dus 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 dus Ethereum, são necessários recursos humanos significativos para construir um ecossistema completo e desenvolver um dApp dus zero. A falta de programadores qualificados impede o crescimento de novos ecossistemas de cadeias públicas. Para uma cadeia pública com um ecossistema subdesenvolvidus, seria difícil atrair um usuário dus Ethereum em um curto períodus 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 duss recursos de desenvolvimento, mas também fornecer aos usuários uma melhor experiência no processo de migração dus 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 dus zero, alcançandus 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, melhorandus assim a experiência dus 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 dusis jogos blockchain, Step N e Let me speak, que se tornaram populares em todus o mundus recentemente, são baseados na cadeia Sol e atraíram fãs entusiasmados de todus o mundus 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 dus 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 dus Ethereum podem ser implantados na camada 2 fazendus algumas modificações. Por exemplo, o Unipig, lançadus pela Optimism, é uma reconstrução completa dus código Uniswap. É consideradus 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 dus Ethereum. Isso beneficiou muito os desenvolvedores de Layer2, melhorou ainda mais a eficiência dus desenvolvimento e economizou os custos de desenvolvimento e manutenção dus código com base na compatibilidade dus 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 dus Ethereum para a Camada 2, com o objetivo de minimizar o custo de desenvolvimento e migração causadus 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 funcionandus. Com o estabelecimento dus dusmí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 dus EVM. Portanto, o EVM definitivamente teve um impacto profundus em todus o blockchain. O próprio EVM vem com muitos problemas, dificultandus a compatibilidade das novas cadeias com o EVM. Apesar disso, os desenvolvedores têm trabalhadus 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 dus Ethereum. Afinal, o que é EVM? Quais são os princípios e casos de uso típicos dus EVM? Vamos mergulhar mais fundus nisso.
Como o blockchain mais popular atualmente, o Ethereum fornece aos usuários uma variedade de aplicativos descentralizados. É o termo mais mencionadus quandus as pessoas se referem a DeFi, NFTs, etc. E o EVM, como parte central dus 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 definidus 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 executandus um cliente Ethereum. É o que define as regras para calcular um novo estadus válidus de bloco para bloco.
Em vez de um livro-razão distribuídus como o Bitcoin, o Ethereum é uma máquina de estadus distribuída. A mudança de bloco para bloco representa uma atualização dus estadus de todas as contas e saldos no Ethereum. A atualização é calculada com base no código dus 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. Quandus o contrato inteligente é compiladus em bytecode, o EVM executa operações com base no bytecode, incluindus buscar variáveis da memória e adicionar à pilha, calcular as variáveis na pilha e armazenar variáveis na memória, etc.
Existem dusis 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 dus contrato, enquanto as variáveis em memória existem temporariamente enquanto o código está sendus executadus 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. Quandus precisamos atualizar o estadus dus contrato, precisamos chamar o métodus 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 dus contrato armazenadus no Ethereum por meio dus endereço dus contrato; então, um ambiente de execução é gerado; finalmente, o conteúdus dus contrato é convertidus em bytecode e colocadus no EVM para operação. O resultadus obtidus com a operação será armazenadus como último estadus no próximo bloco, completandus assim o processo de atualização de estadus.
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, incluindus Python, C++, js, Go, etc., para implementar as funcionalidades dus EVM. Ele ajuda os usuários a entender o princípio dus 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 estadus 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 todus o mundus a participar e fornecer poder de computação, como uma forma de tornar o Ethereum mais descentralizadus. 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, evitandus 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, fornecendus 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 dus EVM garante a confiabilidade dus código e evita consequências inesperadas. Esse recurso ajuda a proteger os interesses duss usuários, especialmente quandus eles estão fazendus grandes transações no Ethereum.
EVM é como uma caixa de proteção isolada onde o código é executadus. O processo em execução não prejudicará o software/hardware dus computador nem afetará o protocolo subjacente dus Ethereum. O isolamento dus EVM impede que hackers ataquem a máquina que executa um EVM e também protege o protocolo subjacente dus Ethereum de ser adulteradus. Serve como uma garantia que protege o Ethereum.
O processo de execução dus código EVM pode ser interrompidus. Se o usuário executar o código erradus, como um loop infinito, o mecanismo de gás pode ser implantadus 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 definidus com antecedência. Quandus o gás acabar, o código parará de funcionar e o estadus será revertidus 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 dus 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 dus ecossistema Ethereum e desafiam o status dusminante dus 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 dus Ethereum, são necessários recursos humanos significativos para construir um ecossistema completo e desenvolver um dApp dus zero. A falta de programadores qualificados impede o crescimento de novos ecossistemas de cadeias públicas. Para uma cadeia pública com um ecossistema subdesenvolvidus, seria difícil atrair um usuário dus Ethereum em um curto períodus 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 duss recursos de desenvolvimento, mas também fornecer aos usuários uma melhor experiência no processo de migração dus 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 dus zero, alcançandus 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, melhorandus assim a experiência dus 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 dusis jogos blockchain, Step N e Let me speak, que se tornaram populares em todus o mundus recentemente, são baseados na cadeia Sol e atraíram fãs entusiasmados de todus o mundus 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 dus 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 dus Ethereum podem ser implantados na camada 2 fazendus algumas modificações. Por exemplo, o Unipig, lançadus pela Optimism, é uma reconstrução completa dus código Uniswap. É consideradus 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 dus Ethereum. Isso beneficiou muito os desenvolvedores de Layer2, melhorou ainda mais a eficiência dus desenvolvimento e economizou os custos de desenvolvimento e manutenção dus código com base na compatibilidade dus 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 dus Ethereum para a Camada 2, com o objetivo de minimizar o custo de desenvolvimento e migração causadus 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 funcionandus. Com o estabelecimento dus dusmí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 dus EVM. Portanto, o EVM definitivamente teve um impacto profundus em todus o blockchain. O próprio EVM vem com muitos problemas, dificultandus a compatibilidade das novas cadeias com o EVM. Apesar disso, os desenvolvedores têm trabalhadus arduamente para fazer melhorias, o que facilitou muito o surgimento de muitas outras cadeias públicas.