NEAR Protocol әзірлеушілер тобы блокчейн тарихындағы ең талғампаз және техникалық тұрғыдан күрделі маневрлердің бірін жасады: жұмыс істеп тұрған негізгі желі жағдайында олар барлық смарт-келісімшарттардың орындалуына жауап беретін виртуалды машинаны толығымен ауыстырды. Пайдаланушылар, жоспарланғандай, ештеңе байқамады.
Ұзақ уақыт бойы NEAR Wasmer қозғалтқышының форкі болып табылатын NearVM-ге сүйенді. Бұл шешім, мәні бойынша, дамуға жеке «салық» болды: Rust тілінің әрбір жаңартуы, әрбір жаңа қауіпсіздік функциясы тек протокол командасының мойнына түсті. Бұрынғы өзек әзірлеушілерінің бірі атап өткендей, жоба бірде өте бақытты болды: олар түпнұсқа Wasmer-дегі сыни осалдықтан кездейсоқ құтылды, себебі оның жаңартуымен уақытында синхрондауға үлгермеді.
Жаңа іргетас Wasmtime болды — Bytecode Alliance альянсы қолдайтын салалық стандарт. Көші-қонның қауіпсіздігін дәлелдеу үшін желі түйіндері нақты трафикті екі виртуалды машина арқылы параллельді өткізіп, әрбір нәтижені салыстырды. Нәтижелер әсерлі: комиссиялардағы сәйкессіздік 0,002%-дан аз болды, ал келісімшарттардың орындалу жылдамдығы шамамен төрт есе өсті.
Тыйым салынған шешім және компиляторға арналған «бомбалар»
Дегенмен, негізгі қиындық орындаудың өзінде емес, келісімшарттарды компиляциялауда болды. NEAR архитектурасында келісімшартты орналастыру тек 600 миллисекундқа созылатын блок ішінде компиляцияланады. Оңтайландырушы компилятордың жұмыс уақытының жоғарғы шегі жоқ, бұл шабуылға жол ашты. Мамандар көлемі 128 КБ болатын келісімшарт жасады, оның компиляциясы шамамен 7 секундқа созылды — бұл блоктан «өтіп кету» және бүкіл желіні баяулату үшін жеткілікті болды.
Айқын шешім — компиляцияға уақыт шектеуін енгізу — тыйым салынған болып шықты. Инженерлер түсіндіргендей, әртүрлі валидаторлар компиляцияға әртүрлі уақыт жұмсайды, ал шекаралық келісімшартты кейбір түйіндер қабылдап, басқалары қабылдамайды. Нәтижесінде бір ғана компилятор параметріне байланысты желінің бөлінуі (форк) орын алар еді. Консенсус тіпті құрастыру уақыты деңгейінде де абсолютті болжамдылықты талап етеді.
Команда басқа жолды тапты. Олар Winch — Wasmtime-ның бір өтпелі бэкендін — енгізіп, оған жетіспейтін функцияларды қосты. Нәтижесінде «ең нашар компиляция жағдайы» 7,6 секундтан 36 миллисекундқа дейін қысқарды. Блокчейннен тыс жұмыс протоколға қолжетімсіз артықшылық берді: компиляцияны орындаушы түйіндермен байланысты емес, өңдеушілердің жеке түріне шығарды.
Nearcore 2.12 релизі NEAR орындау ортасын NearVM-ден Wasmtime-ге ауыстырды. Әзірлеушілер мен пайдаланушылар үшін ештеңе өзгерген жоқ, және мұның мәні осында: команда ештеңені бұзбай, сыни техникалық қарызды жапты.
Аналитик пікірі: Бұл жағдай — инженерлік мәдениеттің тамаша үлгісі, мұнда желінің қауіпсіздігі мен тұрақтылығы хайптан жоғары қойылады. Жүктеме астында қозғалтқышты ауыстыру — ашық жүрекке жасалған операция, және NEAR оны бірде-бір ақаусыз өткізді. Бұл протоколға техникалық тұрғыдан сенімділікті айтарлықтай нығайтады.