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