Перейти к основному содержанию
Change page

Виртуальная машина Ethereum (EVM)

Последнее обновление страницы: 25 февраля 2026 г.

Виртуальная машина Ethereum (EVM) — это децентрализованная виртуальная среда, которая стабильно и безопасно исполняет код на всех узлах Ethereum. Узлы запускают EVM для выполнения смарт-контрактов, используя "газ" для измерения вычислительных усилий, необходимых для операций, обеспечивая эффективное распределение ресурсов и безопасность сети.

Предварительные условия

Для понимания EVM необходимо базовое знакомство с общепринятой терминологией в информатике, такой как байтыopens in a new tab, памятьopens in a new tab и стекopens in a new tab. Также было бы полезно ознакомиться с такими понятиями криптографии и блокчейна, как хеш-функцииopens in a new tab и дерево Мерклаopens in a new tab.

От реестра к машине состояний

Аналогия с «распределенным реестром» часто используется для описания таких блокчейнов, как Биткойн, которые позволяют децентрализовать валюту с использованием фундаментальных инструментов криптографии. Реестр содержит запись о деятельности, которая должна соответствовать набору правил, регулирующих, что кто-то может и не может сделать для изменения реестра. Например, биткойн-адрес не может потратить больше биткойнов, чем получил ранее. Эти правила лежат в основе всех транзакций во многих блокчейнах, включая Биткойн.

Хотя у Ethereum есть собственная криптовалюта (эфир), которая следует почти тем же интуитивно понятным правилам, он также предоставляет гораздо более мощную функцию: смарт-контракты. Для этой более сложной функции требуется более сложная аналогия. Вместо распределенного реестра Ethereum представляет собой распределенную машину состоянийopens in a new tab. Состояние Ethereum — это большая структура данных, в которой хранятся не только все аккаунты и балансы, но и состояние машины, которое может изменяться от блока к блоку в соответствии с заранее определенным набором правил и которое может выполнять произвольный машинный код. Конкретные правила изменения состояния от блока к блоку определяются EVM.

Схема, показывающая устройство EVM Схема адаптирована из Ethereum EVM illustratedopens in a new tab

Функция перехода состояний Ethereum

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

1Y(S, T)= S'

Для старого валидного состояния (S) и нового набора валидных транзакций (T) функция перехода состояний Ethereum Y(S, T) создает новое валидное выходное состояние S'

Состояние

В контексте Ethereum состояние — это огромная структура данных, называемая модифицированным деревом Меркла-Патриции, в которой все аккаунты связаны хешами и сводятся к одному корневому хешу, хранящемуся в блокчейне.

Транзакции

Транзакции — это криптографически подписанные инструкции от аккаунтов. Есть два типа транзакций: те, которые приводят к вызовам сообщений, и те, которые приводят к созданию контракта.

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

Инструкции EVM

EVM выполняется как стековая машинаopens in a new tab с глубиной стека в 1024 элемента. Каждый элемент стека — это 256-битное слово, выбранное для удобства использования в 256-битной криптографии (например, хэши Keccak-256 или подписи secp256k1).

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

Временное хранилище

Временное хранилище — это хранилище типа «ключ — значение» для каждой транзакции, доступ к которому осуществляется с помощью опкодов TSTORE и TLOAD. Оно сохраняется во всех внутренних вызовах в рамках одной транзакции, но очищается в конце транзакции. В отличие от памяти, временное хранилище моделируется как часть состояния EVM, а не фрейма исполнения, однако оно не фиксируется в глобальном состоянии. Временное хранилище обеспечивает эффективный с точки зрения расхода газа временный совместный доступ к состоянию между внутренними вызовами во время транзакции.

Хранилище

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

Машинный код

Скомпилированный байт-код смарт-контракта исполняется как набор опкодов EVM, которые выполняют стандартные стековые операции, такие как XOR, AND, ADD, SUB и т. д. EVM также реализует ряд специфичных для блокчейна стековых операций, таких как ADDRESS, BALANCE, BLOCKHASH и т. д. Набор опкодов также включает TSTORE и TLOAD, которые предоставляют доступ к временному хранилищу.

Диаграмма, показывающая, где требуется газ для операций EVM Схемы адаптированы из Ethereum EVM illustratedopens in a new tab

Реализации EVM

Все реализации EVM должны соответствовать спецификации, описанной в Желтой книге Ethereum.

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

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

Дополнительные материалы

Была ли эта статья полезной?