
Опкоди — це мінімальний набір команд, які розуміє і виконує віртуальна машина. У блокчейні смартконтракти насправді виконуються як послідовності опкодів на ланцюгу. Опкоди — це інструкції для комп’ютерів, які крок за кроком керують діями вузлів.
Розробники створюють код смартконтрактів мовами Solidity або Vyper, але цей код не запускається безпосередньо на ланцюгу. Його компілюють у байткод, що складається з окремих опкодів. Вузли виконують ці опкоди для обчислень, читання і запису даних, а також повернення результатів.
У Ethereum Virtual Machine (EVM) опкоди виконуються послідовно і використовують три основні області: стек, пам’ять і сховище. Стек діє як стопка тарілок (останній доданий — перший витягується), пам’ять — це тимчасова робоча зона, а сховище — довгостроковий реєстр.
Кожен опкод може брати значення зі стеку, читати чи записувати у пам’ять або сховище, змінювати хід виконання (наприклад, переходи чи повернення). Зі змінами у протоколі набір опкодів оновлюється. Наприклад, PUSH0 додали у EIP‑3855 (джерело: EIP‑3855, листопад 2022 року), MCOPY — у оновленні Cancun через EIP‑5656 (джерело: EIP‑5656, березень 2024 року).
Кожен опкод має свою вартість gas, і загальна сума визначає плату за транзакцію. Арифметичні опкоди недорогі, а ті, що записують у сховище, коштують дорожче через вплив на постійний стан блокчейну.
Звичайний переказ ETH має базову вартість gas 21 000 (джерело: Ethereum Yellow Paper і реалізації клієнтів mainnet, актуально у 2025 році). Операція SSTORE може споживати приблизно 20 000 gas залежно від того, це перший запис чи оновлення.
Якщо ви виводите ETH з Gate на складну адресу контракту — очікуйте вищу оцінку комісії майнера, бо виконання контракту потребує більше і дорожчих опкодів. Складні виклики частіше призводять до “out of gas” (недостатньо gas) — комісія може бути витрачена без завершення дії, тому правильно встановлюйте ліміт gas.
Опкоди — це справжній виконуваний вигляд високорівневого коду. Компілятори перетворюють функції Solidity у послідовності опкодів; і розгортання, і виклик контракту виконують ці інструкції.
Наприклад, типовий переказ ERC‑20 зазвичай містить:
Опкоди поділяють за функціями:
Комбінації типів формують бізнес-логіку; вартість залежить від складу опкодів і обсягу даних.
Популярні інструменти дозволяють декомпілювати код контракту й шлях транзакції до опкодів та бачити витрати на кожному етапі.
Крок 1: Зберіть контракт у Remix, використайте відлагодження для тестової транзакції й перегляду виконання опкодів зі змінами стеку/пам’яті.
Крок 2: Зверніться до evm.codes для визначень опкодів і правил gas (джерело: evm.codes, публічний ресурс із постійним оновленням) для розуміння поведінки інструкцій.
Крок 3: На Etherscan чи Tenderly перегляньте реальні стеки викликів і події транзакцій. Використайте дизасемблер ethervm.io для розбору байткоду на опкоди й пошуку дорогих операцій.
Крок 4: Відтворіть ключові шляхи на тестнетах, змінюйте параметри й шаблони коду, щоб перевірити зниження споживання gas перед переходом у mainnet.
Мета — зменшити кількість дорогих опкодів або застосовувати ефективніші комбінації інструкцій для того ж результату.
Крок 1: Мінімізуйте записи SSTORE — групуйте оновлення, де можливо; наприклад, об’єднуйте зміни й записуйте у сховище один раз після пакетного розрахунку замість запису при кожній зміні.
Крок 2: Використовуйте події (LOG) для зовнішнього отримання даних замість зберігання всієї інформації; журнали не можна читати у контрактах — вони лише для індексації поза ланцюгом.
Крок 3: Повторно використовуйте проміжні результати, щоб уникати зайвих обчислень і копіювання; ефективно застосовуйте MCOPY замість багаторазових циклів MLOAD/MSTORE.
Крок 4: Перевіряйте стан перед зовнішніми викликами (CALL), щоб зменшити неефективні виклики; складну логіку переносіть поза ланцюг або використовуйте пакетні операції для зниження кількості опкодів на ланцюгу.
Крок 5: Слідкуйте за оновленнями протоколу й оптимізаціями компілятора — нові версії компілятора часто створюють ефективніші за gas послідовності опкодів.
Опкоди не є універсальними для всіх блокчейнів — кожен публічний ланцюг має свою віртуальну машину і набір інструкцій.
EVM Ethereum використовує інструкції на основі стеку з акцентом на доступ до сховища й міжконтрактні виклики. Script Bitcoin — це мова умовних платежів; його опкоди зосереджені на операціях зі стеком і перевірці підписів (наприклад, OP_CHECKSIG підтверджує платежі). Інші екосистеми застосовують WASM або BPF (наприклад, деякі rollups, Polkadot, Solana), що працюють із загальнішими моделями інструкцій для контрактів — у них інші правила підрахунку вартості й межі безпеки.
Тому однакова бізнес-логіка викликає різні опкоди й структури комісій у різних ланцюгах; перенесення контрактів вимагає переоцінки шляхів виконання і витрат.
Часте використання дорогих опкодів підвищує комісію за транзакції і ризик “out of gas”. Непродумані опкоди для зовнішніх викликів (наприклад, CALL) можуть створити ризик реентрантності, що призведе до ненавмисного виведення коштів.
У роботі зі складними контрактами чи при виведенні на них коштів перевіряйте шляхи виконання і оцінки gas за допомогою тестнетів чи симуляторів. Якщо Gate показує високу оцінку комісії майнера, це означає, що буде виконано більше або дорожчих опкодів. Завжди встановлюйте розумний ліміт gas і ретельно оцінюйте ризики невдачі.
Опкоди — це базові інструкції, за якими смартконтракти виконуються на ланцюгу; вони визначають кроки виконання і вартість. Розуміння стеку, пам’яті, сховища EVM і поведінки типових опкодів необхідне для розробки, аудиту безпеки та контролю витрат.
Рекомендований шлях вивчення:
Розуміння опкодів дає глибше уявлення про основи блокчейну — це критично для аудиту безпеки смартконтрактів. Аналіз опкодів дозволяє виявити вразливості, пояснити реальне споживання gas і оптимізувати роботу контракту. Ці знання потрібні розробникам, аудиторам і досвідченим інвесторам.
Декомпіляція опкодів дозволяє перетворити розгорнутий код смартконтракту у більш зрозумілий вигляд — це корисно для перевірки реальної логіки контракту. Це важливо для перегляду закритих проектів, пошуку шкідливого коду чи аналізу реалізацій інших контрактів. Популярні інструменти: Decompile на Etherscan або локальні дизасемблери.
Почніть з офіційної документації Ethereum щодо інструкцій EVM, щоб зрозуміти базові опкоди PUSH, ADD, STORE. Далі використовуйте онлайн-декомпілятори (наприклад, Etherscan), щоб переглядати реальні опкоди контрактів і порівнювати відповідність між високорівневим кодом і послідовностями опкодів. Далі створіть прості контракти, щоб зрозуміти, як опкоди реалізують функціональність.
Для звичайних трейдерів глибокі знання опкодів не обов’язкові — але розуміння основ допомагає розпізнавати ризиковані контракти. Аналіз опкодів дозволяє виявити приховану логіку чи бекдори/вразливості, тож ви впевненіше працюєте з новими проектами. Використовуйте інструменти безпеки Gate для додаткової оцінки ризиків.
Так — Solidity і Vyper компілюються у байткод EVM (опкоди), але послідовності можуть відрізнятися. Однакова функціональність, написана різними мовами чи версіями компілятора, дає різні набори опкодів і різне споживання gas. Тому вибір інструментів і налаштувань компілятора оптимізує роботу контракту.


