Mainnet của Sui đã phải chịu ba lần gián đoạn riêng biệt vào ngày 28 và 29 tháng 5 sau khi bản phát hành 1.72 của mạng lộ ra các trường hợp biên trong logic tính phí gas và logic khởi động lại trình xác thực, theo một báo cáo hậu sự kiện từ Sui Foundation. Tổ chức này cho biết các vấn đề hiện đã được giải quyết, hoạt động mạng đã nối lại và "không có nguy cơ nào đe dọa đến quỹ của người dùng."
Sự cố bắt đầu vào thứ Năm, ngày 28 tháng 5, khi mainnet của Sui dừng hoạt động vào khoảng 7 giờ sáng giờ PT và vẫn ngừng hoạt động cho đến khoảng 1:30 chiều giờ PT. Một lần gián đoạn thứ hai xảy ra vào sáng thứ Sáu, bắt đầu từ khoảng 5 giờ sáng giờ PT và kết thúc vào khoảng 8:30 sáng giờ PT. Lần dừng thứ ba bắt đầu vào chiều thứ Sáu lúc khoảng 1:30 chiều giờ PT và được khắc phục vào khoảng 7:20 tối giờ PT.
Theo Sui Foundation, hai lần gián đoạn đầu tiên bắt nguồn từ các lỗi crash liên quan đến sự tương tác giữa logic tính phí gas và bản nâng cấp 1.72 của Sui, bản cập nhật đã giới thiệu tính năng số dư địa chỉ. Lần gián đoạn thứ ba là riêng biệt, được kích hoạt trong quá trình thay đổi epoch theo lịch trình sau khi việc khởi động lại các trình xác thực làm lộ ra một lỗi tiềm ẩn trong cách trạng thái ngẫu nhiên được lưu giữ.
"Trong các lần gián đoạn, không có nguy cơ nào đe dọa đến quỹ của người dùng, và mạng không hoàn tác bất kỳ giao dịch nào đã được xác nhận khi nó nối lại hoạt động," Sui Foundation cho biết. "Tính đến thời điểm hiện tại, các trình xác thực đã hoàn toàn xử lý các vấn đề đã biết gây ra bởi cả lỗi tính phí gas ban đầu và lỗi trạng thái ngẫu nhiên, và hoạt động mạng đã được nối lại."
Lỗi Tính Phí Gas Sui Kích Hoạt Các Lần Dừng Hoạt Động Ban Đầu
Vấn đề đầu tiên tập trung vào tính năng số dư địa chỉ mới của Sui, tính năng cho phép người dùng lưu trữ tiền và trả phí gas mà không chỉ phụ thuộc vào các đối tượng coin. Các giao dịch trên Sui có thể trả phí gas thông qua số dư địa chỉ, đối tượng coin, hoặc một cấu trúc lai kết hợp cả hai.
Trường hợp biên xuất hiện trong con đường gas lai đó. Khi một giao dịch cố gắng chi tiêu từ một số dư địa chỉ không đủ để xử lý các giao dịch cạnh tranh, trình lập lịch đã hủy giao dịch đó một cách chính xác với lỗi InsufficientFundsForWithdraw. Nhưng sau đó, trong quá trình 'gas smashing' — quá trình kết hợp các coin đầu vào thành một coin duy nhất để trả phí gas — việc dành quyền chi tiêu tương tự vẫn có thể cố gắng ghi nợ lại.
Trong giải thích của tổ chức, vụ crash không xảy ra trực tiếp trong quá trình gas smashing mà xảy ra trong quá trình settlement, khi các delta số dư được cân đối bởi một giao dịch hệ thống. Một delta âm được áp dụng cho một số dư bằng 0 đã gây ra lỗi tràn dưới (underflow).
Biện pháp khắc phục ngay lập tức về mặt khái niệm là khá đơn giản: tránh thực hiện gas smashing khi một giao dịch bị hủy với lỗi InsufficientFundsForWithdraw. Các trình xác thực đã áp dụng biện pháp sửa chữa đó vào thứ Năm, đưa mạng trở lại trạng thái trực tuyến. Nhưng tổ chức thừa nhận rằng bản vá đó là một biện pháp tạm thời, được chọn để khôi phục mạng trong khi các kỹ sư phát triển một giải pháp hoàn chỉnh hơn.
"Thay đổi logic gas là một thao tác tinh tế," tổ chức viết. "Như đã giải thích ở trên, có những tương tác phức tạp giữa số dư địa chỉ và coin. Ngoài việc sửa lỗi, các thay đổi logic gas phải giữ nguyên tất cả hành vi trước đó hoặc sử dụng cơ chế kiểm soát phiên bản phù hợp."
Bản vá tạm thời đó chứa một điểm yếu đã biết. Nếu một giao dịch có nhiều lý do hủy, một lỗi khác có thể che lấp điều kiện InsufficientFundsForWithdraw. Khi điều đó xảy ra vào sáng thứ Sáu, con đường dẫn đến lỗi tràn dưới ban đầu vẫn có thể được kích hoạt, gây ra lần dừng hoạt động thứ hai.
Thay Đổi Epoch Lộ Ra Lỗi Trạng Thái Ngẫu Nhiên
Lần gián đoạn thứ ba xảy ra sau khi mạng đã nối lại hoạt động bình thường vào sáng thứ Sáu. Tại lần thay đổi epoch theo lịch trình tiếp theo, các trình xác thực không thể hoàn tất quá trình chuyển đổi do một lỗi liên quan đến giao thức tạo khóa phân tán (DKG) của Sui, giao thức này khởi động tính ngẫu nhiên cho các giao dịch phụ thuộc vào tính ngẫu nhiên trên chuỗi.
Trong chu kỳ khởi động lại trước đó, mức độ tham gia không đủ cao cho quá trình DKG của epoch tiếp theo, vì vậy tính ngẫu nhiên đã bị tắt như thiết kế. Vấn đề là kết luận thất bại đó đã không được ghi vào ổ đĩa. Khi các trình xác thực khởi động lại một lần nữa, chúng khởi động mà không nhớ rằng DKG đã thất bại.
"Khi các trình xác thực không còn nhớ rằng DKG đã thất bại, không có điều gì có thể xảy ra, hàng đợi bị tạm dừng ngày càng tăng, và logic kết thúc epoch — vốn phải làm rỗng hàng đợi đó trước khi đóng — cứ chờ đợi DKG mà sẽ không bao giờ đến," tổ chức cho biết.
Biện pháp khắc phục có hai phần: duy trì trạng thái DKG qua các lần khởi động lại và thêm một cơ chế cho phép các trình xác thực đóng epoch bị kẹt tại một điểm đã được phối hợp. Cơ chế đó đã được sử dụng một lần để đóng epoch bị ảnh hưởng, sau đó mạng chuyển sang epoch tiếp theo và tính ngẫu nhiên được khôi phục.
Báo cáo hậu sự kiện coi các lần gián đoạn này như một bài học kỹ thuật rộng hơn cho Sui. Tổ chức cho biết khả năng phục hồi khi kết thúc epoch cần được đầu tư thêm, đặc biệt là xung quanh cơ chế giảm thiểu tác động thanh lịch và cơ chế đóng ép hoạt động. Tổ chức cũng cho biết tính phí gas cần được xem xét với mức độ nghiêm ngặt tương tự như Máy ảo Move hoặc cơ chế đồng thuận Mysticeti, xét đến sự tương tác của nó với settlement, kiểm tra bảo toàn và lập lịch.
Tại thời điểm báo chí, SUI được giao dịch ở mức 0,8798 USD.







