30%

Кэшбэк до

387617066998206.44

Запасы обмена

165

Обменные пункты

53102

Направления обмена

30%

Кэшбэк до

387617066998206.44

Запасы обмена

165

Обменные пункты

53102

Направления обмена

30%

Кэшбэк до

387617066998206.44

Запасы обмена

165

Обменные пункты

53102

Направления обмена

30%

Кэшбэк до

387617066998206.44

Запасы обмена

165

Обменные пункты

53102

Направления обмена

eye 153

Как работает Ethereum Virtual Machine (EVM)?

Как работает Ethereum Virtual Machine (EVM)?

Как работает Ethereum Virtual Machine (EVM)? 

Ethereum известен не только как вторая по величине криптовалюта по рыночной капитализации, но и как первый широко принятый программируемый блокчейн. Возможность развертывать смарт-контракты и строить DeFi-протоколы, NFT-маркетплейсы, DAO, игры и другие децентрализованные приложения сделала его фундаментом широкого Web3-ландшафта. В основе этой программируемости лежит Ethereum Virtual Machine (EVM) — виртуальная машина, которая выполняет код смарт-контрактов и определяет, как изменяется состояние сети.

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

1. Что такое Ethereum Virtual Machine простыми словами?

Ethereum Virtual Machine — это абстрактная вычислительная машина, которая выполняет код смарт-контрактов в сети Ethereum. Она работает поверх блокчейна и обеспечивает:

  • идентичные результаты выполнения на всех узлах сети;
  • изоляцию и безопасность при выполнении смарт-контрактов;
  • управление состоянием всех аккаунтов и контрактов;
  • ограничение ресурсов через механизм газа.

Проще говоря, EVM часто называют глобальным децентрализованным компьютером. Каждый узел Ethereum запускает собственный локальный экземпляр EVM, который выполняет одни и те же инструкции и тем самым синхронно поддерживает одинаковое состояние блокчейна.

2. Основные функции EVM

EVM выполняет несколько ключевых функций, без которых Ethereum не работал бы так, как сегодня:

  • Выполнение смарт-контрактов. Весь код на Solidity, Vyper и других языках компилируется в байткод, который исполняет EVM.
  • Переходы состояния. Каждая транзакция — это переход от одного глобального состояния сети к другому; EVM гарантирует корректность этого перехода.
  • Управление аккаунтами. Поддерживаются пользовательские и контрактные аккаунты, их ETH-балансы, nonce, код и хранилище.
  • Учёт газа. EVM рассчитывает, сколько вычислительных ресурсов потребляет каждая операция, и применяет лимиты.
  • Детерминированное выполнение. Одна и та же транзакция должна давать точно такой же результат на всех узлах.

3. Архитектура EVM: основные компоненты

EVM — стековая виртуальная машина, которая ведёт себя похожим образом на простой процессор. Она оперирует несколькими ключевыми структурами данных и абстракциями.

3.1. Аккаунты в EVM

В Ethereum существует два типа аккаунтов:

Тип аккаунта Описание Ключевые характеристики
EOA (Externally Owned Account) Аккаунт, которым управляет приватный ключ пользователя. Имеет баланс ETH и nonce, но не имеет кода. Транзакции могут инициироваться только от EOA.
Contract Account Аккаунт смарт-контракта, в котором хранится код и постоянное хранилище. Не имеет приватного ключа и не может «подписывать» транзакции сам по себе. Активируется вызовами от других контрактов или EOA.

3.2. Стек

Стек — основная структура данных, используемая EVM. Это структура типа LIFO (last in, first out — «последним пришёл, первым вышел»), в которой может находиться до 1024 элементов. Все арифметические, логические и многие другие операции работают через стек: инструкции считывают операнды из стека и помещают результат обратно.

3.3. Память

Память (memory) — это временное линейное, побайтно адресуемое пространство, доступное в рамках транзакции или вызова контракта. После завершения вызова память очищается. Стоимость использования памяти растёт по мере увеличения её объёма.

3.4. Хранилище

Хранилище (storage) — постоянная память контракта. Данные в хранилище сохраняются в блокчейне (пока существует цепь), поэтому любые операции SSTORE относятся к числу самых дорогих по газу. Хранилище организовано как хранилище ключ–значение с 256-битными словами.

3.5. Байткод и опкоды

Смарт-контракты обычно пишут на языках высокого уровня, таких как Solidity. Затем они компилируются в байткод — последовательность инструкций, состоящих из опкодов (operation codes, коды операций). Именно эти опкоды и исполняет EVM.

Примеры опкодов:

  • ADD, MUL, SUB — арифметические операции;
  • AND, OR, NOT — логические операции;
  • SLOAD, SSTORE — доступ к хранилищу;
  • CALL, DELEGATECALL — вызовы других контрактов;
  • JUMP, JUMPI — изменение потока управления;
  • LOG1LOG4 — генерация событий (логов).

