Команда 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 не просто решила проблему безопасности и производительности, но и продемонстрировала зрелость своей кодовой базы. Для инвесторов и разработчиков это сигнал, что команда способна на сложнейшие технические маневры без ущерба для сети.