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