이더리움 Prysm 클라이언트에서 메인넷 사고가 발생하여 자원 고갈로 블록과 증인이 대규모로 결여됨
Prysm 팀은 주 네트워크 사고 복구 보고서를 발표하며, 12월 4일 이더리움 주 네트워크 Fusaka 시간대 내에 거의 모든 Prysm 신뢰 노드가 특정 attestations를 처리하는 과정에서 자원 고갈이 발생하여 검증자 요청에 즉시 응답할 수 없었고, 이로 인해 블록과 증인이 대량으로 누락되었다고 전했습니다.
사고의 영향 범위는 epoch 411439부터 411480까지로, 총 42개의 epoch에서 1344개의 슬롯 중 248개의 블록이 누락되어 누락률은 약 18.5%에 달했습니다. 네트워크 참여율은 한때 75%로 떨어졌으며, 검증자는 약 382 ETH의 증인 보상을 잃었습니다. 근본 원인은 Prysm이 주 네트워크와 동기화되지 않은 노드로부터 attestations를 수신했기 때문이며, 이 attestations는 이전 epoch의 블록 루트를 참조하고 있습니다.
합법성을 검증하기 위해 Prysm은 이전 epoch 상태를 반복 재생하고 높은 비용의 epoch 전환을 수행하여 노드가 높은 동시성 하에서 자원 고갈을 유발했습니다. 관련 결함은 Prysm PR 15965에서 발생했으며, 이는 한 달 전 테스트 네트워크에 배포되었지만 동일한 상황을 유발하지는 않았습니다.
공식적으로 제시된 임시 해결책은 v7.0 버전에서 --disable-last-epoch-target 매개변수를 활성화하는 것이며, 이후 발표된 v7.1 및 v7.1.0에는 장기 수정 방안이 포함되어 있습니다. 이는 head state를 사용하여 attestations를 검증함으로써 역사적 상태의 반복 재생을 피하는 것입니다.
Prysm은 문제는 12월 4일 UTC 4:45 이후 점차 완화되었으며, epoch 411480 시점에서 네트워크 참여율이 95% 이상으로 회복되었다고 밝혔습니다.
Prysm 팀은 이번 사건이 클라이언트 다양성의 중요성을 강조한다고 지적했습니다. 만약 단일 클라이언트의 비율이 3분의 1을 초과하면 일시적으로 종료할 수 없게 될 수 있으며, 3분의 2를 초과할 경우 종료 무효 체인의 위험이 존재합니다. 또한 기능 스위치의 소통 부족과 테스트 환경이 대규모 비동기 노드를 시뮬레이션하지 못한 문제를 반성하며, 향후 테스트 전략 및 구성 관리를 개선할 것이라고 밝혔습니다.




