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