Když k problému došlo, tým Sui rychle diagnostikoval problém a vydal opravu, která byla následně nasazena ověřovacími uzly, čímž se maximalizovala doba přerušení sítě.
Přehled události
Mezi přibližně 1:15 a 3:45 pacifického času 21. listopadu 2024 (východoevropský čas: 21. listopadu 2024 od 17:15 do 19:45) došlo k celkovému zablokování hlavní sítě Sui. Všechny ověřovací uzly se dostaly do cyklu zhroucení, což vedlo k úplnému přerušení zpracování transakcí.
Příčina problému
V kódu ovládání blokace se spustil assert!, který vyvolal chybu: pokud je odhadovaná cena provedení nula, dojde k zhroucení ověřovacích uzlů. Tento problém nastane pouze za splnění všech následujících podmínek:
1. Ovládání blokace nastaveno na režim TotalGasBudgetWithCap:
Tento režim byl po krátkém povolení v protokolu verze 63 zrušen a poté znovu povolen v protokolu verze 68 s akumulátorem.
2. Síť přijme transakci, která současně splňuje následující podmínky:
Proměnné sdílené objekty vstup
Nula MoveCall instrukcí
Když síť přijme takové transakce, všechny ověřovací uzly okamžitě zhroucují.
Co je ovládání blokace?
Sui síť na bázi objektů podporuje masivní paralelní zpracování různých uživatelských transakcí, což není možné na většině jiných sítí. Nicméně, pokud více transakcí současně zapisuje do stejného sdíleného objektu, musí být tyto transakce prováděny v pořadí a existuje limit zpracování transakcí týkajících se daného objektu.
Systém ovládání blokace zabraňuje přetížení sítě omezením rychlosti transakcí zapisujících do stejného sdíleného objektu kvůli dlouhému času provádění kontrolních bodů.
Nedávno jsme upgradovali systém ovládání blokace, abychom zvýšili využití sdílených objektů přesnějšími odhady složitosti transakcí. Ale v kódu nového režimu TotalGasBudgetWithCap byla chyba, která vedla k tomuto problému.
Jak vyřešit problém?
Po stanovení problému byla oprava kódu velmi přímá (viz PR #20365). Tato oprava byla nasazena na hlavní síť (v1.37.4) a testovací síť (v1.38.1).
PR #20365: Změna bump_object_execution_cost na použití saturace a povolení transakcí s nulovými náklady.
🌟 Hlavní síť v1.37.4:https://github.com/MystenLabs/sui/releases
Na základě aktivní reakce komunity ověřovacích uzlů trvalo pouze 15 minut, než se po vydání opravy Sui síť vrátila do normálu.
Co jsme se naučili?
Systém detekce a reakce na události fungoval dobře: Automatické alarmy a zprávy od komunity byly téměř současně aktivovány, rychle jsme mobilizovali týmové zdroje pro diagnostiku a opravu.
Komunita ověřovacích uzlů se osvědčila: Po vydání opravy se síť Sui téměř okamžitě vrátila do normálu.
Prevence
Zlepšení testovacího systému: Přidat více typů protichůdných transakcí, které vedly k tomuto zhroucení, abychom odhalili potenciální problémy.
Optimalizace procesu sestavení: Zrychlení generování ladění a vydání binárních souborů, dále snížení doby odezvy událostí. Část času během tohoto přerušení byla způsobena čekáním na sestavení vydané verze.
Děkujeme komunitě a ověřovacím uzlům za podporu, která zajistila rychlé obnovení sítě Sui!