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

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

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

Тыйым салынған шешім және инженерлік гамбит

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

Компиляцияға уақыт шектеуін қою сияқты айқын шешім тыйым салынған болып шықты. Вадимнің түсіндіруінше, әртүрлі валидаторлар компиляцияға әртүрлі уақыт жұмсайды, сондықтан шекаралық келісімшартты кейбір түйіндер қабылдап, басқалары қабылдамайды. Салдары тек компилятор параметріне байланысты желінің бөлінуі болар еді. Консенсус тіпті құрастыру уақытынан да толық болжамдылықты талап етеді.

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

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

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