Quando si è verificato il problema, il team di ingegneri di Sui ha rapidamente diagnosticato il problema e pubblicato una soluzione, che è stata successivamente distribuita dai nodi di validazione, riducendo al minimo il tempo di inattività della rete.

Panoramica degli eventi

Tra le 1:15 e le 3:45 del mattino del 21 novembre 2024 (ora della costa del Pacifico) (ora del fuso orario +8: 21 novembre 2024 dalle 17:15 alle 19:45), si è verificata un'interruzione totale della rete principale di Sui. Tutti i nodi di validazione sono caduti in un ciclo di crash, causando un'interruzione completa dell'elaborazione delle transazioni.

Causa del problema

L'assert! nel codice del controllo del blocco ha innescato un errore: se il costo di esecuzione stimato è zero, provoca il crash dei nodi di validazione. Questo problema si verifica solo se sono soddisfatte tutte le seguenti condizioni:

1. Il controllo del blocco è stato impostato sulla modalità TotalGasBudgetWithCap:

  • Questa modalità è stata attivata brevemente nella versione del protocollo 63 e successivamente disattivata, per essere riattivata nella versione 68 del protocollo con il pianificatore cumulativo.

2. La rete ha ricevuto transazioni che contenevano simultaneamente le seguenti condizioni:

  • Input di oggetti condivisi variabili

  • Zero MoveCall istruzioni

Quando la rete riceve transazioni di questo tipo, tutti i nodi di validazione crashano immediatamente.

Cos'è il controllo del blocco?

L'architettura basata su oggetti della rete Sui supporta il processamento parallelo su larga scala di diverse transazioni utente, cosa che la maggior parte delle altre reti non può realizzare. Tuttavia, se più transazioni scrivono contemporaneamente sullo stesso oggetto condiviso, queste transazioni devono essere eseguite in ordine e c'è un limite alla quantità di elaborazione delle transazioni che possono coinvolgere quell'oggetto specifico.

Il sistema di controllo del blocco previene il sovraccarico della rete limitando la velocità delle transazioni che scrivono sullo stesso oggetto condiviso a causa di checkpoint che richiedono troppo tempo per essere eseguiti.

Abbiamo recentemente aggiornato il sistema di controllo del blocco per migliorare l'uso degli oggetti condivisi stimando più accuratamente la complessità delle transazioni. Tuttavia, nel codice della nuova modalità TotalGasBudgetWithCap c'era un bug che ha causato questo problema.

Come risolvere il problema?

Dopo la definizione del problema, la correzione del codice è stata molto diretta (vedi PR #20365). Questa correzione è stata distribuita sulla rete principale (v1.37.4) e sulla rete di test (v1.38.1).

PR #20365: Modificato bump_object_execution_cost per utilizzare l'addizione saturata e consentire transazioni a costo zero.

🌟 Rete principale v1.37.4:https://github.com/MystenLabs/sui/releases

Grazie alla risposta attiva della comunità dei nodi di validazione, sono stati necessari solo 15 minuti per ripristinare il corretto funzionamento della rete Sui dopo la pubblicazione della correzione.

Cosa abbiamo imparato?

  • Il sistema di rilevamento e risposta agli eventi ha funzionato bene: Allarmi automatici e report della comunità sono stati attivati quasi contemporaneamente, abbiamo rapidamente mobilitato le risorse del team per la diagnosi e la riparazione.

  • La comunità dei nodi di validazione ha mostrato prestazioni eccellenti: Dopo la pubblicazione della correzione, la rete Sui è tornata quasi immediatamente alla normalità.

Misure preventive

  1. Migliorare il sistema di test: Aggiungere più tipi di transazioni competitive simili a quelle che hanno innescato questo crash per scoprire problemi potenziali.

  2. Ottimizzare il processo di costruzione: Aumentare la velocità di generazione per il debugging e la pubblicazione dei file binari, riducendo ulteriormente i tempi di risposta agli eventi. Parte del tempo di inattività durante questo processo è stata causata dall'attesa per la costruzione della versione pubblicata.

Grazie al supporto della comunità e dei nodi di validazione, abbiamo garantito un rapido ripristino della rete Sui!