Přehled událostí

Mezi 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 výpadku sítě Sui. Všechny ověřovací uzly se dostaly do smyčky pádu, což vedlo k úplnému přerušení zpracování transakcí.

Příčina problému

V kódu řízení blokování došlo k chybě, když se spustila assert!: pokud je odhadovaná nákladovost provádění nulová, vede to k pádu ověřovacího uzlu. Tento problém nastane, pokud jsou splněny všechny následující podmínky:

1. Řízení blokování bylo nastaveno na režim TotalGasBudgetWithCap:

  • Tento režim byl po krátkém povolení v protokolu verze 63 zrušen a poté byl znovu povolen v protokolu verze 68 s akumulativním plánovačem.

2. Síť obdržela transakce, které současně splnily následující podmínky:

  • Proměnné sdílené objekty jako vstup

  • Nula MoveCall instrukcí

Když síť obdrží takové transakce, všechny ověřovací uzly okamžitě spadnou.

Co je řízení blokování?

Síť Sui podporuje masivní paralelní zpracování různých uživatelských transakcí na základě architektury objektů, což nelze realizovat na většině ostatních sítí. Pokud však 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 na objem zpracování transakcí, které se týkají daného objektu.

Systém řízení blokování brání přetížení sítě omezením rychlosti transakcí, které zapisují do stejného sdíleného objektu, kvůli dlouhým kontrolním časům.

Nedávno jsme vylepšili systém řízení blokování, abychom zvýšili využití sdílených objektů přesnějším odhadem složitosti transakcí. V kódu nového režimu TotalGasBudgetWithCap je však chyba, která způsobila tento problém.

Jak vyřešit problém?

Po zjištění problému bylo opravit kód velmi jednoduché (viz PR #20365). 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í saturujícího sčítání a povolení transakcí s náklady 0.

🌟 Hlavní síť v1.37.4:

https://github.com/MystenLabs/sui/releases

Díky aktivní reakci komunity ověřovacích uzlů trvalo pouhých 15 minut, než se Sui síť po vydání opravy 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 se spustily téměř současně a rychle jsme mobilizovali týmové zdroje k diagnostice a opravě.

  • Komunita ověřovacích uzlů podala vynikající výkon: po vydání opravy se síť Sui téměř okamžitě vrátila do normálu.

Preventivní opatření

  1. Zlepšení testovacího systému: přidání více typů konfrontačních transakcí, které vyvolaly tento pád, pro odhalení potenciálních problémů.

  2. Optimalizace procesu sestavení: zvýšení rychlosti generování ladění a vydání binárních souborů, a tím další snížení doby reakce na události. Část času během této 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!