EVM в Ethereum: как виртуальная машина исполняет смарт-контракты

by Михаил Любомиров

EVM в Ethereum: как виртуальная машина исполняет смарт-контракты

Представьте, что вы отправляете деньги другу - но не через банк, не через PayPal, а через код, который работает сам по себе, без посредников. Этот код - смарт-контракт. А то, что заставляет его работать, - Ethereum Virtual Machine, или EVM. Это не физический компьютер, а программа, которая запущена на тысячах машин по всему миру. И именно она делает Ethereum не просто блокчейном с токенами, а платформой для децентрализованных приложений.

Что такое EVM и зачем она нужна

EVM - это изолированная среда, где исполняется код смарт-контрактов. Она не зависит от операционной системы, процессора или местоположения компьютера. Важно: на каждом узле сети Ethereum EVM работает одинаково. Если один узел считает, что транзакция прошла, а другой - что нет, сеть не сработает. Поэтому EVM строго детерминирована: при одних и тех же входных данных она всегда выдаёт один и тот же результат. Это основа доверия в блокчейне.

До EVM блокчейны, вроде Bitcoin, могли только фиксировать переводы. Ethereum изменило это. Виталик Бутerin и команда создали EVM, чтобы добавить возможность выполнять произвольный код. Теперь можно писать не просто «переведи 1 ETH», а «если к 15 марта 2026 года температура в Казани опустится ниже -25°C, верни деньги». И это сработает - если код написан правильно.

Как EVM работает внутри: стек, память, хранилище

EVM - стековая машина. Это значит, что все вычисления происходят через стек - узкую, но мощную систему. Представьте стопку тарелок: вы кладёте одну сверху, потом другую, а когда нужно что-то взять - снимаете верхнюю. В EVM так же: операции берут данные из стека, работают с ними и кладут результат обратно.

У EVM три типа памяти:

  • Стек - ограниченный до 1024 элементов. Здесь хранятся временные значения: числа, адреса, результаты вычислений.
  • Память - динамическая. Её можно расширять, но она существует только во время выполнения транзакции. После завершения - исчезает.
  • Хранилище - постоянное. Это база данных контракта, которая сохраняется в блокчейне. Если вы записали туда сумму, она останется там навсегда - пока не изменится новой транзакцией.

Например, вы вызываете контракт, который переводит 0.5 ETH. EVM:

  1. Помещает в стек адрес получателя и сумму.
  2. Вызывает опкод CALLVALUE - проверяет, сколько ETH передано.
  3. Вызывает SSTORE - записывает изменение баланса в хранилище.
  4. Вызывает CALL - передаёт ETH другому контракту или адресу.

Каждая из этих операций стоит газа. Чем сложнее - тем дороже.

Газ: как EVM не даёт сети сломаться

Почему бы не дать контрактам выполнять всё, что хотят? Потому что злой код может зациклиться и забить всю сеть. EVM решает это с помощью газа - внутренней валюты вычислений.

Каждый опкод имеет фиксированную стоимость в газе. Например:

  • ADD (сложение) - 3 газа
  • MUL (умножение) - 5 газов
  • SSTORE (запись в хранилище) - 20 000 газов
  • SHA3 (хеширование) - 30 газов

Когда вы вызываете смарт-контракт, вы указываете лимит газа - максимальное количество, которое готовы заплатить. Если код исчерпает лимит - выполнение останавливается, и все изменения отменяются. Но газ, который уже потрачен, не возвращается. Это как оплатить билет в кино, но выйти до середины фильма - деньги не вернут, но и фильм не досмотрят.

На декабрь 2023 года средняя цена газа была 20-50 gwei. 1 gwei = 0.000000001 ETH. То есть за простую транзакцию вы платили около 0.000001 ETH - меньше копейки. Но если контракт делает 1000 записей в хранилище - это 20 млн газа. При цене 30 gwei - это 0.6 ETH, или около 1500 рублей.

Рука пишет код Solidity, который превращается в стеки, память и хранилище EVM на фоне городского пейзажа.

Как пишут смарт-контракты: Solidity и Vyper

Никто не пишет код на байткоде EVM. Это как писать программы на нулях и единицах. Вместо этого используются высокоуровневые языки: Solidity и Vyper.

Solidity - лидер. По данным 2023 года, около 85% всех деплоенных контрактов написаны на нём. Он похож на JavaScript и C++, но с особенностями для блокчейна. Пример простого контракта:

pragma solidity ^0.8.0;

contract SimpleTransfer {
    address public owner;
    
    constructor() {
        owner = msg.sender;
    }
    
    function sendEther(address payable to) public payable {
        require(msg.value > 0, "Нужно отправить ETH");
        to.transfer(msg.value);
    }
}

Этот код - не EVM. Он компилируется в байткод, который потом исполняется EVM. Компилятор превращает to.transfer(msg.value) в набор опкодов: CALLVALUE, CALL, POP и другие.

