Команда 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 рази та усунення вектора атаки на консенсус — це не просто апдейт, а фундаментальне зміцнення безпеки та продуктивності мережі.