EVM в Ethereum: как виртуальная машина исполняет смарт-контракты
янв, 8 2026
Представьте, что вы отправляете деньги другу, но вместо банка - работает код. Этот код не может быть изменён, не может быть остановлен, и его исполняют тысячи компьютеров по всему миру одновременно. Это не фантастика - это EVM в Ethereum. Именно она делает возможным всё, что вы видите в децентрализованных приложениях: обмен токенами, NFT, кредитование без банков, автоматические сделки. Но как именно она это делает? И почему это работает, даже если никто не контролирует процесс?
Что такое EVM и зачем она нужна
EVM - это Ethereum Virtual Machine, или виртуальная машина Ethereum. Это не физический компьютер, а программная среда, которая работает на каждом узле сети Ethereum. Когда вы запускаете смарт-контракт, он не выполняется на вашем телефоне или ноутбуке. Он запускается на тысячах компьютеров, которые составляют сеть. И каждый из них должен получить одинаковый результат. Именно поэтому EVM - это не просто интерпретатор кода, а механизм консенсуса. Без неё Ethereum был бы просто блокчейном с транзакциями, как Bitcoin. С EVM он стал настоящим глобальным компьютером.
Виталик Бутerin и его команда создали EVM в 2015 году, чтобы дать разработчикам возможность писать код, который будет работать без посредников. Это был прорыв. До этого блокчейны могли только передавать деньги. EVM позволила передавать логику. Если вы хотите, чтобы деньги автоматически вернулись, если товар не пришёл - вы пишете это в смарт-контракт. EVM его исполнит. Без сомнений, без лжи, без возможности отменить.
Как работает EVM: стек, память и хранилище
EVM работает по стековой модели. Это значит, что все операции происходят через стек - как стопка тарелок. Когда вы хотите сложить два числа, вы сначала кладёте их на стек. Затем вызываете команду ADD. Она берёт две верхние тарелки, складывает их и кладёт результат обратно. Просто, но мощно. Стек ограничен 1024 элементами - это сделано специально, чтобы предотвратить сложные вычисления, которые могли бы замедлить сеть.
Помимо стека, у EVM есть два других типа памяти: динамическая память и хранилище. Память - это временный буфер, который используется во время выполнения контракта. Как только транзакция закончена, она стирается. Хранилище - это постоянное хранилище данных, которое остаётся в блокчейне навсегда. Если смарт-контракт хранит баланс пользователя, этот баланс записывается в хранилище. Каждый раз, когда кто-то проверяет баланс, он читает его из хранилища, а не из памяти.
Код, который EVM исполняет, - это байткод. Его пишут не вручную. Разработчики используют Solidity или Vyper - языки, похожие на JavaScript или Python. Эти языки компилируются в байткод, состоящий из операционных кодов (опкодов). В EVM их более 140. Каждый опкод имеет свою стоимость в газе. Например, сложение двух чисел стоит 3 газа, а запись данных в хранилище - 20 000 газов. Это важно: чем сложнее операция, тем дороже она обходится.
Газ: как EVM защищает сеть от перегрузки
Почему бы не дать смарт-контрактам бесконечное время и ресурсы для выполнения? Потому что тогда кто-то мог бы написать код, который будет бесконечно считать: while(true) { x++; } - и сеть бы остановилась. Именно поэтому в Ethereum есть газ.
Газ - это внутренняя единица измерения вычислительной работы. Вы платите за газ, когда вызываете смарт-контракт. Стоимость одного газа измеряется в gwei: 1 gwei = 0,000000001 ETH. В декабре 2023 года средняя цена транзакции составляла 20-50 gwei за газ. Если ваш контракт требует 100 000 газа, и цена газа - 30 gwei, вы платите 0,003 ETH. Это не много, но это достаточно, чтобы остановить злонамеренный код.
Каждый блок в Ethereum имеет лимит газа - на начало 2024 года он составляет 30 миллионов газа. Это значит, что в одном блоке может быть выполнено не более определённого количества операций. Если ваш контракт требует больше, он просто не войдёт в блок. Это ограничение - не недостаток, а защита. Оно делает сеть устойчивой. Даже если кто-то попытается атаковать её через перегрузку, сеть просто отклонит транзакцию.
Ограниченный доступ: почему смарт-контракты не могут выходить в интернет
Смарт-контракт в EVM не может прочитать файл с вашего диска, не может подключиться к сайту или получить погоду из Google. Это не ошибка - это фича. Если бы контракт мог обращаться к внешним источникам, он бы перестал быть детерминированным. Один узел получил бы погоду из одного источника, другой - из другого. Результаты бы расходились. Консенсус бы сломался.
Вместо этого используется концепция оракулов. Это специальные смарт-контракты, которые получают данные извне - например, цену биткоина, курс доллара или результат спортивного матча - и записывают их в блокчейн. Их работа - быть надёжными. Chainlink - самый известный оракул. Он собирает данные от десятков источников, усредняет их и только потом передаёт в смарт-контракт. Так сеть остаётся безопасной, а контракт получает нужную информацию.
Ещё одно ограничение: контракт не может работать в фоне. Он не может запуститься сам по себе. Только если кто-то вызовет его через транзакцию. Если вы должны получить возврат средств через 7 дней - вам нужно самому вызвать контракт. Он не напомнит вам. Он не отправит уведомление. Он просто ждёт, пока кто-то его не потянет.
Почему Solidity - главный язык для EVM
Большинство смарт-контрактов в Ethereum написаны на Solidity. Он похож на JavaScript, но с особенностями, учитывающими блокчейн. Например, в Solidity есть ключевое слово payable - оно говорит, что контракт может принимать эфир. Есть require() - чтобы проверять условия перед выполнением. И есть emit - чтобы генерировать события, которые могут отслеживать внешние приложения.
Почему именно Solidity? Потому что он прост для понимания, но мощный. По данным 2023 года, около 85% всех деплоенных контрактов написаны на нём. Даже если вы не знаете C++ или Rust, вы можете начать с Solidity. Инструменты вроде Remix IDE позволяют писать, тестировать и деплоить контракты прямо в браузере. Нет необходимости устанавливать сложные среды. Просто откройте сайт, напишите код - и он работает.
Но есть подвох: Solidity - не идеальный язык. Он позволяет делать ошибки. Например, если вы не проверите, достаточно ли газа, транзакция провалится. Если вы не защитите функцию от несанкционированного вызова - кто-то может украсть ваши токены. Именно поэтому аудит смарт-контрактов - это обязательная процедура. Компании вроде CertiK и Quantstamp проверяют код перед запуском. Иначе вы рискуете потерять миллионы долларов.
Совместимость и будущее EVM
EVM - это не только Ethereum. Это стандарт. Его скопировали сотни других блокчейнов: Polygon, BNB Chain, Avalanche, Arbitrum, Optimism. Это значит, что контракт, написанный для Ethereum, можно запустить на Polygon без изменений. Разработчики не должны учить десятки разных языков. Они пишут один раз - и работают везде. По данным DappRadar, на 2023 год 72% всех децентрализованных приложений работают на EVM-совместимых сетях. К 2025 году эта цифра может достичь 85%.
Что дальше? В 2024 году планируется внедрение Verkle Trees - технология, которая уменьшит размер состояния сети в десятки раз. Это значит, что новые узлы смогут присоединиться быстрее, а сеть станет более масштабируемой. Также в работе EIP-4844 - он снизит стоимость газа для слоёв 2, что сделает транзакции ещё дешевле. В 2026 году ожидается появление EOF (EVM Object Format) - новый формат байткода, который сделает смарт-контракты более безопасными и гибкими.
Но главный вызов - производительность. EVM обрабатывает транзакцию за 12-15 секунд. Централизованные системы делают это за миллисекунды. Но EVM не конкурирует с PayPal. Она конкурирует с доверием. Вы не доверяете банку? Тогда вы доверяете коду. И это стоит медленнее. Это стоит дороже. Но это - свобода.
Как начать работать с EVM
Если вы хотите писать смарт-контракты:
- Изучите основы Solidity. Платформы вроде CryptoZombies предлагают бесплатные интерактивные уроки - среднее время освоения - 4-6 недель.
- Используйте Remix IDE - онлайн-среда для написания и тестирования кода.
- Подключите MetaMask - кошелёк, который позволяет отправлять транзакции в сеть.
- Протестируйте код на тестовой сети (Goerli или Sepolia). Там эфир бесплатный.
- После тестов - деплой на основную сеть. Не забудьте рассчитать газ. Используйте EthGasStation или аналоги, чтобы не переплатить.
Ошибки новичков: недооценивать газ, не проверять доступ к функциям, не тестировать на граничных случаях. Например, что произойдёт, если пользователь отправит 0 ETH? Что, если он вызовет функцию дважды? Всё это нужно проверить заранее. Иначе вы создадите уязвимость, которую взломают через пару дней.
Риски и будущее
EVM - это не святая святых. В 2016 году произошёл взлом The DAO - из-за ошибки в коде украдено было 60 миллионов долларов. Сеть пришлось форкнуть, чтобы вернуть деньги. Это был урок: код должен быть идеален. Сегодня аудит - это не опционально, а норма. Но даже идеальный код может быть уязвим, если сеть подвергнется атаке. Поэтому EVM постоянно обновляется. Каждое обновление - это попытка улучшить безопасность, не жертвуя децентрализацией.
Сегодня EVM - это основа децентрализованного интернета. Она позволяет людям обмениваться деньгами, активами, правами - без посредников. Это не просто технология. Это социальный эксперимент. И он работает. Миллионы людей уже используют его. И пока они это делают - EVM будет развиваться. Медленно. Безопасно. Надёжно.
Olha Tikhonova
января 8, 2026 AT 16:51Это всё красиво, но кто-то забыл упомянуть, что EVM - это технологический монстр, который потребляет столько энергии, сколько целая страна. Вы называете это «свободой»? Это - экологическое преступление, замаскированное под инновацию. Каждая транзакция - это киловатт-час, сожжённый впустую. И да, я знаю, что вы скажете про PoS - но даже он не решает проблему масштабируемости, только откладывает её на потом.