Виртуальная машина Эфириума (EVM)
Виртуальная машина Эфириума (EVM) — это децентрализованная виртуальная среда, которая согласованно и безопасно выполняет код на всех узлах Эфириума. Узлы запускают 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).
От реестра к автомату состояний
Аналогия «распределенного реестра» часто используется для описания блокчейнов, таких как Биткоин, которые обеспечивают работу децентрализованной криптовалюты с использованием фундаментальных инструментов криптографии. Реестр ведет запись активности, которая должна соответствовать набору правил, определяющих, что можно и чего нельзя делать для изменения реестра. Например, адрес Биткоина не может потратить больше биткоинов, чем он получил ранее. Эти правила лежат в основе всех транзакций в Биткоине и многих других блокчейнах.
Хотя у Эфириума есть собственная нативная криптовалюта (эфир), которая следует почти тем же интуитивно понятным правилам, он также обеспечивает гораздо более мощную функцию: смарт-контракты. Для этой более сложной функции требуется более сложная аналогия. Вместо распределенного реестра Эфириум представляет собой распределенный автомат состояний (opens in a new tab). Состояние Эфириума — это большая структура данных, которая содержит не только все аккаунты и балансы, но и состояние машины, которое может меняться от блока к блоку в соответствии с заранее определенным набором правил и которое может выполнять произвольный машинный код. Конкретные правила изменения состояния от блока к блоку определяются EVM.
Диаграмма адаптирована из Иллюстрированного руководства по EVM Эфириума (opens in a new tab)
Функция перехода состояния Эфириума
EVM ведет себя как математическая функция: получая входные данные, она выдает детерминированный результат. Поэтому весьма полезно более формально описать Эфириум как имеющий функцию перехода состояния:
Y(S, T)= S'
Получая старое допустимое состояние (S) и новый набор допустимых транзакций (T), функция перехода состояния Эфириума Y(S, T) создает новое допустимое выходное состояние S'
Состояние
В контексте Эфириума состояние — это огромная структура данных, называемая модифицированным префиксным деревом Меркла-Патриции, которая хранит все аккаунты, связанные хешами и сводимые к единому корневому хешу, хранящемуся в блокчейне.
Транзакции
Транзакции — это криптографически подписанные инструкции от аккаунтов. Существует два типа транзакций: те, которые приводят к вызовам сообщений, и те, которые приводят к созданию контрактов.
Создание контракта приводит к созданию нового контрактного аккаунта, содержащего скомпилированный байт-код смарт-контракта. Всякий раз, когда другой аккаунт выполняет вызов сообщения к этому контракту, он выполняет свой байт-код.
Инструкции 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 Эфириума (opens in a new tab)
Реализации EVM
Все реализации EVM должны соответствовать спецификации, описанной в желтой книге Эфириума.
За десятилетнюю историю Эфириума EVM претерпела несколько изменений, и существует несколько реализаций EVM на различных языках программирования.
Клиенты исполнения Эфириума включают реализацию EVM. Кроме того, существует множество автономных реализаций, в том числе:
- Py-EVM (opens in a new tab) — Python
- evmone (opens in a new tab) — C++
- ethereumjs-vm (opens in a new tab) — JavaScript
- revm (opens in a new tab) — Rust
Дополнительная литература
- Желтая книга Эфириума (opens in a new tab)
- Jellopaper или KEVM: семантика EVM в K (opens in a new tab)
- Бежевая книга (The Beigepaper) (opens in a new tab)
- Коды операций виртуальной машины Эфириума (opens in a new tab)
- Интерактивный справочник по кодам операций виртуальной машины Эфириума (opens in a new tab)
- Краткое введение в документации Solidity (opens in a new tab)
- Освоение Эфириума — Виртуальная машина Эфириума (opens in a new tab)
Связанные темы
Руководства: Виртуальная машина Эфириума (EVM) / Коды операций в Эфириуме
- Понимание спецификаций EVM в желтой книге — пошаговое руководство по формальной спецификации EVM из желтой книги Эфириума.
- Обратная разработка контракта — как выполнить обратную разработку скомпилированного смарт-контракта с использованием кодов операций EVM.