Selon un rapport post-mortem de la Sui Foundation, le réseau principal de Sui a subi trois pannes distinctes les 28 et 29 mai après que la version 1.72 du réseau a exposé des cas limites dans la logique de facturation du gas et le redémarrage des validateurs. La fondation a déclaré que les problèmes ont depuis été résolus, que l'activité du réseau a repris et que « aucun fond utilisateur n'était en danger ».
Les incidents ont commencé jeudi 28 mai, lorsque le réseau principal de Sui s'est arrêté vers 7h (heure du Pacifique) et est resté hors service jusqu'à environ 13h30 (heure du Pacifique). Une seconde panne a suivi vendredi matin, commençant vers 5h (heure du Pacifique) et se terminant vers 8h30 (heure du Pacifique). Le troisième arrêt a débuté vendredi après-midi vers 13h30 (heure du Pacifique) et a été résolu vers 19h20 (heure du Pacifique).
Selon la fondation, les deux premières pannes provenaient de bugs de plantage liés à l'interaction entre la logique de facturation du gas et la mise à jour 1.72 de Sui, qui a introduit les soldes d'adresse. La troisième panne était distincte, déclenchée lors d'un changement d'époque planifié après que les redémarrages des validateurs ont exposé un bug latent dans la manière dont l'état d'aléatoire était préservé.
« Pendant les pannes, aucun fond utilisateur n'était en danger, et le réseau n'a annulé aucune transaction validée à son retour », a déclaré la Sui Foundation. « À l'heure actuelle, les validateurs ont entièrement résolu les problèmes connus causés à la fois par le bug initial de facturation du gas et par le bug de l'état d'aléatoire, et l'activité du réseau a repris. »
Le bug de facturation du gas de Sui a déclenché les premiers arrêts
Le premier problème concernait la nouvelle fonctionnalité de solde d'adresse de Sui, qui permet aux utilisateurs de stocker des fonds et de payer le gas sans dépendre uniquement des objets "coin". Les transactions sur Sui peuvent payer le gas via les soldes d'adresse, les objets "coin" ou une structure hybride combinant les deux.
Le cas limite est apparu dans ce chemin de paiement hybride. Lorsqu'une transaction tentait de dépenser un solde d'adresse qui ne pouvait pas couvrir des transactions concurrentes, l'ordonnanceur l'annulait correctement avec une erreur InsufficientFundsForWithdraw. Mais plus tard, pendant le "gas smashing" — le processus de fusion des "coins" d'entrée en une seule "coin" de paiement de gas — la même réservation pouvait encore tenter de débiter des fonds à nouveau.
Dans l'explication de la fondation, le plantage ne s'est pas produit directement pendant le "gas smashing" mais pendant le règlement, lorsque les variations de soldes étaient réconciliées par une transaction système. Une variation négative appliquée à un solde nul a provoqué un dépassement inférieur.
La solution immédiate était conceptuellement simple : éviter le "gas smashing" lorsqu'une transaction est annulée avec InsufficientFundsForWithdraw. Les validateurs ont adopté ce correctif jeudi, ramenant le réseau en ligne. Mais la fondation a reconnu que le correctif était une mesure intérimaire, choisie pour rétablir le réseau pendant que les ingénieurs développaient une solution plus complète.
« Changer la logique du gas est une opération délicate », a écrit la fondation. « Comme expliqué ci-dessus, il existe des interactions complexes entre les soldes d'adresse et les "coins". Hormis la correction de bugs, les changements de logique du gas doivent préserver tout le comportement précédent ou utiliser une porte de version appropriée. »
Ce correctif intérimaire contenait une faiblesse connue. Si une transaction avait plusieurs raisons d'annulation, une autre erreur pouvait masquer la condition InsufficientFundsForWithdraw. Lorsque cela s'est produit vendredi matin, le chemin du dépassement inférieur d'origine pouvait toujours être atteint, provoquant un second arrêt.
Le changement d'époque a exposé un bug de l'état d'aléatoire
La troisième panne est survenue après que le réseau avait repris son fonctionnement normal vendredi matin. Au prochain changement d'époque planifié, les validateurs n'ont pas pu terminer la transition en raison d'un bug lié au protocole de génération de clés distribuées de Sui (DKG), qui amorce l'aléatoire pour les transactions dépendant d'un aléatoire "on-chain".
Pendant le cycle de redémarrage précédent, la participation n'était pas assez élevée pour le processus DKG de l'époque suivante, donc l'aléatoire a été désactivé comme prévu. Le problème était que la constatation d'échec n'a pas été écrite sur le disque. Lorsque les validateurs ont redémarré à nouveau, ils sont revenus sans se souvenir que le DKG avait échoué.
« Les validateurs ne se souvenant plus que le DKG avait échoué, ni l'un ni l'autre ne pouvait se produire, la file d'attente en pause a grossi, et la logique de fin d'époque — qui doit vider cette file avant de fermer — est restée en attente d'un DKG qui ne viendrait jamais », a déclaré la fondation.
Le correctif comportait deux parties : persister le statut DKG entre les redémarrages et ajouter un mécanisme permettant aux validateurs de clore l'époque bloquée à un moment coordonné. Ce mécanisme a été utilisé une fois pour clore l'époque concernée, après quoi le réseau est passé à l'époque suivante et l'aléatoire a été restauré.
Le post-mortem a présenté ces pannes comme une leçon d'ingénierie plus large pour Sui. La fondation a déclaré que la résilience en fin d'époque nécessitait davantage d'investissements, en particulier autour de la dégradation gracieuse et des mécanismes de fermeture forcée opérationnels. Elle a également déclaré que la facturation du gas méritait le même niveau de rigueur que le Move VM ou le consensus Mysticeti, compte tenu de son interaction avec le règlement, les vérifications de conservation et l'ordonnancement.
Au moment de la rédaction, le SUI s'échangeait à 0,8798 $.