4. Механизм газа: как EVM ограничивает ресурсы

Как и любой вычислительной системе, Ethereum нужен механизм защиты от злоупотребления ресурсами. В централизованных системах это контролируют администраторы или лимиты серверов. В децентрализованном Ethereum это реализуется через механизм газа.

Газ — это единица измерения объёма вычислительной работы, которую выполняет EVM. Каждая инструкция имеет свою стоимость в газе. Например, простое сложение может стоить несколько единиц газа, тогда как запись в хранилище — тысячи.

Операция Пример опкода Типичная стоимость (газ, примерно)
Арифметика ADD, MUL 3–5
Чтение из хранилища SLOAD 800
Запись в новый слот хранилища SSTORE 20 000
Вызов контракта CALL 700 + переменная часть

Стоимость транзакции в ETH определяется формулой:

Стоимость транзакции = Gas Used × Gas Price

Пользователь задаёт лимит газа (максимум газа) и цену газа (или максимальную комиссию), а сеть определяет, сколько газа было фактически израсходовано. Если газ заканчивается до того, как контракт завершит выполнение, транзакция ревертится, а изменения состояния откатываются (кроме уже израсходованного газа). Неиспользованный газ (в пределах лимита) возвращается пользователю в соответствии с текущей моделью комиссий.

5. Как EVM выполняет смарт-контракт: пошаговый пример

5.1. Шаг 1: Создание и подпись транзакции

Пользователь (EOA) формирует транзакцию: указывает адрес вызываемого контракта, данные вызова (закодированный селектор функции + аргументы), лимит газа, максимальную комиссию и т. д. Затем транзакция подписывается приватным ключом пользователя.

5.2. Шаг 2: Попадание в мемпул

После подписания транзакция отправляется в сеть и попадает в мемпул — набор всех неподтверждённых транзакций, ожидающих включения в блок. Валидаторы выбирают транзакции с наиболее привлекательными комиссиями.

5.3. Шаг 3: Обработка транзакции валидатором

Когда валидатор (в эпоху Proof of Stake) формирует блок, он последовательно выполняет транзакции в EVM. Для каждой транзакции:

  • проверяется подпись и структура транзакции;
  • проверяется, достаточно ли у аккаунта средств для оплаты газа;
  • проверяется и увеличивается nonce отправителя;
  • байткод контракта загружается в EVM.

5.4. Шаг 4: Выполнение байткода

EVM начинает выполнять опкоды контракта. Каждая инструкция:

  • читаёт и/или записывает данные в стек, память или хранилище;
  • обновляет внутреннее состояние виртуальной машины;
  • уменьшает оставшийся баланс газа.

Если в ходе выполнения происходит ошибка или заканчивается газ, транзакция считается неуспешной, и все изменения состояния (кроме затраченного газа) откатываются.

5.5. Шаг 5: Обновление глобального состояния

После успешного выполнения контракта EVM формирует новое состояние:

  • обновляются балансы аккаунтов;
  • изменяется хранилище контрактов;
  • генерируются логи (события), доступные через RPC и индексаторы;
  • обновляется корень состояния (state root) блока.

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

6. Модель состояния Ethereum и роль EVM

Состояние Ethereum представлено набором аккаунтов и связями между ними. Внутренне оно хранится в виде древовидных структур (Merkle Patricia Trie), которые позволяют эффективно проверять целостность данных и дают криптографический «отпечаток» состояния.

EVM выступает в роли машины состояний: на вход подаётся предыдущее состояние и набор транзакций, а на выходе получается новое состояние. Этот процесс строго детерминирован: нет случайных элементов, которые могли бы изменить результат выполнения.

7. Языки программирования и EVM: Solidity, Vyper и другие

Хотя сама EVM понимает только байткод, разработчики почти никогда не пишут контракты напрямую в виде опкодов. Вместо этого используют языки высокого уровня, которые компилируются в байткод EVM.

  • Solidity — самый популярный язык для Ethereum, синтаксисом напоминает JavaScript/TypeScript.
  • Vyper — более минималистичный язык с синтаксисом в стиле Python и фокусом на простоте и безопасности.
  • Yul — низкоуровневый промежуточный язык, ближе к сырому байткоду EVM.

Процесс выглядит так: разработчик пишет контракт на Solidity → компилятор (например, solc) переводит код в байткод → при развёртывании этот байткод сохраняется в аккаунте контракта → при каждом вызове EVM считывает этот байткод и выполняет его.

8. Преимущества EVM как вычислительной модели

