Het mainnet van Sui had drie afzonderlijke storingen op 28 en 29 mei nadat de 1.72-release van het netwerk randgevallen blootlegde in de gasbetalingslogica en de herstartlogica van validators, aldus een postmortem van de Sui Foundation. De foundation zei dat de problemen inmiddels zijn opgelost, de netwerkactiviteit is hervat en "er geen gebruikersfondsen in gevaar waren."
De incidenten begonnen op donderdag 28 mei, toen het mainnet van Sui om ongeveer 16:00 uur CET tot stilstand kwam en tot ongeveer 22:30 uur CET offline bleef. Een tweede storing volgde op vrijdagochtend, beginnend rond 14:00 uur CET en eindigend rond 17:30 uur CET. De derde storing begon vrijdagmiddag om ongeveer 22:30 uur CET en werd opgelost rond 04:20 uur CET.
Volgens de foundation kwamen de eerste twee storingen voort uit crashbugs die verband hielden met de interactie tussen de gasbetalingslogica en de 1.72-upgrade van Sui, die adresbalansen introduceerde. De derde storing was afzonderlijk en werd veroorzaakt tijdens een geplande epoch-wijziging nadat validator-herstarts een latente bug blootlegden in de manier waarop de randomnesstoestand werd bewaard.
"Tijdens de storingen liepen er geen gebruikersfondsen gevaar en het netwerk heeft geen bevestigde transacties teruggedraaid toen het werd hervat," aldus de Sui Foundation. "Validators hebben de bekende problemen die zijn veroorzaakt door zowel de oorspronkelijke gas-betalingsbug als de randomnesstoestand-bug volledig verholpen, en de netwerkactiviteit is hervat."
Het eerste probleem was gecentreerd rond de nieuwe adresbalansfunctie van Sui, waarmee gebruikers fondsen kunnen opslaan en voor gas kunnen betalen zonder uitsluitend afhankelijk te zijn van coin-objecten. Transacties op Sui kunnen gas betalen via adresbalansen, coin-objecten of een hybride structuur die beide combineert.
Het randgeval deed zich voor in dat hybride gaspad. Wanneer een transactie probeerde te besteden vanuit een adresbalans die concurrerende transacties niet kon dekken, annuleerde de scheduler deze correct met een InsufficientFundsForWithdraw-fout. Maar later, tijdens gas smashing — het proces waarbij invoercoins worden gecombineerd tot één gasbetalende coin — kon dezelfde reservering nog steeds proberen fondsen opnieuw te debiteren.
In de uitleg van de foundation vond de crash niet direct plaats tijdens gas smashing, maar tijdens de verrekening, toen balansdeltas werden gereconcilieerd door een systeemtransactie. Een negatieve delta toegepast op een nulsaldo veroorzaakte een underflow.
De onmiddellijke oplossing was conceptueel eenvoudig: vermijd gas smashing wanneer een transactie wordt geannuleerd met InsufficientFundsForWithdraw. Validators namen die oplossing op donderdag over en brachten het netwerk weer online. Maar de foundation erkende dat de patch een tijdelijke maatregel was, gekozen om het netwerk te herstellen terwijl engineers een meer volledige oplossing ontwikkelden.
"Het wijzigen van de gaslogica is een delicate operatie," schreef de foundation. "Zoals hierboven uitgelegd, zijn er gecompliceerde interacties tussen adresbalansen en coins. Naast het oplossen van bugs moeten wijzigingen in de gaslogica al het vorige gedrag behouden of gebruik maken van geschikte versiebeheer."
Die tijdelijke patch bevatte een bekende zwakte. Als een transactie meerdere annuleringsredenen had, kon een andere fout de InsufficientFundsForWithdraw-conditie maskeren. Wanneer dat vrijdagochtend gebeurde, kon het oorspronkelijke underflowpad nog steeds worden bereikt, wat een tweede storing veroorzaakte.
De derde storing deed zich voor nadat het netwerk vrijdagochtend de normale werking had hervat. Bij de volgende geplande epoch-wijziging slaagden validators er niet in de overgang te voltooien vanwege een bug die verband hield met het gedistribueerde sleutelgeneratieprotocol van Sui, of DKG, dat willekeur bootstrapt voor transacties die afhankelijk zijn van on-chain willekeur.
Tijdens de eerdere herstartronde was de deelname niet hoog genoeg voor het DKG-proces van de volgende epoch, waardoor willekeur zoals ontworpen werd uitgeschakeld. Het probleem was dat de mislukking niet naar schijf werd geschreven. Toen validators opnieuw herstartten, kwamen ze terug zonder te onthouden dat DKG was mislukt.
"Doordat validators niet meer onthielden dat DKG was mislukt, kon geen van beide plaatsvinden, groeide de gepauzeerde wachtrij en bleef de end-of-epoch-logica — die die wachtrij moet leegmaken voor het sluiten — wachten op een DKG die nooit zou komen," aldus de foundation.
De oplossing bestond uit twee delen: het bewaren van de DKG-status bij herstarts en het toevoegen van een mechanisme waarmee validators de vastgelopen epoch op een gecoördineerd punt konden sluiten. Dat mechanisme werd eenmalig gebruikt om de getroffen epoch te sluiten, waarna het netwerk naar de volgende epoch overging en de willekeur werd hersteld.
De postmortem fraamde de storingen als een bredere engineeringles voor Sui. De foundation zei dat de veerkracht aan het einde van de epoch verdere investering nodig heeft, met name op het gebied van graceful degradation en operationele force-close-mechanismen. Ze zei ook dat gasbetalingen hetzelfde niveau van nauwkeurigheid verdienen als de Move VM of Mysticeti-consensus, gezien de interactie met verrekening, conserveringscontroles en planning.
Op het moment van publicatie werd SUI verhandeld tegen $0,8798.



