
스테이킹 위험 주의: Geth를 사용해 스테이킹을 한다면 자산을 모두 잃을 수도 있습니다
글쓴이: Labrys
번역: TechFlow
본문은 이더리움 네트워크에서 실행 클라이언트인 Nethermind가 겪은 오류에 대해 논의하며, 이로 인해 Nethermind를 사용하는 모든 검증노드(전체 네트워크의 약 10%)가 오프라인 상태가 되었다. 본문은 이더리움 네트워크 내 Geth 클라이언트의 과도한 지배와 그로 인한 잠재적 위험성을 강조한다. Geth는 안정적이고 신뢰할 수 있는 클라이언트지만, 심각한 결함이 발생할 경우 네트워크 전반에 걸쳐 광범위한 영향을 미칠 수 있다. 따라서 커뮤니티가 실행 클라이언트의 다양성을 중요하게 여겨 중앙화 리스크를 줄일 필요가 있음을 촉구한다.
서론
금주, 이더리움 네트워크의 실행 클라이언트 Nethermind가 오류를 겪어 Nethermind를 운영하는 모든 검증노드(네트워크의 약 10%)가 오프라인되었다.
이는 Nethermind를 운영하는 이해관계자가 소수이기 때문에 비교적 사소한 사건이다. 아래는 내가 직접 운영하는 Nethermind 기반 검증노드의 총 잔고 추이 차트다. 현지시간 새벽 4시경 오류가 처음 발생했을 때 검증노드가 오프라인된 것을 확인할 수 있다. 팀은 약 4시간 후 패치를 배포했으며, 설치 후 현지시간 오전 9시경 정상 작동이 재개되었다. 이 기간 동안 내 검증노드가 받은 벌점은 얻은 보상과 거의 동일했다. 같은 날 오후 1시에는 다운 전보다 잔고가 더 높아졌다. 전반적으로 보면 매우 작은 장애였다.

많은 사람들이 Geth를 사용할 때 비슷한 오류가 발생하면 벌점도 유사할 것이라고 잘못 가정한다. 그러나 이것은 사실이 아니다. 이는 Geth 자체나 Geth의 구현 방식 때문이 아니라, Geth를 사용하는 사람들의 수 때문인 문제다.
ClientDiversity.org의 데이터에 따르면, 이더리움 네트워크의 약 84% 검증노드가 Geth를 실행하고 있다. 현재 이를 옹호하는 주장은 Geth가 분명히 가장 우수하고 안정적인 클라이언트라는 것이다. Nethermind와 같은 소수 클라이언트가 이번 주에 오류와 다운타임을 경험했지만, Geth는 머지 이후(그 이전부터도) 안정적으로 작동해왔다. 나의 경험상 다수 클라이언트인 Geth에서 소수 클라이언트로 전환할 경우 검증노드가 더 많은 자원을 필요로 하며, 증거 누락과 다운타임도 더 많았다.
본 글은 Geth에 대한 공격이 아니다. 나는 Geth 개발팀을 매우 존중한다. 하지만 불행히도 Geth가 지나치게 널리 사용되고 있기 때문에, Geth가 절대다수의 스테이킹을 지배할 때 발생할 수 있는 리스크를 솔직하게 논의해야 한다.

더 많은 증거 누락과 다운타임을 경험할 가능성이 있음을 알면서도, 아무도 Geth를 떠나고 싶지 않다. 특히 정상 작동 시간에 의존하여 최고 수익을 홍보하는 비즈니스 모델을 갖춘 전문 스테이킹 운용업체일수록 더욱 그렇다.
지난해 9월 기준으로, 최대 운용업체 Lido는 Geth에서 약 76%의 검증노드를 운영하고 있다고 추정된다.

