Віртуальна машина 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).
Від реєстру до скінченного автомату
Аналогія з "розподіленою книгою обліку" часто використовується для опису блокчейнів (наприклад, Bitcoin), що роблять можливим використання децентралізованої валюти за допомогою ключових інструментів криптографії. У реєстрі ведеться облік діяльності, який повинен відповідати набору правил, які регулюють, що можна і що не можна робити щодо внесення змін до реєстру. Наприклад, адреса Bitcoin не може витратити більше одиниць Bitcoin, ніж отримала раніше. Ці правила лежать в основі всіх транзакцій Bitcoin і багатьох інших блокчейнів.
Хоча Ethereum має власну криптовалюту (етер), яка функціонує майже за тими ж інтуїтивно зрозумілими правилами, він також підтримує набагато потужнішу функцію: смарт-контракти. Щоб описати цю функцію, потрібна складніша аналогія. Замість розподіленого реєстру Ethereum є розподіленим кінцевим автоматом (opens in a new tab). Стан Ethereum — це велика структура даних, яка містить не лише всі облікові записи та баланси, а й стан машини, який може змінюватися від блоку до блоку відповідно до попередньо визначеного набору правил і може виконувати довільний машинний код. Правила зміни стану в блоках визначаються Віртуальною машиною Ethereum.
Діаграму адаптовано з Ethereum EVM illustrated (opens in a new tab)
Функція переходу стану Ethereum
Віртуальна машина Ethereum функціонує як математична функція – видає детермінований результат на основі введених даних. Тому досить корисно більш формально описати 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, які надають доступ до тимчасового сховища.
Діаграми адаптовано з Ethereum EVM illustrated (opens in a new tab)
Реалізації EVM
Усі налаштування Віртуальної машини Ethereum повинні відповідати специфікації, описаній у Довідковому журналі Ethereum.
За десятирічну історію Ethereum, EVM зазнала кількох переглядів, і існує кілька реалізацій EVM різними мовами програмування.
Клієнти-виконавці Ethereum містять реалізацію 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
Додаткові матеріали
- Жовта книга Ethereum (opens in a new tab)
- Jellopaper, або KEVM: семантика EVM в K (opens in a new tab)
- Бежева книга (opens in a new tab)
- Коди операцій віртуальної машини Ethereum (opens in a new tab)
- Інтерактивний довідник з кодами операцій віртуальної машини Ethereum (opens in a new tab)
- Короткий вступ у документації Solidity (opens in a new tab)
- Mastering Ethereum - Віртуальна машина Ethereum (opens in a new tab)