Vyper - более простой и безопасный, но менее гибкий. Он не позволяет сложные конструкции, зато снижает риск ошибок. Многие проекты, связанные с финансами, выбирают Vyper, чтобы избежать уязвимостей.

Ограничения EVM: почему контракты не могут «самостоятельно»

EVM - изолированная среда. Она не может:

  • Подключиться к интернету
  • Читать файлы с диска
  • Выполнять код без транзакции

Это не недостаток - это фича. Если бы контракт мог обращаться к внешним API, он мог бы получить разные данные на разных узлах - и сеть потеряла бы консенсус.

Чтобы получить данные извне - например, курс биткоина или погоду в Казани - используют оракулы. Chainlink - самый известный. Это специальные смарт-контракты, которые получают данные из надёжных источников, хешируют их и записывают в блокчейн. Только после этого основной контракт может их прочитать.

Ещё одно ограничение - лимит газа на блок. В 2023 году он составлял 30 млн газа. Это значит, что за один блок можно выполнить не больше 1500 сложных операций. Если контракт требует 50 млн газа - он не войдёт в блок. Приходится разбивать логику на части.

Совместимость EVM: почему почти все блокчейны её копируют

EVM - это не только Ethereum. Это стандарт. В 2023 году 72% всех dApps работали на EVM-совместимых сетях. Polygon, BNB Chain, Arbitrum, Optimism - все они используют ту же EVM. Это значит: если вы написали контракт на Ethereum, его можно запустить на Polygon без изменений.

Почему это важно? Потому что разработчики не хотят учить десятки разных языков и сред. EVM - единый язык для децентрализованных приложений. Это как Android: если вы написали приложение для Android, оно работает на Samsung, Xiaomi, OnePlus - и на всех устройствах с той же архитектурой.

Сейчас существует более 100 EVM-совместимых блокчейнов. Они различаются скоростью, стоимостью и уровнем децентрализации, но все они исполняют один и тот же код. Это создаёт огромную экосистему: вы можете использовать MetaMask, чтобы переключаться между сетями, а ваш кошелёк и контракты остаются теми же.

Транзакция ETH проходит через компоненты EVM, газовый счётчик растёт, оракул Chainlink доставляет данные в стиле кибер-самурая.

Будущее EVM: что меняется в 2024-2026

EVM не стоит на месте. В 2024 году планируется внедрение Verkle Trees - технологии, которая сократит размер состояния сети в 10 раз. Это ускорит синхронизацию узлов и снизит требования к оборудованию.

Также в работе - EOF (EVM Object Format). Это новый формат байткода, который позволит контрактам быть более компактными, безопасными и поддерживать новые функции, например, встроенные функции хеширования или шифрования. Вместо того чтобы вызывать SHA3 через несколько опкодов, контракт сможет сделать это одной командой.

По прогнозам, к 2026 году производительность EVM вырастет в 5 раз. Это не значит, что она станет быстрее, чем MySQL. Но она станет достаточно быстрой для сложных игр, соцсетей и даже бирж. Основной путь - оптимизация газа, аппаратное ускорение и переход на более эффективные алгоритмы.

Однако риски остаются. Как в 2016 году с The DAO, когда уязвимость в коде привела к краже 60 млн ETH. Тогда сеть пришлось хардфоркнуть. Сегодня аудит кода - это обязательная часть разработки. Инструменты вроде Slither и MythX автоматически ищут уязвимости в Solidity-коде до деплоя.

Как начать работать с EVM

Если вы хотите писать смарт-контракты:

  1. Установите Remix IDE - онлайн-редактор, где можно писать, компилировать и тестировать код без установки софта.
  2. Изучите Solidity через CryptoZombies - бесплатный интерактивный курс. Среднее время до первого рабочего контракта - 4-6 недель.
  3. Подключите MetaMask - кошелёк, который позволяет взаимодействовать с блокчейном из браузера.
  4. Попробуйте развернуть контракт на Ropsten или Goerli - тестовые сети с бесплатными ETH.
  5. Используйте Hardhat или Truffle для тестирования и деплоя на реальную сеть.

Самая частая ошибка новичков - недооценивать газ. Транзакция может не пройти, даже если вы отправили ETH. Всегда проверяйте текущую цену газа через EthGasStation или Etherscan. И никогда не отправляйте больше газа, чем нужно - это просто сожжёте деньги.

Зачем это всё нужно

EVM - это не про технические детали. Это про то, что вы больше не зависите от банков, от корпораций, от посредников. Вы можете создать систему, которая работает сама, без людей. Доверяйте коду, а не людям. Это революция.

Когда вы отправляете деньги через EVM - вы не просите кого-то перевести. Вы запускаете программу, которая сама проверяет условия, сама переводит, сама записывает. И никто не может остановить это. Ни банк. Ни правительство. Ни хакер.

Это и есть суть Ethereum. EVM - его сердце. И она работает. Надёжно. Без сбоев. С 2015 года.