하지만 나는 일부러 소수 클라이언트를 운영하는 것을 기쁘게 생각한다. 개인적인 이득을 포기하면서까지 네트워크 탈중앙화를 위한 이타주의자라기보다는, 오히려 내 ETH가 대부분의 버그로부터 자유로울 수 있다는 사실을 알기 때문이다.
Geth에 버그가 생기면 어떻게 될까?
버그의 종류에 따라 다르다.
이더리움 검증노드의 3분의 2 이상이 Geth를 실행하기 때문에, Geth 내 어떤 심각한 오류라도 즉시 체인의 최종 확정(finality)을 막게 된다. 이는 체인이 완전히 멈추거나 중단된다는 의미는 아니다. 다른 클라이언트들이 계속 작동한다면 체인은 계속 진행된다. 다만 약 84%의 블록이 누락되어, 기존의 약 12초 블록 간격 대신 약 75초마다 한 번씩 블록이 생성될 것이다. 이러한 블록들은 리오더닝(reorg)에 취약하므로, 체인이 다시 확정될 때까지 해당 블록에 포함된 거래는 유효하다고 보장되지 않는다. 듣기에 매우 심각해 보이지만, 기억해야 할 것은 이더리움이 머지 이전 수년간 최종 확정 개념 없이도 잘 작동했고, 오늘날의 비트코인도 마찬가지라는 점이다. 그래서 거래소에서는 입금 시 리오더닝 및 자금 손실 리스크를 줄이기 위해 6개 이상의 블록 확정을 요구하는 것이다.
어쩌면 일부 독자들은 2023년 5월 이더리움이 이미 비슷한 상황을 겪은 것을 기억할지도 모른다. 당시 몇몇 컨센서스 클라이언트에 버그가 발생해 이틀 동안 두 차례 체인의 최종 확정이 중단되었으며, 다수의 블록이 누락되고 일시적으로 네트워크의 40%만 작동하기도 했다. 네트워크가 복구된 후 대부분의 DApp 사용자는 거래 확인 속도가 약간 느려진 것 외에는 특별한 문제가 없었다.

그러면 검증노드들은 어떻게 될까?
비활동 리크 (Inactivity Leak)
소수 클라이언트가 실패할 경우, 벌점은 위에서 언급한 검증노드 그래프처럼 보상 획득 속도와 동일한 비율로 ETH를 잃는 형식이다. 하지만 Geth가 실패할 경우 체인의 최종 확정이 즉시 중단되므로 벌점이 훨씬 더 심각해진다. 이러한 강화된 벌점을 '비활동 리크(inactivity leak)'라고 부르며, 체인이 4개 에포크(약 25분) 이상 최종 확정되지 않을 때 오프라인 상태의 검증노드에게 적용된다. 이는 오프라인 검증노드가 가능한 빨리 온라인으로 복귀하도록 유도하거나, 최악의 경우 오프라인 검증노드의 지분을 파괴하여 전체 지분 중 1/3 미만이 되게 함으로써 온라인 검증노드들이 체인의 최종 확정을 완료할 수 있도록 하기 위한 메커니즘이다.

비활동 리크 기간 동안, 검증노드가 단 2일간 오프라인일 경우 지분의 0.6%, 즉 2개월치 스테이킹 보상에 해당하는 금액을 잃는다!
단 5일간 오프라인이면, 무려 1년치 스테이킹 보상(3.5%) 전부를 소모하게 된다! 이는 사건 이전의 잔고를 회복하려면 2년 이상 더 스테이킹해야 함을 의미한다.
1주일 내 10%의 지분, 즉 3년치 보상이 사라지고, 약 20일 만에 지분의 50%가, 약 40일 만에 90%의 지분이 소멸된다.
반면 소수 클라이언트 오류로 오프라인이 된 검증노드는 40일 동안 지분의 0.4%만 잃는다.
비활동 벌점은 얼마나 오래 지속될까?
버그에 따라 다르다.
버그가 수정 가능하다면, 벌점은 Geth 팀이 패치를 출시하고 당신의 검증노드에 적용하는 데 걸리는 시간(또는 다른 실행 클라이언트로 전환하는 데 필요한 시간) 동안 지속된다.
실제로 우리는 이 문제가 몇 시간에서 며칠 내 해결될 것으로 예상한다. 최근의 Nethermind 사례와 동일한 시간이 소요된다면, 검증노드는 지분의 0.004%만을 잃게 되며, 이는 큰 문제가 아니다.
하지만 버그로 인해 검증노드가 무효 블록을 생성하고, Geth가 이를 유효한 것으로 간주하여 승인하는 경우 문제가 심각해진다. 이는 체인 포크를 유발한다. 체인이 두 갈래로 나뉘는데, 하나는 무효 블록을 포함한 분기(Geth 체인), 다른 하나는 무효 블록을 무시한 분기(Geth 외 체인)이다. Geth를 실행하는 검증노드는 두 분기를 모두 유효하다고 판단하고, 더 무게 있는 체인 위에 블록을 추가하려 할 것이다. Geth 체인에는 84%의 검증노드가 지분을 승인했고, Geth 외 체인에는 16%만이 승인했다. 따라서 Geth 검증노드들은 Geth 체인이 더 무겁다고 판단하고 계속해서 그 위에 블록을 쌓을 것이다.

