Открыть сервис

Ethereum Virtual Machine

Ethereum Virtual Machine (EVM) — это исполняющая среда для смарт-контрактов в сети Ethereum, представляющая собой децентрализованную виртуальную машину, работающую на каждом узле (ноде) сети. EVM является ключевым компонентом платформы Ethereum, обеспечивающим выполнение программного кода в изолированной, детерминированной и безопасной среде. Она интерпретирует байт-код, полученный в результате компиляции языков высокого уровня (таких как Solidity или Vyper), и управляет состоянием блокчейна, включая балансы счетов, хранилища данных и вызовы контрактов.

История

Предпосылки создания

Идея децентрализованной вычислительной платформы была предложена Виталиком Бутериным в конце 2013 года в первоначальном проекте Ethereum (white paper). В отличие от Bitcoin, который поддерживал лишь ограниченный набор операций для передачи стоимости, Ethereum задумывался как «мировой компьютер», способный выполнять произвольные алгоритмы. Для этого требовалась универсальная виртуальная машина, способная работать на всех узлах сети, обеспечивая консенсус относительно результата выполнения кода.

Разработка и запуск

Разработка EVM началась в 2014 году в рамках проекта Ethereum. Первая рабочая версия была реализована в клиенте Go Ethereum (Geth) и других клиентах (например, Parity, C++ Ethereum). 30 июля 2015 года состоялся запуск основной сети Ethereum (Frontier), в которой EVM стала основной средой исполнения смарт-контрактов. Изначально EVM была спроектирована как стековая машина с 256-битной длиной слова, что связано с необходимостью эффективной работы с хеш-функциями и криптографическими операциями.

Эволюция

С момента запуска EVM претерпела несколько улучшений через хардфорки (обновления протокола). Например, в обновлении Constantinople (2019) были оптимизированы некоторые операции, а в Berlin (2021) — изменены стоимости газовых операций для повышения безопасности. В 2022 году, после перехода Ethereum на алгоритм консенсуса Proof-of-Stake (The Merge), EVM сохранила свою функциональность, но изменилась архитектура взаимодействия с консенсусным уровнем. В 2024 году в рамках обновления Dencun была введена технология EIP-4844 (Proto-Danksharding), которая, хотя и не изменила саму EVM, расширила возможности обработки данных для решений второго уровня (L2), работающих на основе EVM.

Архитектура и принципы работы

Общая архитектура

EVM является стековой виртуальной машиной (stack machine) с 256-битной архитектурой. Она не имеет регистров общего назначения; все вычисления выполняются через стек, память и постоянное хранилище. Основные компоненты EVM:

  • Стек — LIFO-структура (Last In, First Out) с максимальной глубиной 1024 элемента. Каждый элемент — 256-битное слово.
  • Память (Memory) — временное, линейное адресуемое хранилище, используемое для хранения данных во время выполнения транзакции. Память обнуляется после завершения вызова.
  • Хранилище (Storage) — постоянное, ассоциативное хранилище (ключ-значение), привязанное к конкретному смарт-контракту. Данные в хранилище сохраняются между вызовами и являются частью состояния блокчейна.
  • Счётчик команд (PC)указатель на текущую инструкцию в байт-коде.
  • Газ (Gas) — единица измерения вычислительных усилий. Каждая операция в EVM потребляет определённое количество газа, что предотвращает бесконечные циклы и злоупотребления ресурсами сети.

Процесс выполнения

  1. Транзакция инициирует вызов смарт-контракта или создание нового контракта. В данных транзакции содержится байт-код и входные параметры.
  2. Каждый узел сети запускает EVM локально, загружая состояние контракта из хранилища.
  3. EVM последовательно выполняет инструкции байт-кода, изменяя стек, память и хранилище в соответствии с правилами, определёнными в спецификации Ethereum.
  4. После завершения выполнения (или исчерпания газа) результат фиксируется в новом состоянии блокчейна. Все узлы должны прийти к одинаковому результату, что обеспечивает консенсус.

Детерминизм

EVM гарантирует детерминизм: при одинаковых начальных условиях (состояние блокчейна, входные данные, количество газа) выполнение всегда приводит к одному и тому же результату. Это критически важно для консенсуса, так как каждый узел должен независимо вычислить одинаковое состояние.

Классификация и виды

По уровню реализации

  • Нативная EVM — реализация, встроенная в клиенты Ethereum (Geth, Nethermind, Erigon). Она работает на уровне протокола и обрабатывает все транзакции основной сети.
  • EVM-совместимые среды — реализации, которые эмулируют поведение EVM, но работают на других блокчейнах или в тестовых сетях. Примеры: Binance Smart Chain (BSC), Polygon, Avalanche C-Chain, Arbitrum, Optimism. Эти сети используют EVM для выполнения смарт-контрактов, что обеспечивает переносимость кода между ними.

