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

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

Последнее редактирование: , 19 января 2024 г.

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

Сам протокол Ethereum существует исключительно с целью поддержания постоянной, непрерывной и неизменной работы этой специальной машины состояния. Это среда, в которой живут все аккаунты и смарт-контракты Ethereum. При любом заданном блоке в цепочке Ethereum есть одно и только одно «каноничное» состояние, и EVM — это то, определяет правила вычисления нового допустимого состояния от блока к блоку.

Прежде чем начать

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

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

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

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

Схема, показывающая состав EVM Источник адаптированной диаграммы: Ethereum EVM illustrated(opens in a new tab)

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

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

1Y(S, T)= S'

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

Состояние

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

Транзакции

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

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

Инструкции EVM

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

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

Однако контракты содержат хэш-дерево Меркла вида Patricia (в виде массива слов с адресацией по словам), связанное с аккаунтом и рассматриваемое как часть глобального состояния.

Скомпилированный байт-код умного контракта исполняется как последовательность машинных кодов EVM, таких как стандартные машинные операции XOR, AND, ADD, SUB, и т. д. В стековой машине EVM также есть и специальные блокчейновые опкоды, такие как ADDRESS, BALANCE, BLOCKHASH и т. д.

Схема, показывающая, где газ необходим для работы EVM Источник адаптированных диаграмм: Ethereum EVM illustrated(opens in a new tab)

Реализации EVM

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

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

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

Дополнительные ресурсы

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