물론 모든 문제가 해결된 후에는 Geth 체인의 블록들이 폐기될 것이며(자체적인 문제를 야기하겠지만), 더 큰 문제는 Geth 체인이 충분한 지분(2/3 초과)을 확보해 무효 체인을 확정시킬 수 있다는 점이다.
Geth 체인이 일단 확정되면, Geth 체인을 승인한 검증노드는 Geth 외 체인의 구성에 참여할 수 없게 된다(해당 체인이 확정되기 전까지). 그렇지 않으면 슬래싱(slashing)을 당한다. 본질적으로 Geth 검증노드는 무효 체인을 선택한 셈이며, Geth 외 체인이 확정될 때까지 그 체인에 묶이게 되는 것이다. 바로 이 지점에서 많은 사람들이 오해하는 핵심 리스크가 발생한다.
Geth 검증노드가 무효 체인에 갇혀 있기 때문에, Geth 외 체인에서는 비활성 상태로 간주되어 비활동 리크로 인한 손실을 감수해야 한다. 어떠한 소프트웨어 업데이트나 버그 패치도 이 검증노드들을 구제할 수 없다. 그들의 지분은 네트워크의 1/3 미만이 될 때까지 파괴되어야 하며, 그때서야 Geth 외 체인이 확정될 수 있다.
현재 네트워크에는 28,976,695 ETH가 스테이킹 상태다. 이 중 84%(약 2400만 ETH)는 Geth를 실행하는 검증노드에归因되며, 16%(약 500만 ETH)는 Geth 외 클라이언트를 실행하는 검증노드에 귀속된다. Geth 외 체인이 확정되기 위해서는 Geth 검증노드들이 자신의 지분을 파괴하여 남은 전체 지분의 1/3 미만이 되도록 해야 한다. 즉, 약 2150만 ETH(총 지분의 약 90%)를 파괴하여 Geth 지분을 약 25만 ETH로 줄여야 하며(총량의 1/3 미만: 250만 + 500만 ETH), 이때 Geth 외 검증노드들이 보유한 약 500만 ETH가 전체 지분의 2/3 이상을 차지하게 되어 체인 확정이 가능해진다.
이 과정은 극도로 고통스럽고 약 40일이 소요될 것이다. 이로 인해 전체 ETH 공급량이 약 18% 감소하며, 총 공급량이 1억 ETH 미만으로 떨어질 것이다.

출구 경쟁
여기서 중요한 점은 무효 체인에 있는 검증노드들이 가만히 있을 가능성은 낮다는 것이다. 그들은 여전히 지분을 인출할 수 있는 선택지를 가지며, 그렇게 하지 않더라도 유효 잔고가 16 ETH에 도달하면 네트워크가 강제로 퇴출시킨다. 그러나 이는 그들의 손실이 16 ETH로 제한된다는 의미는 아니다.
검증노드를 인출할 때(강제 퇴출이라도) 퇴출 큐에 들어가며, 큐에 있는 동안에도 여전히 ETH를 잃는다!
우리는 최악의 경우 약 40일이 소요되어야 유효 체인이 다시 확정될 수 있다는 점을 알고 있다. 그렇다면 퇴출 큐는 얼마나 걸릴까?
퇴출 큐는 각 에포크마다 네트워크를 떠날 수 있는 검증노드 수를 제한하는 유출 제한(exit rate limit)을 가지고 있다(약 6.4분당). 유출 제한은 다음과 같이 정의된다:

