NEAR әзірлеушілер тобы жылдағы ең әсерлі инженерлік операциялардың бірін жүзеге асырды: негізгі желінің жұмыс істеп тұрған кезінде, нақты жүктеме астында, олар смарт-келісімшарттарды орындау қозғалтқышын ауыстырды. Және мұны пайдаланушыларға байқатпай дерлік жасады. Бұл жай ғана жаңарту емес — бұл іргетастың ауысуы, ол көлеңкеде қалды.

Неліктен бұл қажет болды?

Жылдар бойы NEAR Wasmer қозғалтқышының форкіне негізделген NearVM виртуалды машинасының өз іске асырылуына сүйенді. Желі ядросының бұрынғы әзірлеушісінің айтуынша, бұл «жеке» компилятор жоба үшін нағыз «салық» болды. Rust тілінің әрбір жаңартуы, әрбір жаңа қауіпсіздік функциясы шағын топтың иығына түсті. Бірде бұл тіпті жобаның бастапқы Wasmer-дегі сыни осалдықтан кездейсоқ құтылуына әкелді, себебі ол қате анықталғанға бір күн қалғанда онымен синхрондауды тоқтатты. Бұл ұзақ уақыт жалғаса алмады.

Wasmtime: қауіпсіздікті қорғайтын салалық стандарт

Таңдау Wasmtime-ге түсті — Bytecode Alliance альянсы қолдайтын WebAssembly эталондық іске асырылуы. Бұл жай ғана «бөлшекті» ауыстыру емес — бұл бүкіл қоғамдастық дамытатын стандартқа көшу. Қауіпсіздікті дәлелдеу хирургиялық дәлдікпен жүргізілді: желі түйіндері нақты трафикті екі виртуалды машина арқылы параллельді түрде өткізіп, әр нәтижені салыстырды. Комиссиялар бойынша сәйкессіздік 0,002%-дан аз болды, ал орындау жылдамдығы шамамен төрт есе өсті.

Тыйым салынған шешім және баяулату «бомбасы»

Негізгі инженерлік басқатырғыш орындауда емес, компиляцияда болды. NEAR желісінде келісімшартты орналастыру ұзақтығы небәрі 600 миллисекунд болатын блоктың ішінде компиляцияланады. Мәселе мынада, оңтайландырушы компилятордың жұмыс уақытының жоғарғы шегі жоқ. Топ 128 КБ көлеміндегі сынақ келісімшартын жасады, оның компиляциясы шамамен 7 секундқа созылды — бұл блоктан «өтіп кетуге» және бүкіл желіні баяулатуға жеткілікті болды.

Қарапайым шешім — компиляцияға уақыт шегін белгілеу — тыйым салынған болып шықты. Әзірлеушілер түсіндіргендей, әртүрлі валидаторлар компиляцияға әртүрлі уақыт жұмсайды. Шекаралық келісімшартты кейбір түйіндер қабылдайды, ал басқалары қабылдамайды. Нәтиже — бір компилятор параметріне байланысты желінің бөлінуі. Консенсус тіпті құрастыру уақытынан да толық болжамдылықты талап етеді.

Тамаша шығу жолы: Winch және компиляцияны шығару

Топ дөрекі күштің орнына инженерлік талғампаздықты қолданды. Олар Winch-ті — Wasmtime-нің бір өтпелі бэкендін — енгізіп, оған жетіспейтін функцияларды қосты. Нәтижесінде «компиляцияның ең нашар жағдайы» 7,6 секундтан 36 миллисекундқа дейін қысқарды. Сонымен қатар, компиляцияны орындаушы түйіндермен байланысты емес, өңдеушілердің жеке түріне шығарды. Вадимнің айтуынша, блокчейннен тыс жұмыс істеу «протоколға қолжетімсіз сән-салтанатты» береді.

Аналитиктің қорытындысы: Бұл жаңарту — жетілген инфрақұрылымның қандай болуы керектігінің тамаша үлгісі. NEAR жай ғана қозғалтқышты ауыстырып қоймай, қауіпсіздік пен өнімділіктің түбегейлі мәселесін шешті, назар аудартпай және айқай жасамай. Менің ойымша, бұл жобаның жоғары сапалы инженерлік мәдениетінің белгісі, бұл ұзақ мерзімді перспективада қатты маркетингтік мәлімдемелерден әлдеқайда маңызды.