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 қолдау көрсетілетін стандартқа көшу арқылы желіні жылдамдатып, оның қауіпсіздігін арттырып қана қоймады. Ең бастысы, топ консенсустың күрделі мәселесін ымырасыз, талғампаздықпен шешті. Компиляцияны орындаудың сыни жолынан шығару — бұл валидаторларға жүктемені азайтып, желінің шабуылдарға төзімділігін арттыратын архитектуралық шешім. Токен ұстаушылар мен әзірлеушілер үшін бұл сигнал: протокол өз инфрақұрылымына байыпты инвестиция салып, соңғы пайдаланушыға байқалмай қалады. Дәл осындай «көрінбейтін» жаңартулар жаппай қабылдауға негіз қалайды.