Tổng quan sự kiện
Giữa khoảng 1:15 đến 3:45 sáng Thái Bình Dương vào ngày 21 tháng 11 năm 2024 (Giờ Đông 8:00: 5:15 đến 7:45 chiều ngày 21 tháng 11 năm 2024), mạng chính Sui đã gặp phải sự ngừng hoạt động hoàn toàn. Tất cả các nút xác thực đều rơi vào vòng lặp sụp đổ, dẫn đến việc xử lý giao dịch hoàn toàn bị gián đoạn.
Nguyên nhân vấn đề
Mã kiểm soát tắc nghẽn đã kích hoạt lỗi assert!: Nếu chi phí thực thi ước tính là zero, điều này sẽ dẫn đến sự cố nút xác thực. Vấn đề này xảy ra cần thỏa mãn tất cả các điều kiện sau:
1. Kiểm soát tắc nghẽn được đặt ở chế độ TotalGasBudgetWithCap:
Chế độ này đã bị thu hồi sau khi được kích hoạt tạm thời trong phiên bản giao thức 63 và sau đó được kích hoạt lại trong phiên bản giao thức 68 cùng với bộ lập lịch tích lũy.
2. Mạng nhận được giao dịch đồng thời chứa các điều kiện sau:
Đối tượng chia sẻ biến đổi đầu vào
Không có lệnh MoveCall nào
Khi mạng nhận được giao dịch như vậy, tất cả các nút xác thực ngay lập tức sụp đổ.
Kiểm soát tắc nghẽn là gì?
Mạng Sui dựa trên kiến trúc đối tượng hỗ trợ xử lý song song quy mô lớn các giao dịch người dùng khác nhau, điều này không thể thực hiện trên hầu hết các mạng khác. Tuy nhiên, nếu nhiều giao dịch được ghi vào cùng một đối tượng chia sẻ đồng thời, thì các giao dịch này phải được thực hiện theo thứ tự và có một giới hạn về khối lượng giao dịch liên quan đến đối tượng cụ thể đó.
Hệ thống kiểm soát tắc nghẽn ngăn chặn mạng quá tải do các điểm kiểm tra thực thi quá lâu bằng cách giới hạn tốc độ giao dịch viết vào cùng một đối tượng chia sẻ.
Chúng tôi đã nâng cấp hệ thống kiểm soát tắc nghẽn gần đây để cải thiện hiệu suất sử dụng đối tượng chia sẻ bằng cách ước tính độ phức tạp giao dịch chính xác hơn. Nhưng trong mã của chế độ mới TotalGasBudgetWithCap có một lỗi dẫn đến sự cố này.
Làm thế nào để giải quyết vấn đề?
Sau khi vấn đề được xác định, việc sửa mã rất đơn giản (xem PR #20365). Bản sửa này đã được triển khai trên mạng chính (v1.37.4) và mạng thử nghiệm (v1.38.1).
PR #20365: Đã sửa đổi bump_object_execution_cost để sử dụng phép cộng bão hòa và cho phép giao dịch có chi phí bằng 0.
🌟 Mạng chính v1.37.4:
https://github.com/MystenLabs/sui/releases
Dưới sự phản hồi tích cực từ cộng đồng nút xác thực, chỉ mất 15 phút từ khi phát hành bản sửa lỗi đến khi mạng Sui trở lại hoạt động bình thường.
Chúng ta đã học được gì?
Hệ thống phát hiện và phản ứng sự kiện hoạt động tốt: Cảnh báo tự động và báo cáo từ cộng đồng gần như đồng thời được kích hoạt, chúng tôi nhanh chóng huy động nguồn lực đội ngũ để chẩn đoán và sửa chữa.
Cộng đồng nút xác thực hoạt động xuất sắc: Sau khi phát hành bản sửa lỗi, mạng Sui gần như ngay lập tức trở lại hoạt động bình thường.
Biện pháp phòng ngừa
Cải thiện hệ thống kiểm tra: Tăng cường thêm nhiều loại giao dịch đối kháng tương tự gây ra sự sụp đổ này để phát hiện các vấn đề tiềm ẩn.
Tối ưu hóa quy trình xây dựng: Tăng tốc độ tạo ra các tệp nhị phân debug và phát hành, từ đó giảm thời gian phản ứng sự kiện hơn nữa. Một phần thời gian trong quá trình gián đoạn này là do chờ đợi xây dựng phiên bản phát hành.
Cảm ơn sự hỗ trợ của cộng đồng và các nút xác thực, đã cùng nhau đảm bảo sự phục hồi nhanh chóng của mạng Sui!