Ringkasan peristiwa

Antara pukul 1:15 hingga 3:45 pagi waktu Pasifik pada 21 November 2024 (waktu zona timur: 21 November 2024, pukul 5:15 hingga 7:45 sore), jaringan utama Sui mengalami gangguan total. Semua node validasi terjebak dalam siklus crash, menyebabkan pemrosesan transaksi sepenuhnya terhenti.

Penyebab masalah

Assert! dalam kode kontrol pemblokiran memicu kesalahan: jika biaya eksekusi yang diperkirakan adalah nol, maka akan menyebabkan node validasi crash. Masalah ini terjadi jika semua kondisi berikut terpenuhi:

1. Kontrol pemblokiran diatur ke mode TotalGasBudgetWithCap:

  • Mode ini dicabut setelah diaktifkan secara singkat dalam versi protokol 63, dan kemudian diaktifkan kembali dalam versi protokol 68 dengan penjadwalan kumulatif.

2. Jaringan menerima transaksi yang secara bersamaan memenuhi kondisi berikut:

  • Input objek bersama yang dapat diubah

  • Nol instruksi MoveCall

Ketika jaringan menerima transaksi semacam ini, semua node validasi langsung mengalami crash.

Apa itu kontrol pemblokiran?

Arsitektur berbasis objek jaringan Sui mendukung pemrosesan paralel berskala besar untuk transaksi pengguna yang berbeda, yang tidak dapat dilakukan di sebagian besar jaringan lainnya. Namun, jika beberapa transaksi secara bersamaan menulis ke objek bersama yang sama, transaksi tersebut harus dieksekusi secara berurutan, dan ada batasan pada jumlah pemrosesan transaksi yang melibatkan objek tertentu tersebut.

Sistem kontrol pemblokiran mencegah jaringan dari kelebihan beban akibat titik pemeriksaan yang memakan waktu lama dengan membatasi laju transaksi yang menulis ke objek bersama yang sama.

Kami baru saja meningkatkan sistem kontrol pemblokiran untuk meningkatkan pemanfaatan objek bersama dengan memperkirakan kompleksitas transaksi dengan lebih akurat. Namun, ada bug dalam kode mode baru TotalGasBudgetWithCap yang menyebabkan masalah ini.

Bagaimana cara menyelesaikan masalah?

Setelah masalah ditetapkan, perbaikan kode cukup langsung (lihat PR #20365). Perbaikan ini telah diterapkan di jaringan utama (v1.37.4) dan jaringan pengujian (v1.38.1).

PR #20365: Mengubah bump_object_execution_cost untuk menggunakan penjumlahan jenuh dan mengizinkan transaksi dengan biaya 0.

🌟 Jaringan utama v1.37.4:

https://github.com/MystenLabs/sui/releases

Berkat respons aktif dari komunitas node validasi, hanya dibutuhkan 15 menit dari rilis perbaikan hingga jaringan Sui kembali normal.

Apa yang kita pelajari?

  • Sistem deteksi dan respons peristiwa berjalan dengan baik: Alarm otomatis dan laporan komunitas hampir terpicu secara bersamaan, dan kami segera mengerahkan sumber daya tim untuk diagnosis dan perbaikan.

  • Komunitas node validasi tampil luar biasa: Setelah rilis perbaikan, jaringan Sui hampir segera kembali normal.

Langkah pencegahan

  1. Sistem pengujian yang ditingkatkan: Menambahkan lebih banyak jenis transaksi yang bersifat antagonis yang memicu crash ini untuk menemukan masalah potensial.

  2. Proses pembangunan yang dioptimalkan: Meningkatkan kecepatan penghasilan file biner untuk debugging dan rilis, serta lebih lanjut mengurangi waktu respons peristiwa. Sebagian waktu selama gangguan ini dihabiskan untuk menunggu pembangunan versi rilis.

Terima kasih kepada komunitas dan node validasi atas dukungannya, yang bersama-sama memastikan pemulihan cepat jaringan Sui!