현재 퇴출 속도는 6.4분당 13개 검증노드이며, 모든 Geth 검증노드가 퇴출을 원한다면 모든 노드가 퇴출되기까지 최소 약 260일이 소요된다. 그런데 90%의 지분은 약 40일 내에 파괴되므로, 대부분의 검증노드는 체인에서 퇴출되기 전에 잔고가 소진될 것이다.
처음 2%의 Geth 검증노드가 퇴출을 시작하면, 앞선 5일 내 퇴출되며 손실은 최대 1년치 스테이킹 보상 수준이다.
손실을 지분의 10% 미만으로 억제하려면, 전체 퇴출 검증노드 중 상위 3% 안에 들어야 한다.
지분의 50% 미만 손실을 유지하려면 상위 8% 안에 들어야 한다. 이 시점에서 수동으로 퇴출을 시작하지 않은 사람은 모두 강제 퇴출되며, 유효 잔고 16 ETH 상태로 퇴출 큐에 등록된다.
40일 후, 지분의 90%가 소멸할 때, 85% 이상의 검증노드가 여전히 큐에 남아 있을 것이다.
퇴출 가능성은 당신을 구하지 못하며, 하방 리스크는 강제 퇴출로 인한 손실(16 ETH)에 국한되지 않는다.
슬래싱은 어떨까?
일부 사람들은 버그 발생 시 Geth를 운영하는 스테이커가 비활동 리크뿐 아니라 슬래싱까지 당한다고 잘못 생각한다. 이는 틀린 것이다.
슬래싱 벌칙은 이중 서명(double signing) 사건에만 적용되며, 이는 전적으로 컨센서스 클라이언트가 관리한다. Geth 내 버그로 인해 컨센서스 클라이언트가 슬래싱 가능한 실수를 저지를 이유는 없다. Geth가 무효 블록을 생성하는 것은 슬래싱 가능한 오류가 아니다.
Geth 버그에는 비활동 리크 벌칙만 적용된다.
어떻게 해야 할까?
현재 Geth를 운영하는 스테이커들은 절대다수 실행 클라이언트를 운영함으로써 발생하는 리스크를 완전히 이해하지 못하고 있을 가능성이 크다. 많은 이들이 버그 발생 시 몇 시간 내 패치가 배포되어 해결되며, 그 과정에서 잃는 이더리움도 거의 없다고 잘못 가정한다.
많은 사람들이 무효 블록을 승인하는 리스크로 인해 자신이 무효 최종 체인에 묶일 수 있으며, 거의 확실히 대부분의 ETH가 소멸될 수 있다는 점을 인식하지 못한다. 이는 현실이 될 수도 있는 진짜 리스크다.
이더리움 스테이킹은 무리스크 수익이 아니다. 연간 최대 잠재 수익이 3.5%인 도구에 최소 7만 5천 달러를 투자하겠는가? 하지만 100% 손실 가능성도 있다. 아마 아닐 것이다. 하지만 이것이 바로 오늘날 84%의 이더리움 스테이커들이 하고 있는 일이다.
소수 클라이언트로 전환함으로써(동일한 버그가 여러 클라이언트에서 동시에 발생하지 않는다는 가정 하에), 손실을 연간 3.5% 이내로 제한할 수 있다.
이러한 정보를 가진 상태에서 여전히 Geth를 운영하는 것은 미친 짓처럼 보인다. 나는 Geth를 운영하는 사람들이 이 리스크를 완전히 이해하지 못하고 있다고밖에 생각할 수 없다.
LST(stETH, cbETH 등)를 보유하고 있고, 해당 LST가 검증노드에 Geth를 사용하고 있다면, 당신의 이더리움이 리스크에 노출되어 있음을 이해하고, Geth가 더 이상 압도적 지배력을 갖지 않을 때까지 언스테이킹하거나 다른 LST로 전환하는 것을 고려하라.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News












