Віртуальна машина Етеріуму (EVM)
Віртуальна машина Етеріуму (EVM) — це децентралізоване віртуальне середовище, яке узгоджено та безпечно виконує код на всіх вузлах Етеріуму. Вузли запускають EVM для виконання смарт-контрактів, використовуючи «газ» для вимірювання обчислювальних зусиль, необхідних для операцій, що забезпечує ефективний розподіл ресурсів і безпеку мережі.
Передумови
Для розуміння EVM необхідне базове знайомство із загальною термінологією інформатики, такою як байти (відкривається в новій вкладці), пам'ять (відкривається в новій вкладці) та стек (відкривається в новій вкладці). Також буде корисно орієнтуватися в концепціях криптографії та блокчейну, таких як хеш-функції (відкривається в новій вкладці) та дерево Меркла (відкривається в новій вкладці).
Від реєстру до автомата станів
Аналогія «розподіленого реєстру» часто використовується для опису блокчейнів, таких як Біткоїн, які забезпечують роботу децентралізованої валюти за допомогою фундаментальних інструментів криптографії. Реєстр зберігає записи про активність, які повинні відповідати набору правил, що визначають, що можна, а що не можна робити для зміни реєстру. Наприклад, адреса Біткоїна не може витратити більше Біткоїнів, ніж вона отримала раніше. Ці правила лежать в основі всіх транзакцій у Біткоїні та багатьох інших блокчейнах.
Хоча Етеріум має власну нативну криптовалюту (етер), яка дотримується майже тих самих інтуїтивно зрозумілих правил, він також підтримує набагато потужнішу функцію: смарт-контракти. Для цієї складнішої функції потрібна більш витончена аналогія. Замість розподіленого реєстру Етеріум є розподіленою машиною станів (відкривається в новій вкладці). Стан Етеріуму — це велика структура даних, яка містить не лише всі акаунти та баланси, але й стан машини, який може змінюватися від блоку до блоку відповідно до заздалегідь визначеного набору правил і який може виконувати довільний машинний код. Конкретні правила зміни стану від блоку до блоку визначаються EVM.
Діаграму адаптовано з Ethereum EVM illustrated (відкривається в новій вкладці)
Функція переходу стану Етеріуму
EVM поводиться як математична функція: отримуючи вхідні дані, вона видає детермінований результат. Тому досить корисно більш формально описати Етеріум як такий, що має функцію переходу стану:
Y(S, T)= S'
Отримуючи старий дійсний стан (S) та новий набір дійсних транзакцій (T), функція переходу стану Етеріуму Y(S, T) створює новий дійсний вихідний стан S'
Стан
У контексті Етеріуму стан — це величезна структура даних, яка називається модифікованим деревом Меркла-Патрісії, що зберігає всі акаунти, пов'язані хешами, і зводиться до єдиного кореневого хеша, який зберігається в блокчейні.
Транзакції
Транзакції — це криптографічно підписані інструкції від акаунтів. Існує два типи транзакцій: ті, що призводять до викликів повідомлень, і ті, що призводять до створення контракту.
Створення контракту призводить до створення нового акаунта контракту, що містить скомпільований байт-код смарт-контракту. Щоразу, коли інший акаунт здійснює виклик повідомлення до цього контракту, він виконує його байт-код.
Інструкції EVM
EVM виконується як стекова машина (відкривається в новій вкладці) з глибиною 1024 елементи. Кожен елемент — це 256-бітне слово, яке було обрано для зручності використання з 256-бітною криптографією (наприклад, хешами Keccak-256 або підписами secp256k1).
Під час виконання EVM підтримує тимчасову пам'ять (як масив байтів з адресацією за словами), яка не зберігається між транзакціями.
Тимчасове сховище
Тимчасове сховище — це сховище пар «ключ-значення» для кожної транзакції, доступ до якого здійснюється за допомогою опкодів TSTORE та TLOAD. Воно зберігається під час усіх внутрішніх викликів у межах однієї транзакції, але очищається в кінці транзакції. На відміну від пам'яті, тимчасове сховище моделюється як частина стану EVM, а не фрейму виконання, проте воно не фіксується в глобальному стані. Тимчасове сховище забезпечує ефективний з точки зору газу обмін тимчасовим станом між внутрішніми викликами під час транзакції.
Сховище
Контракти містять префіксне дерево сховища Меркла-Патрісії (як масив слів з адресацією за словами), пов'язане з відповідним акаунтом і є частиною глобального стану. Це постійне сховище відрізняється від тимчасового сховища, яке доступне лише протягом однієї транзакції та не є частиною префіксного дерева постійного сховища акаунта.
Опкоди
Скомпільований байт-код смарт-контракту виконується як низка опкодів EVM, які виконують стандартні стекові операції, такі як XOR, AND, ADD, SUB тощо. EVM також реалізує низку специфічних для блокчейну стекових операцій, таких як ADDRESS, BALANCE, BLOCKHASH тощо. Набір опкодів також включає TSTORE та TLOAD, які надають доступ до тимчасового сховища.
Діаграми адаптовано з Ethereum EVM illustrated (відкривається в новій вкладці)
Реалізації EVM
Усі реалізації EVM повинні відповідати специфікації, описаній у Жовтій книзі Етеріуму.
За десятирічну історію Етеріуму EVM зазнала кількох переглядів, і існує кілька реалізацій EVM різними мовами програмування.
Клієнти виконання Етеріуму включають реалізацію EVM. Крім того, існує безліч автономних реалізацій, зокрема:
- Py-EVM (відкривається в новій вкладці) — Python
- evmone (відкривається в новій вкладці) — C++
- ethereumjs-vm (відкривається в новій вкладці) — JavaScript
- revm (відкривається в новій вкладці) — Rust
Подальше читання
- Жовта книга Етеріуму (відкривається в новій вкладці)
- Jellopaper або KEVM: Семантика EVM у K (відкривається в новій вкладці)
- Бежева книга (The Beigepaper) (відкривається в новій вкладці)
- Опкоди віртуальної машини Етеріуму (відкривається в новій вкладці)
- Інтерактивний довідник з опкодів віртуальної машини Етеріуму (відкривається в новій вкладці)
- Короткий вступ у документації Solidity (відкривається в новій вкладці)
- Опанування Етеріуму — Віртуальна машина Етеріуму (відкривається в новій вкладці)
Пов'язані теми
Посібники: Віртуальна машина Етеріуму (EVM) / Опкоди в Етеріумі
- Розуміння специфікацій EVM у Жовтій книзі — Покроковий розбір формальної специфікації EVM із Жовтої книги Етеріуму.
- Зворотна розробка контракту — Як здійснити зворотну розробку скомпільованого смарт-контракту за допомогою опкодів EVM.