Разработчики NEAR провернули одну из самых рискованных и технически сложных операций в современном блокчейне: они заменили виртуальную машину, исполняющую все смарт-контракты, прямо в работающей основной сети. И самое поразительное — подавляющее большинство пользователей и разработчиков этого даже не заметили.
Долгое время сердцем NEAR была кастомная виртуальная машина NearVM — форк движка Wasmer. Этот «частный компилятор» был настоящим «налогом» на инновации: каждое обновление Rust, каждая новая функция безопасности ложились бременем исключительно на команду проекта. Проекту однажды невероятно повезло: он случайно пропустил синхронизацию с upstream как раз перед тем, как в оригинальном Wasmer обнаружили критическую уязвимость. Но полагаться на удачу в блокчейне — непозволительная роскошь.
Выбор пал на Wasmtime — индустриальный стандарт, поддерживаемый Bytecode Alliance. Чтобы доказать безопасность перехода, узлы сети параллельно прогоняли реальный трафик через обе виртуальные машины, сверяя каждый результат. Результаты оказались впечатляющими: полное совпадение результатов, разница в комиссиях составила менее 0,002%, а скорость исполнения выросла примерно в четыре раза.
Запретное решение и инженерная смекалка
Главная сложность, однако, была не в исполнении. В сети NEAR развертывание контракта компилируется прямо внутри блока длиной в 600 миллисекунд. У оптимизирующего компилятора нет верхнего предела времени работы, что открывало путь для атаки. Команда создала тестовый контракт размером 128 КБ, компиляция которого занимала около 7 секунд — этого было достаточно, чтобы «промахнуться» мимо блока и замедлить всю сеть.
Казалось бы, очевидное решение — поставить жесткий лимит времени на компиляцию. Но это оказалось запретным: разные валидаторы тратят на компиляцию разное время, и пограничный контракт одни узлы приняли бы, а другие — отвергли, что привело бы к расколу сети. Консенсус требует полной предсказуемости даже на уровне времени сборки.
Команда нашла элегантный выход. Они внедрили Winch — однопроходный бэкенд Wasmtime — и добавили в него недостающие функции. Результат превзошел ожидания: «худший случай компиляции» сократился с 7,6 секунды до 36 миллисекунд. Работа вне блокчейна дала «роскошь, недоступную протоколу»: компиляцию можно вынести на отдельный тип обработчиков, не связанный с исполняющими узлами.
Релиз Nearcore 2.12 перевел среду исполнения NEAR с NearVM на Wasmtime. Для разработчиков и пользователей ничего не изменилось — и в этом весь смысл. Команда закрыла критический технический долг, ничего не сломав. Это тот уровень инженерной культуры, который редко попадает в заголовки, но именно он отличает зрелые блокчейн-сети от экспериментальных проектов.
Мнение аналитика: Миграция на Wasmtime — это не просто банальное обновление. Это стратегический шаг, который снимает с команды NEAR бремя поддержки форка и подключает проект к общеотраслевым стандартам безопасности. Ускорение в 4 раза — приятный бонус, но главное здесь — устранение вектора атаки через «замедление компиляции» и обеспечение долгосрочной устойчивости сети. Это тот случай, когда «тихая» работа говорит о зрелости проекта громче любых громких заявлений.