Ethereum Virtual Machine обладает рядом важных преимуществ, благодаря которым она стала де-факто стандартом:

  • Универсальность. EVM — тьюринг-полная машина: теоретически на ней можно реализовать любую логику.
  • Децентрализация. Одинаковая логика выполняется на тысячах узлов без центрального контроллера.
  • Безопасность. Изоляция выполнения, лимиты газа и прозрачная модель состояния.
  • Кросс-чейн совместимость. Многие блокчейны реализовали поддержку EVM, что позволяет запускать одни и те же контракты в разных сетях.
  • Огромная экосистема. Инструменты, библиотеки, фреймворки и огромное количество проверенных боем контрактов.

9. Ограничения и недостатки EVM

У EVM есть и слабые стороны, о которых разработчикам важно помнить:

  • Ограниченная пропускная способность. Каждый узел должен переисполнять один и тот же код, поэтому сложные вычисления стоят дорого.
  • Дорогая постоянная память. On-chain-хранилище очень дорогое, поэтому разработчики вынуждены оптимизировать каждый байт.
  • Риск ошибок в контрактах. Смарт-контракты на практике неизменяемы: одна ошибка может стоить миллионов.
  • Изоляция от внешнего мира. Контракты не могут напрямую вызывать HTTP-API или базы данных — им нужны оракулы.

10. EVM-совместимые блокчейны

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

Наиболее известные EVM-совместимые сети:

  • BNB Chain;
  • Polygon (PoS-цепь);
  • Avalanche C-Chain;
  • Fantom;
  • Arbitrum, Optimism (L2-решения для Ethereum);
  • Gnosis Chain и другие.

EVM-совместимость фактически стала «золотым стандартом» для новых цепочек, потому что разработчикам не нужно изучать новые языки и инструменты — достаточно знать Solidity и стандартный стэк Ethereum.

11. Безопасность смарт-контрактов и роль EVM

Хотя EVM обеспечивает детерминированное выполнение и лимиты ресурсов, безопасность смарт-контрактов во многом зависит от разработчика. EVM не «понимает», соответствует ли логика контракта задуманной экономической модели: она просто исполняет байткод.

Типичные уязвимости смарт-контрактов:

  • Reentrancy-атаки (повторный вход в ту же функцию до завершения предыдущего вызова);
  • Переполнение/недополнение целых чисел (в старых версиях Solidity без встроенных проверок);
  • Неверный контроль доступа (отсутствие onlyOwner, скрытые бэкдоры);
  • Манипуляция оракулом (подмена или эксплуатация источников данных/цен);
  • Ошибки бизнес-логики (неверные формулы, неправильный порядок операций и т. д.).

Чтобы снизить риски, команды используют аудиты смарт-контрактов, формальную верификацию, стандартные библиотеки (например, OpenZeppelin), а также надёжные паттерны и лучшие практики разработки.

12. Будущее EVM: масштабирование и эволюция

Ethereum активно движется в сторону масштабирования и повышения эффективности. Это напрямую влияет на роль EVM.

12.1. L2-решения и роллапы

Всё больше вычислений переносится на Layer 2-решения (Arbitrum, Optimism, zkSync, Scroll и др.), многие из которых сохраняют совместимость с EVM или даже реализуют zkEVM — доказуемо корректное выполнение EVM с помощью технологий нулевого разглашения.

12.2. eWASM и возможная замена EVM

В течение нескольких лет в сообществе Ethereum обсуждается возможный переход от EVM к eWASM (Ethereum-варианту WebAssembly), который потенциально может:

  • быть быстрее и эффективнее;
  • поддерживать значительно больше языков программирования;
  • обеспечивать более гибкую модель исполнения.

Однако у EVM настолько большая экосистема, что полная и быстрая миграция маловероятна. Более реалистичны постепенная интеграция и гибридные модели.

13. Заключение

Ethereum Virtual Machine — это фундамент, на котором построена современная экосистема Ethereum, а также значительная часть мультичейн-ландшафта Web3. Она определяет, как выполняются смарт-контракты, как меняется состояние сети, как учитываются ресурсы и как обеспечивается детерминированное и безопасное выполнение.

Понимание принципов работы EVM критически важно для разработчиков смарт-контрактов, архитекторов DeFi-протоколов, аудиторов безопасности и всех, кто серьёзно работает с Ethereum или EVM-совместимыми цепочками. Знание стека, памяти, хранилища, газа, транзакций, типов аккаунтов и модели состояния позволяет писать более эффективный, безопасный и оптимизированный по газу код.

В ближайшие годы роль EVM вряд ли уменьшится. Напротив, благодаря роллапам, zkEVM-решениям и L2-инфраструктуре она может стать ещё более центральным элементом как общего стандарта для многих блокчейн-сетей, которые вместе формируют единую программируемую глобальную экономику.

Other news