Po upgradu sítě Zilliqa na verzi 9.3.0 dne 3. ledna 2024 došlo na platformě ZilBridge k delšímu přerušení, po kterém zůstalo několik transakcí nepotvrzených a uživatelé nemohli platformu využívat.
Tento problém byl vyřešen 27. března 2024, kdy byla na platformě obnovena plná funkčnost.
ZilBridge je Ethereum-Zilliqa Bridge poháněný Carbon and Poly Network a který umožňuje snadné přemostění zastupitelných tokenů ZRC-2 přes Zilliqa i Ethereum.
Technický tým Zilliqa provedl analýzu hlavní příčiny tohoto narušení, která poskytuje podrobný rozpis problému a způsob jeho vyřešení.
Narušení ZilBridge, označeného jako PIR-219, bylo v zásadě způsobeno tím, že infrastruktura přenosu ZilBridge nebyla vypnuta, když byla implementována aktualizace sítě v9.3.0, což způsobilo, že přenášela nesprávná záhlaví bloků přes infrastrukturu mostu.
Mezi faktory, které přispěly ke zpožděním při řešení tohoto problému, patří způsob, jakým jsou zaváděny upgrady sítě Zilliqa, vlastnosti toho, jak PolyNetwork ověřuje transakční bloky, odhalení chyb v programu relayer a čas potřebný k vybudování nového bloku genesis. a synchronizovat historické transakce s PolyNetwork.
K 27. březnu byly tyto překážky překonány a platformě byla obnovena plná funkčnost. ZilBridge je nyní zpět online a všechny dříve zaseknuté transakce byly synchronizovány a potvrzeny.
Analýza kořenové příčiny – ZilBridge Disruption
ZilBridge (částečně) používá přenosový program k přenosu vhodných transakcí a hlaviček bloků do PolyNetwork, která pak zpracovává překládku požadavků do Carbonu a poté do jiných řetězců k doručení.
Když je v síti Zilliqa implementován upgrade mainnetu, dojde k následujícímu:
Stará síť je znepřístupněna
Nová síť je vytvořena z perzistence staré sítě.
Nová síť nahrazuje starou.
Nová síť je zpřístupněna.
Tým Zilliqa upozorní partnery na plánovanou aktualizaci sítě, aby mohli pozastavit svou infrastrukturu, zatímco stará síť bude nedostupná. Tento nedokonalý proces bude díky zavedení Zilliqa 2.0 vylepšen a bude dynamičtější a flexibilnější.
V případě upgradu Zilliqa v9.3.0 nebyla infrastruktura ZilBridge během tohoto procesu pozastavena a nadále sbírala hlavičky z prázdných bloků, které nyní produkuje stará síť, a předávala je PolyNetwork.
To znamenalo, že když se síť vrátila s v9.3.0, PolyNetwork se ocitl s rozvětveným členstvím ve výboru DS a odmítl se synchronizovat s novou sítí.
PolyNetwork kontroluje, zda je transakční blok správně podepsán rekonstrukcí výboru DS (Directory Service) z hlaviček bloků DS hlášených blockchainem Zilliqa. PolyNetwork ukládá pouze nejnovější výbor DS a není možné vypočítat předchozí členy výboru DS pro předchozí bloky DS.
To znamenalo, že jsme potřebovali regenerovat blok genesis pro PolyNetwork – časově náročný proces, který bychom museli začít dříve, než je aktuální blok DS.
Protože není možné vypočítat členství ve výborech DS pro předchozí bloky, vytvořil tým Zilliqa nástroj, který vzal ušetřenou vytrvalost a pracoval vpřed na rekonstrukci bloku geneze v jakémkoli bodě řetězce. To bylo poté použito k vygenerování a podepsání bloku ve výšce bloku těsně po upgradu sítě.
Muselo být dokončeno několik synchronizací genesis, aby se zohlednily změny v ochranných uzlech mezi verzemi sítě, a poté byly objeveny chyby v programu relayer, které vedly k tomu, že bloky transakcí nebyly synchronizovány do PolyNetwork.
Tyto chyby byly opraveny a pak jsme narazili na problém pramenící ze skutečnosti, že PolyNetwork není schopen uložit členství ve výboru DS pro blok DS, jehož hash již uložil.
To způsobilo, že převaděč přestal fungovat a vyžádalo si vytvoření bloku genesis mezi posledním blokem DS, který PolyNetwork viděl, a prvním blokem DS s nevyřízenou transakcí mostu.
Převodník byl optimalizován tak, aby urychlil tuto synchronizaci, což po dokončení nakonec vedlo k tomu, že se PolyNetwork sladil se sítí Zilliqa a funkčnost ZilBridge byla plně obnovena 27. března 2024.