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 gaz et de redémarrage des validateurs, selon un bilan post-mortem de la Sui Foundation. La fondation a indiqué que les problèmes ont depuis été résolus, que l'activité du réseau a repris et qu'« aucun fonds d'utilisateur n'était en danger ».
Les incidents ont débuté le jeudi 28 mai, lorsque le réseau principal de Sui s'est arrêté vers 16h00 UTC et est resté hors ligne jusqu'à environ 22h30 UTC. Une deuxième panne a suivi vendredi matin, débutant vers 13h00 UTC et se terminant vers 16h30 UTC. La troisième interruption a commencé vendredi après-midi à environ 21h30 UTC et a été résolue vers 03h20 UTC le lendemain.
Selon la fondation, les deux premières pannes sont dues à des bugs de plantage liés à l'interaction entre la logique de facturation du gaz et la mise à jour 1.72 de Sui, qui a introduit les soldes d'adresses. 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 de l'aléatoire était préservé.
« Pendant les pannes, aucun fonds d'utilisateur n'était en danger, et le réseau n'a pas annulé les transactions validées lors de sa reprise », a déclaré la Sui Foundation. « À ce jour, les validateurs ont pleinement résolu les problèmes connus causés par le bug original de facturation du gaz et le bug de l'état de l'aléatoire, et l'activité du réseau a repris. »
Le premier problème était centré sur la nouvelle fonctionnalité de solde d'adresse de Sui, qui permet aux utilisateurs de stocker des fonds et de payer le gaz sans dépendre uniquement des objets de pièces. Les transactions sur Sui peuvent payer le gaz via des soldes d'adresses, des objets de pièces, ou une structure hybride combinant les deux.
Le cas limite est apparu dans ce chemin de gaz hybride. Lorsqu'une transaction tentait de dépenser depuis un solde d'adresse ne pouvant pas couvrir les transactions concurrentes, le planificateur l'annulait correctement avec une erreur InsufficientFundsForWithdraw. Mais plus tard, lors du gas smashing — le processus de combinaison des pièces d'entrée en une seule pièce payant le gaz — la même réservation pouvait encore tenter de débiter à nouveau les fonds.
Dans l'explication de la fondation, le plantage ne s'est pas produit directement lors du gas smashing mais lors de la phase de règlement, lorsque les deltas de solde étaient réconciliés par une transaction système. Un delta négatif appliqué à un solde nul a provoqué un underflow.
La correction immédiate était conceptuellement simple : éviter le gas smashing lorsqu'une transaction est annulée avec InsufficientFundsForWithdraw. Les validateurs ont adopté cette correction le jeudi, remettant le réseau en ligne. Mais la fondation a reconnu que le correctif était une mesure provisoire, choisie pour restaurer le réseau pendant que les ingénieurs développaient une solution plus complète.
« Modifier la logique du gaz est une opération délicate », a écrit la fondation. « Comme expliqué ci-dessus, il existe des interactions complexes entre les soldes d'adresses et les pièces. En dehors de la correction de bugs, les modifications de la logique du gaz doivent préserver tous les comportements antérieurs ou utiliser un contrôle de version approprié. »
Ce correctif provisoire 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 d'underflow original pouvait toujours être atteint, provoquant une deuxième interruption.
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 réussi à terminer la transition en raison d'un bug lié au protocole de génération de clés distribuées de Sui, ou DKG, qui amorce l'aléatoire pour les transactions dépendant de l'aléatoire on-chain.
Lors du cycle de redémarrage précédent, la participation n'était pas suffisante pour le processus DKG de l'époque suivante, de sorte que l'aléatoire a été désactivé comme prévu. Le problème était que le verdict d'échec n'avait pas été écrit 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 suspendue s'est allongée, et la logique de fin d'époque — qui doit vider cette file d'attente avant de se fermer — était en attente d'un DKG qui ne viendrait jamais », a déclaré la fondation.
La correction comprenait deux parties : la persistance du statut DKG entre les redémarrages et l'ajout d'un mécanisme permettant aux validateurs de fermer l'époque bloquée à un point coordonné. Ce mécanisme a été utilisé une fois pour fermer l'époque affectée, après quoi le réseau est passé à l'époque suivante et l'aléatoire a été restauré.
Le bilan post-mortem a présenté les pannes comme une leçon d'ingénierie plus large pour Sui. La fondation a déclaré que la résilience de fin d'époque nécessite des investissements supplémentaires, notamment autour de la dégradation gracieuse et des mécanismes de fermeture forcée opérationnelle. Elle a également indiqué que la facturation du gaz mérite le même niveau de rigueur que la Move VM ou le consensus Mysticeti, compte tenu de son interaction avec la phase de règlement, les vérifications de conservation et la planification.
Au moment de la rédaction, SUI s'échangeait à 0,8798 $.


