Команда разработчиков NEAR провернула, пожалуй, одну из самых впечатляющих инженерных операций года: прямо во время работы основной сети, под реальной нагрузкой, они заменили движок исполнения смарт-контрактов. И сделали это практически незаметно для пользователей. Это не просто апдейт — это смена фундамента, которая осталась за кулисами.

Почему это было необходимо?

Годами NEAR полагался на собственную реализацию виртуальной машины NearVM, построенную на форке движка Wasmer. Этот «частный» компилятор, по словам бывшего разработчика ядра сети, был настоящим «налогом» для проекта. Каждое обновление языка Rust, каждая новая функция безопасности ложились на плечи небольшой команды. Однажды это даже привело к тому, что проект случайно избежал критической уязвимости в оригинальном Wasmer, просто перестав синхронизироваться с ним за день до обнаружения бага. Долго так продолжаться не могло.

Wasmtime: отраслевой стандарт на страже безопасности

Выбор пал на Wasmtime — эталонную реализацию WebAssembly, поддерживаемую альянсом Bytecode Alliance. Это не просто замена «гайки» — это переход на стандарт, который развивается всем сообществом. Доказательство безопасности было проведено с хирургической точностью: узлы сети параллельно гоняли реальный трафик через обе виртуальные машины и сверяли каждый результат. Расхождение по комиссиям составило менее 0,002%, а скорость исполнения выросла примерно в четыре раза.

Запретное решение и «бомба» замедления

Главная инженерная головоломка крылась не в исполнении, а в компиляции. В сети NEAR развертывание контракта компилируется прямо внутри блока длиной всего 600 миллисекунд. Проблема в том, что у оптимизирующего компилятора нет верхнего предела времени работы. Команда создала тестовый контракт размером 128 КБ, компиляция которого занимала около 7 секунд — этого хватало, чтобы «промахнуться» мимо блока и замедлить всю сеть.

Казалось бы, простое решение — установить лимит времени на компиляцию — оказалось запретным. Как пояснили разработчики, разные валидаторы тратят на компиляцию разное время. Пограничный контракт одни узлы приняли бы, а другие отклонили. Результат — раскол сети из-за одной настройки компилятора. Консенсус требует полной предсказуемости, даже от времени сборки.

Элегантный выход: Winch и вынос компиляции

Вместо грубой силы команда применила инженерную элегантность. Они внедрили Winch — однопроходный бэкенд Wasmtime — и добавили в него недостающие функции. В результате «худший случай компиляции» сократился с 7,6 секунды до 36 миллисекунд. Более того, компиляцию вынесли на отдельный тип обработчиков, не связанный с исполняющими узлами. Как отметил Вадим, работа вне блокчейна дает «роскошь, недоступную протоколу».

Вердикт аналитика: Этот апгрейд — блестящий пример того, как должна выглядеть зрелая инфраструктура. NEAR не просто сменил движок, а решил фундаментальную проблему безопасности и производительности, не привлекая внимания и не создавая хайпа. Для меня это сигнал о высоком качестве инженерной культуры проекта, что в долгосрочной перспективе гораздо важнее громких маркетинговых заявлений.