Что такое EVM в Ethereum?

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

Как EVM исполняет смарт-контракты?

Смарт-контракт сначала компилируется в байткод из языка вроде Solidity. EVM загружает этот байткод и выполняет его пошагово, используя стек, память и хранилище. Каждая операция - сложение, запись, вызов другого контракта - оплачивается газом. Код выполняется детерминированно: на всех узлах результат одинаков, что обеспечивает консенсус сети.

Почему нужен газ?

Газ - это внутренняя единица измерения вычислительных ресурсов. Он предотвращает зацикливание и чрезмерную нагрузку на сеть. Каждая операция в EVM стоит определённое количество газа. Если лимит исчерпан - выполнение останавливается, и транзакция отменяется. Плата за газ оплачивается пользователем, инициировавшим транзакцию, и идёт в вознаграждение валидаторам.

Можно ли напрямую обращаться к интернету из смарт-контракта?

Нет. EVM изолирована от внешнего мира. Контракт не может читать веб-страницы, API или файлы. Для получения внешних данных используются оракулы - специальные смарт-контракты, которые получают данные из надёжных источников и записывают их в блокчейн. Пример - Chainlink. Без оракулов нельзя, например, запустить контракт, который платит, если погода в Казани станет ниже -25°C.

Почему все блокчейны копируют EVM?

Потому что EVM - это проверенный, стабильный и открытый стандарт. Разработчики не хотят учить десятки разных языков и сред. Если контракт написан для Ethereum, его можно запустить на Polygon, BNB Chain, Arbitrum и других - без изменений. Это создаёт единую экосистему с миллионами пользователей и тысячами приложений, работающих на одном и том же фундаменте.

Какие языки используются для написания смарт-контрактов?

Основные языки - Solidity и Vyper. Solidity - самый популярный (85% контрактов), он похож на JavaScript и C++. Vyper - более простой и безопасный, но менее гибкий. Оба компилируются в байткод EVM. Для разработки используются инструменты вроде Remix, Hardhat и Truffle.

Сегодня EVM - это не просто технология. Это инфраструктура будущего. Она уже работает. И она не остановится.

Михаил Любомиров

Михаил Любомиров

Author

Я продуктовый аналитик в финтех-стартапе и по вечерам пишу статьи о криптовалютах. Исследую новые решения, делюсь практическими заметками и объясняю риски простым языком.

Comments
  1. Vladimir Calado

    Vladimir Calado, January 28, 2026

    Знаете, когда я впервые понял, что EVM - это как некий цифровой монастырь, где каждый код живёт по строгим законам, но при этом не знает ни страха, ни жадности, ни предвзятости - я почувствовал, что это не просто технология, а философия. Она не требует веры в людей, она требует веры в логику. И это бесценно. Мы привыкли, что всё должно быть посредством кого-то: банк, суд, правительство. А тут - просто код, который делает то, что написано. Никто не может его подкупить. Никто не может его остановить. Даже если ты - миллиардер, а он - незнакомец из Казани, который написал контракт про погоду. Это не просто децентрализация. Это справедливость, запрограммированная в байткоде.

    И да, я знаю, что газ дорогой. Но если ты понимаешь, за что платишь - это не трата. Это инвестиция в свободу.

    Я не программист. Я просто человек, который хочет жить в мире, где правила одинаковы для всех. И EVM - это ближайшее к этому, что у нас есть.

    Спасибо за пост. Он напомнил мне, почему я вообще начал в это верить.

  2. maria smoleva

    maria smoleva, January 29, 2026

    Ого, так красиво объяснили! 😊 Я вообще не шарю в технике, но теперь поняла, что EVM - это как волшебный котёл, который сам варит суп, если ты ему правильно написал рецепт. И не надо никого звать, чтобы помешать - он сам всё сделает. Мне нравится, что это работает без посредников. Даже если я просто хочу перевести 0.1 ETH подруге на день рождения - она получит, и никто не сможет сказать «нет».

    А газ - это как бензин для этого котла, да? 😄 Спасибо, что всё так понятно написали!

  3. Геннадий Кроль

    Геннадий Кроль, January 30, 2026

    Согласен с предыдущим комментатором, однако, следует подчеркнуть: EVM - это не просто «виртуальная машина», а формализованная, детерминированная, тьюринг-полная вычислительная среда, функционирующая в рамках строго определённого, криптографически защищённого консенсусного протокола! Каждый опкод имеет строго фиксированную вычислительную стоимость, что обеспечивает предсказуемость, а значит - безопасность! Без газа - хаос! Без стека - крах! Без хранилища - иллюзия! И да, Solidity - это, безусловно, доминирующий язык, но Vyper - это инженерный эталон, и его недооценивают! Настоящие разработчики используют его для DeFi-контрактов, потому что он исключает возможность неявного поведения! А кто пишет на других языках - тот не понимает основ!

Write a comment