EVM - это слой абстракции между кодом и хостом, который служит гарантией для поддержания бесперебойной работы Ethereum. Что такое EVM в конце концов? Каковы принципы и типичные случаи использования EVM? Давайте погрузимся в это глубже.
Будучи самым популярным блокчейном в настоящее время, Ethereum предоставляет пользователям множество децентрализованных приложений. Это наиболее часто упоминаемый термин, когда люди говорят о DeFi, NFT и т.д. И EVM, как основная часть Ethereum, также привлекает огромное внимание людей. Какова же тогда связь между EVM и Ethereum?
EVM означает виртуальную машину Ethereum. По определению Ethereum, EVM - это среда выполнения, в которой все счета Ethereum и смарт-контракты живут в цепочке Ethereum.
EVM существует как единая сущность, поддерживаемая всеми подключенными компьютерами, на которых запущен клиент Ethereum. Это то, что определяет правила вычисления нового действительного состояния от блока к блоку.
Вместо распределенной бухгалтерской книги, как в Биткойне, Ethereum - это распределенная машина состояний. Изменение от блока к блоку представляет собой обновление состояния всех счетов и балансов на Ethereum. Обновление рассчитывается на основе кода контракта с помощью EVM.
Рисунок: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM является виртуальной машиной на основе стека и выполняет все свои операции непосредственно в стеке. Когда смарт-контракт скомпилирован в байт-код, EVM будет выполнять операции на основе байт-кода, включая выборку переменных из памяти и добавление в стек, вычисление переменных в стеке и сохранение переменных в памяти и т.д.
В EVM существует два основных типа хранения данных: память и накопитель. Переменные в памяти будут храниться на Ethereum постоянно после выполнения контракта, в то время как переменные в памяти существуют временно, пока код выполняется на EVM.
Возьмем в качестве примера звонки по контракту. Мы написали контракт с помощью Solidity, составили метаданные с помощью компилятора и опубликовали его на Ethereum. Когда нам нужно обновить состояние контракта, мы должны вызвать контракт. Однако ни OS, ни Windows не могут напрямую запускать смарт-контракты. EVM необходим для обеспечения среды для работы смарт-контрактов. Конкретные шаги выглядят следующим образом: Сначала EVM находит код контракта, хранящийся на Ethereum, через адрес контракта; затем генерируется среда исполнения; наконец, содержимое контракта преобразуется в байткод и помещается в EVM для работы. Результат, полученный в результате операции, будет сохранен как последнее состояние в следующем блоке, таким образом, завершая процесс обновления состояния.
Рисунок: https://cnodejs.org/topic/5aeecba802591040485bab2a
Реализации EVM
В настоящее время все клиенты Ethereum включают реализацию EVM. Ethereum открыл исходный код нескольких языков программирования, включая Python, C++, js, Go и т.д., для реализации функциональных возможностей EVM. Она помогает пользователям понять принцип EVM в более удобной форме.
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
Умные контракты - это код, который работает исключительно на EVM. Их нельзя изменить после развертывания. Ethereum определяет, изменяет и хранит состояние с помощью смарт-контрактов для достижения различных децентрализованных приложений. EVM действует как среда, в которой могут работать смарт-контракты, что похоже на отношения между шоссе и автомобилем.
Для выполнения смарт-контрактов на EVM требуется значительная вычислительная мощность, которая потребляет определенное количество газа. Для лучшего понимания подумайте о транспортных средствах, которые должны платить за проезд по платным дорогам.
Плата за газ помогает стимулировать майнеров со всего мира к участию и предоставлению вычислительной мощности, как способ сделать Ethereum более децентрализованным. Она также предотвращает отправку пользователями запросов на случайные операции, которые могут привести к перегрузке Ethereum Mainnet, или защищает Ethereum от краха, предотвращая вредоносные атаки.
Смарт-контракты Ethereum пишутся на языке Solidity и компилируются в байткод перед выполнением на EVM. Байткод содержит опкоды, или коды операций. EVM имеет 144 опкода, каждый из которых обладает определенной функциональностью, что делает EVM Тьюринг-полным. Он может решить любой тип вычислительной задачи. Solidity и Opcodes позволяют нам писать сложные смарт-контракты и реализовывать широкий спектр функций на EVM, тем самым предоставляя пользователям разнообразные dApps.
Для одного и того же фрагмента кода вывод будет одинаковым после выполнения на разных EVM, поскольку это не имеет никакого отношения к среде выполнения и количеству выполнений. Уверенность EVM обеспечивает надежность кода и позволяет избежать неожиданных последствий. Эта функция помогает защитить интересы пользователей, особенно когда они совершают крупные транзакции на Ethereum.
EVM - это как изолированная песочница, в которой выполняется код. Запущенный процесс не нанесет вреда программному/аппаратному обеспечению компьютера и не повлияет на базовый протокол Ethereum. Изоляция EVM не позволяет хакерам атаковать машину, на которой работает EVM, а также защищает базовый протокол Ethereum от вмешательства. Она служит гарантией, обеспечивающей безопасность Ethereum.
Процесс выполнения кода EVM может быть прерван. Если пользователь запускает неправильный код, например, бесконечный цикл, газовый механизм может быть задействован для завершения процесса выполнения, чтобы предотвратить неограниченное использование вычислительной мощности таким кодом. Перед выполнением кода на EVM необходимо заранее установить верхний предел газа. Когда газ будет исчерпан, код перестанет выполняться, и состояние будет откачено без какого-либо обновления цепочки.
По мере роста пользователей Ethereum Mainnet сталкивается со многими проблемами, такими как перегруженность сетей и высокая плата за газ. Ограниченные конструкцией Ethereum, эти проблемы не могут быть решены радикально.
В последние годы появилось много новых публичных цепочек, которые имеют более низкую плату за газ и более быстрые сети, а также цепочки второго уровня, предназначенные для масштабирования Ethereum. Все эти цепи являются цепями смарт-контрактов, которые, как говорят, имеют лучшую базовую конструкцию и могут быть использованы для создания различных dApps.
Эти цепи принимают на себя избыточные потребности экосистемы Ethereum и бросают вызов доминирующему статусу Ethereum. Необходимо ли, чтобы аналоги Ethereum были совместимы с EVM? В связи с этим расхождением эти цепи делятся на две категории: EVM-совместимые цепи и не-EVM-цепи.
В последнее время государственные сети первого уровня появляются одна за другой. Хотя восстановление экосистемы на цепочке, работающей параллельно с Ethereum, может преодолеть существующие недостатки Ethereum, для создания полной экосистемы и разработки dApp с нуля требуются значительные человеческие ресурсы. Недостаток квалифицированных программистов препятствует росту новых экосистем публичных цепочек. Для публичной цепочки с неразвитой экосистемой было бы трудно привлечь пользователя из Ethereum в течение короткого периода времени.
Учитывая это, некоторые общественные сети разработаны таким образом, чтобы быть совместимыми с EVM. DApps, изначально работающие на Ethereum, могут быть полностью переведены на EVM-совместимые публичные цепочки только с незначительными изменениями в исходном коде. Это может не только максимально эффективно использовать ресурсы разработки, но и обеспечить пользователям лучший опыт в процессе перехода с Ethereum на новую цепочку.
Однако совместимость EVM неизбежно сопровождается определенными проблемами. Ограниченные правилами EVM, многие EVM-совместимые сети сталкиваются с проблемой, как добиться инноваций без гомогенизации. Однако не-EVM-цепочки могут нарушить эти правила и разработать новый набор правил с нуля, тем самым достигая инноваций в корне.
В настоящее время с EVM совместимы более 70% общедоступных цепей, таких как BSC, Avalanche, Fantom, Tron, Celo и др. Для разработчиков не составит труда разработать dApps или развернуть приложения Ethereum на этих цепочках для повышения производительности и снижения платы за газ, следовательно, улучшения пользовательского опыта.
Некоторые другие публичные сети не являются EVM, но разработали свои собственные виртуальные машины, такие как Sol, Terra и т.д. Хотя эти цепи не совместимы с EVM, они привлекли группу лояльных пользователей и учреждений благодаря своему инновационному дизайну и отличной работе цепи. Например, две популярные в последнее время во всем мире блокчейн-игры, Step N и Let me speak, основаны на цепочке Sol и привлекли к участию в них восторженных поклонников со всего мира.
Примечательно, что EVM-совместимые цепочки могут сосуществовать с не-EVM цепочками. Некоторые не-EVM цепи также начинают быть совместимыми с EVM. Процесс достижения этой цели будет трудным, поскольку потребует значительных усилий по изменению кода. Примером тому может служить компания Sol, запустившая Neon, которая позволяет разработчикам создавать dApps на EVM.
Рисунок: Совместимость EVM общественных сетей
Как решение для масштабирования Ethereum, Layer 2 является дополнением к Ethereum, а не его конкурентом. Все цепи уровня 2 совместимы с EVM, причем уровень совместимости выше, чем у уровня 1. Для того чтобы Layer 2 был совместим с EVM, у нас есть два решения: Совместимость EVM и Эквивалентность EVM.
Ранние цепи Уровня 2 совместимы с EVM, что аналогично совместимости с EVM цепей Уровня 1. Умные контракты на Уровне 1 Ethereum могут быть развернуты на Уровне 2 путем внесения некоторых изменений. Например, Unipig, запущенный компанией Optimism, полностью представляет собой реконструкцию кода Uniswap. Это считается Uniswap на уровне 2.
Существуют некоторые ограничения на совместимость EVM. При разработке смарт-контрактов на EVM-совместимой цепочке некоторые инструменты разработки и фреймворки, основанные на EVM, могут быть недоступны. Кроме того, для смарт-контрактов, изначально организованных на Уровне 1, разработчикам все еще необходимо внести некоторые коррективы, чтобы смарт-контракты могли бесперебойно работать на EVM-совместимом блокчейне.
Эквивалентность EVM направлена на то, чтобы предоставить разработчикам точно такой же опыт при разработке смарт-контрактов на Уровне 2, как и на Уровне 1 Ethereum. Это принесло значительную пользу разработчикам Layer2, еще больше повысило эффективность разработки и позволило сэкономить затраты на разработку и сопровождение кода на основе совместимости EVM.
В настоящее время основные решения второго уровня, такие как Artbitrum, Optimism и Metis, достигли эквивалентности EVM. Эквивалентность EVM может лучше перенести особенности Ethereum на уровень 2, с целью минимизации затрат на разработку и миграцию, вызванных масштабированием. Ожидается, что в будущем эквивалентность EVM станет основным стандартом уровня 2, и многие решения уровня 2 будут вести ожесточенную гонку вокруг эквивалентности EVM.
EVM - это ядро, которое обеспечивает работу Ethereum. С установлением господства Ethereum основные публичные цепочки и цепочки второго уровня последовали или совместимы с основополагающей концепцией дизайна EVM. Поэтому EVM, безусловно, оказала глубокое влияние на весь блокчейн. Сам EVM действительно имеет много проблем, что затрудняет совместимость новых цепей с EVM. Несмотря на это, разработчики прилагают все усилия для внесения улучшений, что в значительной степени способствовало появлению многих других публичных сетей.
EVM - это слой абстракции между кодом и хостом, который служит гарантией для поддержания бесперебойной работы Ethereum. Что такое EVM в конце концов? Каковы принципы и типичные случаи использования EVM? Давайте погрузимся в это глубже.
Будучи самым популярным блокчейном в настоящее время, Ethereum предоставляет пользователям множество децентрализованных приложений. Это наиболее часто упоминаемый термин, когда люди говорят о DeFi, NFT и т.д. И EVM, как основная часть Ethereum, также привлекает огромное внимание людей. Какова же тогда связь между EVM и Ethereum?
EVM означает виртуальную машину Ethereum. По определению Ethereum, EVM - это среда выполнения, в которой все счета Ethereum и смарт-контракты живут в цепочке Ethereum.
EVM существует как единая сущность, поддерживаемая всеми подключенными компьютерами, на которых запущен клиент Ethereum. Это то, что определяет правила вычисления нового действительного состояния от блока к блоку.
Вместо распределенной бухгалтерской книги, как в Биткойне, Ethereum - это распределенная машина состояний. Изменение от блока к блоку представляет собой обновление состояния всех счетов и балансов на Ethereum. Обновление рассчитывается на основе кода контракта с помощью EVM.
Рисунок: https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf
EVM является виртуальной машиной на основе стека и выполняет все свои операции непосредственно в стеке. Когда смарт-контракт скомпилирован в байт-код, EVM будет выполнять операции на основе байт-кода, включая выборку переменных из памяти и добавление в стек, вычисление переменных в стеке и сохранение переменных в памяти и т.д.
В EVM существует два основных типа хранения данных: память и накопитель. Переменные в памяти будут храниться на Ethereum постоянно после выполнения контракта, в то время как переменные в памяти существуют временно, пока код выполняется на EVM.
Возьмем в качестве примера звонки по контракту. Мы написали контракт с помощью Solidity, составили метаданные с помощью компилятора и опубликовали его на Ethereum. Когда нам нужно обновить состояние контракта, мы должны вызвать контракт. Однако ни OS, ни Windows не могут напрямую запускать смарт-контракты. EVM необходим для обеспечения среды для работы смарт-контрактов. Конкретные шаги выглядят следующим образом: Сначала EVM находит код контракта, хранящийся на Ethereum, через адрес контракта; затем генерируется среда исполнения; наконец, содержимое контракта преобразуется в байткод и помещается в EVM для работы. Результат, полученный в результате операции, будет сохранен как последнее состояние в следующем блоке, таким образом, завершая процесс обновления состояния.
Рисунок: https://cnodejs.org/topic/5aeecba802591040485bab2a
Реализации EVM
В настоящее время все клиенты Ethereum включают реализацию EVM. Ethereum открыл исходный код нескольких языков программирования, включая Python, C++, js, Go и т.д., для реализации функциональных возможностей EVM. Она помогает пользователям понять принцип EVM в более удобной форме.
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
Умные контракты - это код, который работает исключительно на EVM. Их нельзя изменить после развертывания. Ethereum определяет, изменяет и хранит состояние с помощью смарт-контрактов для достижения различных децентрализованных приложений. EVM действует как среда, в которой могут работать смарт-контракты, что похоже на отношения между шоссе и автомобилем.
Для выполнения смарт-контрактов на EVM требуется значительная вычислительная мощность, которая потребляет определенное количество газа. Для лучшего понимания подумайте о транспортных средствах, которые должны платить за проезд по платным дорогам.
Плата за газ помогает стимулировать майнеров со всего мира к участию и предоставлению вычислительной мощности, как способ сделать Ethereum более децентрализованным. Она также предотвращает отправку пользователями запросов на случайные операции, которые могут привести к перегрузке Ethereum Mainnet, или защищает Ethereum от краха, предотвращая вредоносные атаки.
Смарт-контракты Ethereum пишутся на языке Solidity и компилируются в байткод перед выполнением на EVM. Байткод содержит опкоды, или коды операций. EVM имеет 144 опкода, каждый из которых обладает определенной функциональностью, что делает EVM Тьюринг-полным. Он может решить любой тип вычислительной задачи. Solidity и Opcodes позволяют нам писать сложные смарт-контракты и реализовывать широкий спектр функций на EVM, тем самым предоставляя пользователям разнообразные dApps.
Для одного и того же фрагмента кода вывод будет одинаковым после выполнения на разных EVM, поскольку это не имеет никакого отношения к среде выполнения и количеству выполнений. Уверенность EVM обеспечивает надежность кода и позволяет избежать неожиданных последствий. Эта функция помогает защитить интересы пользователей, особенно когда они совершают крупные транзакции на Ethereum.
EVM - это как изолированная песочница, в которой выполняется код. Запущенный процесс не нанесет вреда программному/аппаратному обеспечению компьютера и не повлияет на базовый протокол Ethereum. Изоляция EVM не позволяет хакерам атаковать машину, на которой работает EVM, а также защищает базовый протокол Ethereum от вмешательства. Она служит гарантией, обеспечивающей безопасность Ethereum.
Процесс выполнения кода EVM может быть прерван. Если пользователь запускает неправильный код, например, бесконечный цикл, газовый механизм может быть задействован для завершения процесса выполнения, чтобы предотвратить неограниченное использование вычислительной мощности таким кодом. Перед выполнением кода на EVM необходимо заранее установить верхний предел газа. Когда газ будет исчерпан, код перестанет выполняться, и состояние будет откачено без какого-либо обновления цепочки.
По мере роста пользователей Ethereum Mainnet сталкивается со многими проблемами, такими как перегруженность сетей и высокая плата за газ. Ограниченные конструкцией Ethereum, эти проблемы не могут быть решены радикально.
В последние годы появилось много новых публичных цепочек, которые имеют более низкую плату за газ и более быстрые сети, а также цепочки второго уровня, предназначенные для масштабирования Ethereum. Все эти цепи являются цепями смарт-контрактов, которые, как говорят, имеют лучшую базовую конструкцию и могут быть использованы для создания различных dApps.
Эти цепи принимают на себя избыточные потребности экосистемы Ethereum и бросают вызов доминирующему статусу Ethereum. Необходимо ли, чтобы аналоги Ethereum были совместимы с EVM? В связи с этим расхождением эти цепи делятся на две категории: EVM-совместимые цепи и не-EVM-цепи.
В последнее время государственные сети первого уровня появляются одна за другой. Хотя восстановление экосистемы на цепочке, работающей параллельно с Ethereum, может преодолеть существующие недостатки Ethereum, для создания полной экосистемы и разработки dApp с нуля требуются значительные человеческие ресурсы. Недостаток квалифицированных программистов препятствует росту новых экосистем публичных цепочек. Для публичной цепочки с неразвитой экосистемой было бы трудно привлечь пользователя из Ethereum в течение короткого периода времени.
Учитывая это, некоторые общественные сети разработаны таким образом, чтобы быть совместимыми с EVM. DApps, изначально работающие на Ethereum, могут быть полностью переведены на EVM-совместимые публичные цепочки только с незначительными изменениями в исходном коде. Это может не только максимально эффективно использовать ресурсы разработки, но и обеспечить пользователям лучший опыт в процессе перехода с Ethereum на новую цепочку.
Однако совместимость EVM неизбежно сопровождается определенными проблемами. Ограниченные правилами EVM, многие EVM-совместимые сети сталкиваются с проблемой, как добиться инноваций без гомогенизации. Однако не-EVM-цепочки могут нарушить эти правила и разработать новый набор правил с нуля, тем самым достигая инноваций в корне.
В настоящее время с EVM совместимы более 70% общедоступных цепей, таких как BSC, Avalanche, Fantom, Tron, Celo и др. Для разработчиков не составит труда разработать dApps или развернуть приложения Ethereum на этих цепочках для повышения производительности и снижения платы за газ, следовательно, улучшения пользовательского опыта.
Некоторые другие публичные сети не являются EVM, но разработали свои собственные виртуальные машины, такие как Sol, Terra и т.д. Хотя эти цепи не совместимы с EVM, они привлекли группу лояльных пользователей и учреждений благодаря своему инновационному дизайну и отличной работе цепи. Например, две популярные в последнее время во всем мире блокчейн-игры, Step N и Let me speak, основаны на цепочке Sol и привлекли к участию в них восторженных поклонников со всего мира.
Примечательно, что EVM-совместимые цепочки могут сосуществовать с не-EVM цепочками. Некоторые не-EVM цепи также начинают быть совместимыми с EVM. Процесс достижения этой цели будет трудным, поскольку потребует значительных усилий по изменению кода. Примером тому может служить компания Sol, запустившая Neon, которая позволяет разработчикам создавать dApps на EVM.
Рисунок: Совместимость EVM общественных сетей
Как решение для масштабирования Ethereum, Layer 2 является дополнением к Ethereum, а не его конкурентом. Все цепи уровня 2 совместимы с EVM, причем уровень совместимости выше, чем у уровня 1. Для того чтобы Layer 2 был совместим с EVM, у нас есть два решения: Совместимость EVM и Эквивалентность EVM.
Ранние цепи Уровня 2 совместимы с EVM, что аналогично совместимости с EVM цепей Уровня 1. Умные контракты на Уровне 1 Ethereum могут быть развернуты на Уровне 2 путем внесения некоторых изменений. Например, Unipig, запущенный компанией Optimism, полностью представляет собой реконструкцию кода Uniswap. Это считается Uniswap на уровне 2.
Существуют некоторые ограничения на совместимость EVM. При разработке смарт-контрактов на EVM-совместимой цепочке некоторые инструменты разработки и фреймворки, основанные на EVM, могут быть недоступны. Кроме того, для смарт-контрактов, изначально организованных на Уровне 1, разработчикам все еще необходимо внести некоторые коррективы, чтобы смарт-контракты могли бесперебойно работать на EVM-совместимом блокчейне.
Эквивалентность EVM направлена на то, чтобы предоставить разработчикам точно такой же опыт при разработке смарт-контрактов на Уровне 2, как и на Уровне 1 Ethereum. Это принесло значительную пользу разработчикам Layer2, еще больше повысило эффективность разработки и позволило сэкономить затраты на разработку и сопровождение кода на основе совместимости EVM.
В настоящее время основные решения второго уровня, такие как Artbitrum, Optimism и Metis, достигли эквивалентности EVM. Эквивалентность EVM может лучше перенести особенности Ethereum на уровень 2, с целью минимизации затрат на разработку и миграцию, вызванных масштабированием. Ожидается, что в будущем эквивалентность EVM станет основным стандартом уровня 2, и многие решения уровня 2 будут вести ожесточенную гонку вокруг эквивалентности EVM.
EVM - это ядро, которое обеспечивает работу Ethereum. С установлением господства Ethereum основные публичные цепочки и цепочки второго уровня последовали или совместимы с основополагающей концепцией дизайна EVM. Поэтому EVM, безусловно, оказала глубокое влияние на весь блокчейн. Сам EVM действительно имеет много проблем, что затрудняет совместимость новых цепей с EVM. Несмотря на это, разработчики прилагают все усилия для внесения улучшений, что в значительной степени способствовало появлению многих других публичных сетей.