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