Команда розробників NEAR провела надскладну інженерну операцію: під навантаженням живої мережі було замінено рушій виконання всіх смарт-контрактів. Користувачі нічого не помітили, а мережа не лише не втратила продуктивності, але й отримала значний приріст швидкості.
Йдеться про заміну віртуальної машини NearVM — форку рушія Wasmer, який проєкт використовував довгі роки. Як пояснив колишній розробник ядра NEAR Вадим, NearVM була «приватним компілятором»: усі оновлення мови Rust, виправлення безпеки та нові функції лягали виключно на плечі команди проєкту. Це створювало серйозний «податок» на підтримку і, що критично, ризик пропустити вразливість. За словами експерта, одного разу проєкту пощастило — він випадково уникнув критичної діри у вихідному Wasmer, просто не встигнувши синхронізуватися з релізом.
Новим фундаментом став Wasmtime — галузевий стандарт, який підтримується альянсом Bytecode Alliance. Перехід був підготовлений з хірургічною точністю: вузли мережі паралельно прогоняли реальний трафік через обидві віртуальні машини та звіряли кожен результат. Підсумки тестів вражають: результати виконання збіглися повністю, розбіжність у комісіях склала менше 0,002%, а швидкість самого виконання зросла приблизно в чотири рази.
Головний головний біль: проблема «забороненого» рішення
Однак ключова складність крилася не у самому виконанні, а в компіляції контрактів. У мережі NEAR розгортання контракту компілюється прямо всередині блоку тривалістю 600 мілісекунд. Оптимізуючий компілятор не має верхньої межі часу роботи, що відкривало шлях для атаки. Команда створила тестовий контракт розміром 128 КБ, компіляція якого займала близько 7 секунд — цього було достатньо, щоб «промахнутися» повз блок і сповільнити всю мережу.
Здавалося б, очевидне рішення — встановити жорсткий ліміт часу на компіляцію. Але Вадим пояснює, що це був заборонений шлях. Різні валідатори витрачають на компіляцію різний час, і пограничний контракт одні вузли прийняли б, а інші відхилили. Результатом став би розкол мережі (форк) через єдине налаштування компілятора. Консенсус вимагає повної передбачуваності, навіть на рівні часу збірки.
Елегантний вихід: Winch і винесення компіляції
Замість ризикованого обмеження команда знайшла інший вихід. Вони впровадили Winch — однопрохідний бекенд Wasmtime — і додали до нього відсутні функції. Це дозволило кардинально скоротити «найгірший випадок компіляції»: з 7,6 секунди до всього 36 мілісекунд. Більше того, архітектура Wasmtime дозволяє винести компіляцію на окремий тип обробників, не пов'язаних з виконуючими вузлами. Як зазначив Вадим, «робота поза блокчейном дає розкіш, недоступну протоколу».
Реліз Nearcore 2.12, анонсований розробником Антоном, перевів середовище виконання NEAR з NearVM на Wasmtime. Це та робота, яка не потрапляє в заголовки ЗМІ, але має колосальне значення для довгострокової стійкості мережі. Команда закрила критичний технічний борг, нічого не зламавши та не змінивши користувацький досвід.
Думка експерта: Це оновлення — блискучий приклад зрілої інженерної культури в криптопросторі. NEAR не просто прискорила мережу та підвищила її безпеку, перейшовши на підтримуваний стандарт. Набагато важливіше те, що команда вирішила надскладне завдання консенсусу елегантно, без компромісів. Винесення компіляції за межі критичного шляху виконання — це архітектурне рішення, яке знижує навантаження на валідаторів і підвищує стійкість мережі до атак. Для власників токенів і розробників це сигнал: протокол серйозно інвестує у свою інфраструктуру, залишаючись непомітним для кінцевого користувача. Саме такі «невидимі» оновлення і створюють фундамент для масового прийняття.