Команда разработчиков NEAR Protocol совершила, пожалуй, один из самых элегантных и технически сложных манёвров в истории блокчейна: в условиях работающей основной сети они полностью заменили виртуальную машину, отвечающую за исполнение всех смарт-контрактов. Пользователи, как и планировалось, ничего не заметили.

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

Новым фундаментом стал Wasmtime — отраслевой стандарт, поддерживаемый альянсом Bytecode Alliance. Чтобы доказать безопасность миграции, узлы сети параллельно прогоняли реальный трафик через обе виртуальные машины, сверяя каждый результат. Итоги впечатляют: расхождение в комиссиях составило менее 0,002%, а скорость исполнения контрактов выросла примерно в четыре раза.

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

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

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

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

Релиз Nearcore 2.12 перевёл среду исполнения NEAR с NearVM на Wasmtime. Для разработчиков и пользователей ничего не изменилось, и в этом весь смысл: команда закрыла критический технический долг, ничего не сломав.

Мнение аналитика: Этот кейс — блестящий пример инженерной культуры, где безопасность и стабильность сети ставятся выше хайпа. Замена движка под нагрузкой — операция на открытом сердце, и NEAR провёл её без единого сбоя. Это серьёзно укрепляет доверие к протоколу с технической точки зрения.