
Sui 메인넷 최초 장애 문제 요약

이벤트 개요
태평양 시간 기준 2024년 11월 21일 오전 약 1시 15분부터 3시 45분 사이(한국 시간: 2024년 11월 21일 오후 5시 15분 ~ 7시 45분), Sui 메인넷에서 전반적인 네트워크 정체가 발생했습니다. 모든 검증 노드가 무한 반복적으로 충돌하며 트랜잭션 처리가 완전히 중단되었습니다.
문제 원인
블로킹 제어 코드 내의 assert! 구문에서 오류가 발생했습니다. 실행 비용 예측값이 0일 경우 검증 노드가 충돌하게 되는 문제였습니다. 이 문제는 다음 조건을 모두 만족할 때 발생합니다.
1. 블로킹 제어 모드가 TotalGasBudgetWithCap 모드로 설정된 경우:
-
해당 모드는 프로토콜 버전 63에서 잠시 활성화되었다가 철회되었으며, 이후 프로토콜 버전 68에서 누적 스케줄러와 함께 다시 활성화되었습니다.
2. 네트워크가 아래 두 조건을 동시에 만족하는 트랜잭션을 수신한 경우:
-
변경 가능한 공유 객체를 입력으로 포함
-
MoveCall 명령어가 0개인 경우
위 조건을 만족하는 트랜잭션이 네트워크에 도달하면 모든 검증 노드가 즉시 충돌합니다.
블로킹 제어란 무엇인가?
Sui 네트워크는 객체 기반 아키텍처를 통해 서로 다른 사용자 트랜잭션을 대규모 병렬 처리할 수 있으며, 대부분의 다른 네트워크에서는 이를 달성하기 어렵습니다. 그러나 여러 트랜잭션이 동일한 공유 객체에 동시에 쓰기를 수행할 경우, 해당 트랜잭션들은 순차적으로 실행되어야 하며, 특정 객체 관련 트랜잭션 처리량에는 상한선이 존재합니다.
블로킹 제어 시스템은 동일한 공유 객체에 대한 트랜잭션 속도를 제한함으로써, 실행 시간이 과도하게 긴 체크포인트로 인해 네트워크가 과부하되는 것을 방지합니다.
최근 우리는 공유 객체의 활용률을 높이기 위해 블로킹 제어 시스템을 업그레이드하였으며, 이는 트랜잭션 복잡도를 보다 정확하게 추정하도록 설계되었습니다. 그러나 새롭게 도입된 TotalGasBudgetWithCap 모드의 코드에는 이번 문제를 유발한 버그가 존재하였습니다.
문제 해결 방법
문제 확인 후 코드 수정은 비교적 간단했습니다(PR #20365 참조). 해당 패치는 메인넷(v1.37.4)과 테스트넷(v1.38.1)에 모두 배포되었습니다.
PR #20365: bump_object_execution_cost 함수를 포화 덧셈(saturating addition) 방식으로 수정하고, 비용이 0인 트랜잭션도 허용하도록 변경.
🌟 메인넷 v1.37.4:
https://github.com/MystenLabs/sui/releases
검증 노드 커뮤니티의 신속한 대응 덕분에 패치 배포 후 불과 15분 만에 Sui 네트워크가 정상화되었습니다.
우리가 얻은 교훈
-
이벤트 감지 및 대응 시스템이 잘 작동함: 자동 경보 시스템과 커뮤니티의 신고가 거의 동시에 발생했으며, 팀은 신속하게 진단과 수정 작업에 착수할 수 있었습니다.
-
검증 노드 커뮤니티의 우수한 대응: 패치 배포 직후 Sui 네트워크는 거의 즉각적으로 정상 운영 상태로 복구되었습니다.
예방 조치
-
테스트 시스템 개선: 이번 충돌을 유발한 것과 유사한 악의적(대항적) 트랜잭션 유형을 더 많이 추가하여 잠재적 문제를 조기에 발견할 수 있도록 합니다.
-
빌드 프로세스 최적화: 디버깅 및 릴리스 바이너리 생성 속도를 높여 이벤트 대응 시간을 더욱 단축합니다. 이번 장애 동안 일부 시간은 릴리스 버전 빌드를 기다리는 데 소요되었습니다.
커뮤니티와 검증 노드 여러분의 지원에 감사드리며, Sui 네트워크의 신속한 복구를 함께 이루어 주셔서 감사합니다!
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














