Το κύριο δίκτυο του Sui υπέστη τρεις ξεχωριστές διακοπές λειτουργίας στις 28 και 29 Μαΐου, αφού η έκδοση 1.72 του δικτύου αποκάλυψε ακραίες περιπτώσεις στη λογική χρέωσης gas και στη λογική επανεκκίνησης επικυρωτών, σύμφωνα με ανάλυση μεταμνήμης από το Ίδρυμα Sui. Το ίδρυμα ανέφερε ότι τα ζητήματα έχουν πλέον επιλυθεί, η δραστηριότητα του δικτύου έχει επανεκκινήσει και «κανένα κεφάλαιο χρηστών δεν ήταν σε κίνδυνο».
Τα περιστατικά ξεκίνησαν την Πέμπτη, 28 Μαΐου, όταν το κύριο δίκτυο του Sui διακόπηκε γύρω στις 17:00 ώρα Ελλάδος και παρέμεινε εκτός λειτουργίας έως περίπου τις 23:30 ώρα Ελλάδος. Μια δεύτερη διακοπή ακολούθησε το πρωί της Παρασκευής, ξεκινώντας περίπου στις 15:00 ώρα Ελλάδος και τελειώνοντας γύρω στις 18:30 ώρα Ελλάδος. Η τρίτη διακοπή ξεκίνησε το απόγευμα της Παρασκευής, περίπου στις 23:30 ώρα Ελλάδος, και επιλύθηκε γύρω στις 05:20 ώρα Ελλάδος (Σάββατο).
Σύμφωνα με το ίδρυμα, οι δύο πρώτες διακοπές προέκυψαν από σφάλματα κατάρρευσης που αφορούσαν την αλληλεπίδραση μεταξύ της λογικής χρέωσης gas και της αναβάθμισης 1.72 του Sui, η οποία εισήγαγε υπόλοιπα διευθύνσεων. Η τρίτη διακοπή ήταν ξεχωριστή, ενεργοποιήθηκε κατά τη διάρκεια προγραμματισμένης αλλαγής εποχής αφού οι επανεκκινήσεις επικυρωτών αποκάλυψαν ένα λανθάνον σφάλμα στον τρόπο διατήρησης της κατάστασης τυχαιότητας.
«Κατά τη διάρκεια των διακοπών, κανένα κεφάλαιο χρηστών δεν ήταν σε κίνδυνο και το δίκτυο δεν αναίρεσε καμία δεσμευμένη συναλλαγή κατά την επανεκκίνησή του», δήλωσε το Ίδρυμα Sui. «Από τώρα, οι επικυρωτές έχουν πλήρως αντιμετωπίσει τα γνωστά ζητήματα που προκλήθηκαν τόσο από το αρχικό σφάλμα χρέωσης gas όσο και από το σφάλμα κατάστασης τυχαιότητας, και η δραστηριότητα του δικτύου έχει επαναληφθεί.»
Το πρώτο πρόβλημα επικεντρώθηκε στη νέα λειτουργία υπολοίπου διεύθυνσης του Sui, η οποία επιτρέπει στους χρήστες να αποθηκεύουν κεφάλαια και να πληρώνουν για gas χωρίς να βασίζονται αποκλειστικά σε αντικείμενα νομίσματος. Οι συναλλαγές στο Sui μπορούν να πληρώνουν gas μέσω υπολοίπων διεύθυνσης, αντικειμένων νομίσματος ή μιας υβριδικής δομής που συνδυάζει και τα δύο.
Η ακραία περίπτωση εμφανίστηκε σε αυτή την υβριδική διαδρομή gas. Όταν μια συναλλαγή προσπάθησε να δαπανήσει από ένα υπόλοιπο διεύθυνσης που δεν μπορούσε να καλύψει ανταγωνιστικές συναλλαγές, ο χρονοπρογραμματιστής την ακύρωσε σωστά με σφάλμα InsufficientFundsForWithdraw. Αλλά αργότερα, κατά τη διάρκεια του gas smashing — της διαδικασίας συνδυασμού εισερχόμενων νομισμάτων σε ένα ενιαίο νόμισμα πληρωμής gas — η ίδια δέσμευση μπορούσε ακόμα να επιχειρήσει να χρεώσει κεφάλαια ξανά.
Στην εξήγηση του ιδρύματος, η κατάρρευση δεν συνέβη άμεσα κατά τη διάρκεια του gas smashing αλλά κατά τον διακανονισμό, όταν τα δέλτα υπολοίπου συμφιλιώθηκαν από μια συναλλαγή συστήματος. Ένα αρνητικό δέλτα που εφαρμόστηκε σε μηδενικό υπόλοιπο προκάλεσε υπορροή.
Η άμεση διόρθωση ήταν εννοιολογικά απλή: αποφυγή gas smashing όταν μια συναλλαγή ακυρώνεται με InsufficientFundsForWithdraw. Οι επικυρωτές υιοθέτησαν αυτή τη διόρθωση την Πέμπτη, επαναφέροντας το δίκτυο σε λειτουργία. Αλλά το ίδρυμα παραδέχτηκε ότι η επιδιόρθωση ήταν προσωρινό μέτρο, που επιλέχθηκε για την αποκατάσταση του δικτύου ενώ οι μηχανικοί ανέπτυσσαν μια πιο ολοκληρωμένη λύση.
«Η αλλαγή της λογικής gas είναι μια λεπτή λειτουργία», έγραψε το ίδρυμα. «Όπως εξηγήθηκε παραπάνω, υπάρχουν πολύπλοκες αλληλεπιδράσεις μεταξύ υπολοίπων διεύθυνσης και νομισμάτων. Εκτός από τη διόρθωση σφαλμάτων, οι αλλαγές λογικής gas πρέπει να διατηρούν όλη την προηγούμενη συμπεριφορά ή να χρησιμοποιούν κατάλληλο έλεγχο έκδοσης.»
Αυτή η προσωρινή επιδιόρθωση περιείχε μια γνωστή αδυναμία. Εάν μια συναλλαγή είχε πολλούς λόγους ακύρωσης, ένα άλλο σφάλμα θα μπορούσε να αποκρύψει τη συνθήκη InsufficientFundsForWithdraw. Όταν αυτό συνέβη το πρωί της Παρασκευής, η αρχική διαδρομή υπορροής μπορούσε ακόμα να επιτευχθεί, προκαλώντας μια δεύτερη διακοπή.
Η τρίτη διακοπή ήρθε αφού το δίκτυο επανήλθε σε κανονική λειτουργία το πρωί της Παρασκευής. Στην επόμενη προγραμματισμένη αλλαγή εποχής, οι επικυρωτές απέτυχαν να ολοκληρώσουν τη μετάβαση λόγω ενός σφάλματος συνδεδεμένου με το πρωτόκολλο κατανεμημένης δημιουργίας κλειδιών του Sui, ή DKG, το οποίο εκκινεί την τυχαιότητα για συναλλαγές που εξαρτώνται από τυχαιότητα εντός αλυσίδας.
Κατά τον προηγούμενο κύκλο επανεκκίνησης, η συμμετοχή δεν ήταν αρκετά υψηλή για τη διαδικασία DKG της επόμενης εποχής, οπότε η τυχαιότητα απενεργοποιήθηκε όπως σχεδιάστηκε. Το πρόβλημα ήταν ότι η ετυμηγορία αποτυχίας δεν γράφτηκε στον δίσκο. Καθώς οι επικυρωτές επανεκκίνησαν ξανά, επανήλθαν χωρίς να θυμούνται ότι το DKG είχε αποτύχει.
«Καθώς οι επικυρωτές δεν θυμόντουσαν πλέον ότι το DKG είχε αποτύχει, κανένα από τα δύο δεν μπορούσε να συμβεί, η παυσαρισμένη ουρά μεγάλωνε και η λογική τέλους εποχής — η οποία πρέπει να αδειάσει αυτή την ουρά πριν από το κλείσιμο — έμεινε να περιμένει ένα DKG που δεν θα ερχόταν ποτέ», ανέφερε το ίδρυμα.
Η διόρθωση είχε δύο μέρη: διατήρηση της κατάστασης DKG κατά τις επανεκκινήσεις και προσθήκη ενός μηχανισμού που επέτρεπε στους επικυρωτές να κλείσουν την κολλημένη εποχή σε ένα συντονισμένο σημείο. Αυτός ο μηχανισμός χρησιμοποιήθηκε μία φορά για να κλείσει η επηρεαζόμενη εποχή, μετά την οποία το δίκτυο μετακινήθηκε στην επόμενη εποχή και η τυχαιότητα αποκαταστάθηκε.
Η ανάλυση μεταμνήμης πλαισίωσε τις διακοπές ως ένα ευρύτερο μάθημα μηχανικής για το Sui. Το ίδρυμα ανέφερε ότι η ανθεκτικότητα τέλους εποχής χρειάζεται περαιτέρω επένδυση, ιδιαίτερα γύρω από ομαλή υποβάθμιση και μηχανισμούς επιχειρησιακής αναγκαστικής κλεισίματος. Επίσης ανέφερε ότι η χρέωση gas αξίζει το ίδιο επίπεδο αυστηρότητας με το Move VM ή τη συναίνεση Mysticeti, δεδομένης της αλληλεπίδρασής της με τον διακανονισμό, τους ελέγχους διατήρησης και τον χρονοπρογραμματισμό.
Κατά τη στιγμή της δημοσίευσης, το SUI διαπραγματευόταν στα $0,8798.



