Перейти до основного контенту
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).

Від реєстру до скінченного автомату

Аналогія з "розподіленою книгою обліку" часто використовується для опису блокчейнів (наприклад, Bitcoin), що роблять можливим використання децентралізованої валюти за допомогою ключових інструментів криптографії. У реєстрі ведеться облік діяльності, який повинен відповідати набору правил, які регулюють, що можна і що не можна робити щодо внесення змін до реєстру. Наприклад, адреса Bitcoin не може витратити більше одиниць Bitcoin, ніж отримала раніше. Ці правила лежать в основі всіх транзакцій Bitcoin і багатьох інших блокчейнів.

Хоча Ethereum має власну криптовалюту (етер), яка функціонує майже за тими ж інтуїтивно зрозумілими правилами, він також підтримує набагато потужнішу функцію: смарт-контракти. Щоб описати цю функцію, потрібна складніша аналогія. Замість розподіленого реєстру Ethereum є розподіленим кінцевим автоматом (opens in a new tab). Стан Ethereum — це велика структура даних, яка містить не лише всі облікові записи та баланси, а й стан машини, який може змінюватися від блоку до блоку відповідно до попередньо визначеного набору правил і може виконувати довільний машинний код. Правила зміни стану в блоках визначаються Віртуальною машиною Ethereum.

Діаграма, що показує будову EVM Діаграму адаптовано з 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, які надають доступ до тимчасового сховища.

Діаграма, що показує, де потрібен газ для операцій EVM Діаграми адаптовано з Ethereum EVM illustrated (opens in a new tab)

Реалізації EVM

Усі налаштування Віртуальної машини Ethereum повинні відповідати специфікації, описаній у Довідковому журналі Ethereum.

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

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

Додаткові матеріали

Чи була ця стаття корисною?