По типу использования

  • EVM первого уровня (L1) — исполнение непосредственно в основной сети Ethereum.
  • EVM второго уровня (L2) — исполнение в сайдчейнах или роллапах (Rollups), которые периодически публикуют сводные данные в основную сеть. Примеры: zkEVM, Optimistic Rollups.

Характеристики и особенности

Газ и стоимость операций

Каждая операция EVM имеет фиксированную стоимость газа, измеряемую в единицах gas. Например:

  • ADD (сложение) — 3 gas.
  • SLOAD (загрузка из хранилища) — 100 gas (после обновления Berlin — 2100 для холодного доступа).
  • SSTORE (запись в хранилище) — от 20000 gas (в зависимости от изменения значения).
  • CALL (вызов другого контракта) — 700 gas (базовая стоимость) + стоимость передачи данных.

Общая стоимость транзакции вычисляется как gas_used * gas_price. Газовый лимит (gas limit) блока ограничивает суммарное количество операций, которые могут быть выполнены за один блок.

Байт-код и опкоды

EVM использует байт-код, состоящий из 256-битных инструкций (опкодов). Каждая инструкция имеет уникальный код (от 0x00 до 0xFF). Некоторые опкоды:

  • 0x00 (STOP) — остановка выполнения.
  • 0x01 (ADD) — сложение двух верхних элементов стека.
  • 0x55 (SSTORE) — сохранение значения в хранилище.
  • 0xF0 (CREATE) — создание нового контракта.

Ограничения

  • Отсутствие асинхронности — EVM выполняет код последовательно, без параллелизма.
  • Отсутствие доступа к внешним данным — EVM не может напрямую обращаться к данным вне блокчейна (например, к API). Для этого используются оракулы.
  • Ограничение по размеру контракта — максимальный размер байт-кода контракта составляет 24576 байт (с 2021 года, после EIP-170).

Применение

Смарт-контракты

Основное назначение EVM — выполнение смарт-контрактов. Смарт-контракты — это программы, которые автоматически исполняют условия соглашения при наступлении определённых событий. Примеры: децентрализованные финансовые протоколы (DeFi), токены (ERC-20, ERC-721), децентрализованные биржи (Uniswap), игры и NFT-платформы.

Децентрализованные приложения (dApps)

EVM является основой для тысяч dApps, работающих на Ethereum и совместимых сетях. Разработчики пишут код на Solidity или Vyper, компилируют его в байт-код EVM и развёртывают в сети. Пользователи взаимодействуют с dApps через транзакции, которые инициируют вызовы функций контрактов.

Интероперабельность

Благодаря EVM, смарт-контракты, написанные для Ethereum, могут быть перенесены на другие EVM-совместимые блокчейны с минимальными изменениями. Это способствует развитию мультичейн-экосистемы и снижает барьеры для разработчиков.

Критика и ограничения

Проблемы масштабирования

EVM обрабатывает транзакции последовательно, что ограничивает пропускную способность сети Ethereum до примерно 15-30 транзакций в секунду (TPS). Это приводит к высоким комиссиям (gas fees) в периоды пиковой нагрузки. Для решения этой проблемы разрабатываются решения второго уровня (L2) и шардинг.

Сложность и стоимость разработки

Написание безопасных смарт-контрактов для EVM требует высокой квалификации. Ошибки в коде (например, реентерабельность, переполнение целых чисел) могут приводить к потере средств. Кроме того, стоимость развёртывания и выполнения контрактов в основной сети Ethereum может быть высокой.

Зависимость от газа

Модель газа, хотя и предотвращает злоупотребления, создаёт сложности для разработчиков: необходимо точно оценивать стоимость выполнения, чтобы транзакция не была отклонена из-за нехватки газа. Неправильная оценка может привести к потере комиссии.

Интересные факты

  • Первая программа на EVM — самый первый смарт-контракт в сети Ethereum был создан 30 июля 2015 года. Он представлял собой простой контракт для голосования.
  • EVM и Turing-полнота — EVM является Turing-полной, то есть теоретически может выполнять любой алгоритм, если предоставить достаточно ресурсов. Однако на практике это ограничено газом.
  • EVM в других блокчейнах — по состоянию на 2025 год, более 80% всех смарт-контрактов в мире работают на EVM-совместимых платформах. Это делает EVM де-факто стандартом для децентрализованных вычислений.
  • Совместимость с языками — помимо Solidity и Vyper, существуют компиляторы, которые позволяют писать смарт-контракты для EVM на других языках, например, Fe (Rust-подобный язык) и Yul (промежуточный язык низкого уровня).

Источники

  • Ethereum Whitepaper (Vitalik Buterin, 2013)
  • Ethereum Yellow Paper (Gavin Wood, 2014, последующие обновления)
  • Спецификация EVM (Ethereum Foundation, 2025)
  • Документация по Solidity (Solidity Language Documentation)
  • EIP-170 (Contract code size limit), EIP-2929 (Gas cost increases for state access), EIP-4844 (Proto-Danksharding)
  • «Mastering Ethereum» (Andreas M. Antonopoulos, Gavin Wood, 2018)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →