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