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

Неліктен ескі қозғалтқыш «салыққа» айналды

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

Wasmtime-ге көшу: бұл қалай болды

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

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

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

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

Тамаша шешім және қорытындылар

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

Nearcore 2.12 шығарылымы NEAR-дың орындау ортасын NearVM-ден Wasmtime-ге ауыстырды. Әзірлеушілер мен пайдаланушылар үшін ештеңе өзгермеді — команда ештеңені бұзбай, сыни техникалық қарызды жапты. Бұл тақырыптарға ілігетін жаңалық емес, бірақ дәл осындай жаңартулар инфрақұрылымды шынымен сенімді етеді.

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