MSTR Cat

블록체인/레벨 VI · 비트코인 이후/6.3 Ethereum과 스마트 컨트랙트/수업 3

The DAO 해킹과 이더리움 클래식

체인을 둘로 갈라놓고 불변성 논쟁의 성격을 규정한 재진입 버그

준비물블록 탐색기 인터페이스(예: Etherscan)The DAO 스마트 컨트랙트 소스 코드(포크 이전 버전)상태 변수 변화를 기록할 노트

호기심

  1. 상태가 업데이트되기 전에 실행되는 코드 한 줄이 어떻게 공격자가 자금을 반복해서 빼낼 수 있게 만드는 걸까요?
  2. 공동체가 역사를 보존하는 대신 다시 쓰기로 투표하면 어떤 일이 벌어질까요?
  3. 최종 권한은 누구에게 있을까요? 합의 메커니즘일까요, 아니면 그것을 유지·관리하는 개발자들일까요?

탐구

  1. The DAO는 2016년 4월 자율형 벤처 펀드로 출범해 11,000명이 넘는 투자자로부터 약 1,270만 ETH를 모았습니다. 이는 당시 유통되던 전체 이더의 약 14%에 해당하는 규모였습니다. 이 프로젝트는 전적으로 스마트 컨트랙트로 운영되었으며, 토큰 홀더들은 중앙 관리 주체나 전통적인 기업 지배 구조 없이 어떤 프로젝트에 자금을 지원할지 투표할 수 있었습니다.
  2. 2016년 6월 17일, 한 공격자가 The DAO의 split 함수에 있던 재진입 취약점을 악용했습니다. 이 버그 때문에 컨트랙트는 내부 잔액이 갱신되기 전에 다시 호출될 수 있었습니다. 공격자는 약 360만 ETH를 ‘자식 DAO(child DAO)’로 빼냈고, 그곳의 28일 보유 기간 때문에 자금은 동결되었습니다. 이 공격은 튜링 완전한 머신이 비트코인 같은 더 단순한 시스템에는 없는 복잡한 상태 관리 위험을 안고 있음을 보여주었습니다.
  3. 이더리움 커뮤니티는 즉각적인 딜레마에 직면했습니다. 원장의 불변성을 지킬 것인가, 아니면 치명적인 코드 결함으로부터 투자자를 보호할 것인가 하는 문제였습니다. 개발자들은 해당 버그가 의도된 동작이 아닌 구현상의 오류이며, 자금을 묶인 채로 두면 플랫폼의 효용에 대한 신뢰가 무너질 것이라고 주장했습니다. 반면 비판자들은 체인의 기록을 바꾸는 것은 탈중앙화된 합의의 핵심 약속을 어기는 일이며, 향후 거버넌스 개입에 위험한 선례를 남긴다고 반박했습니다.
  4. 2016년 7월 20일, 이더리움은 공격을 되돌리고 자금을 환불 컨트랙트로 옮기기 위해 블록 1,920,000에서 하드포크를 실행했습니다. 이후 DAO 토큰 홀더들은 환불 컨트랙트에서 자신의 이더를 되찾을 수 있었습니다. 소수는 이 개입을 거부하고 수정되지 않은 원래 체인을 계속 채굴했습니다. 이들은 ‘코드가 곧 법이다’라는 원칙, 그리고 어떤 주체도 역사를 다시 쓸 권한을 가져서는 안 된다는 원칙을 엄격히 고수하며 이더리움 클래식(ETC)을 이루었습니다.
  5. 이 포크는 하나의 원장에서 두 개의 평행한 현실을 만들어냈습니다. 이더리움이 주요 스마트 컨트랙트 플랫폼으로 계속 발전하는 동안, 이더리움 클래식은 더 작은 네트워크로 남아 주로 탈중앙화에 대한 철학적 선언의 역할을 했습니다. 이 사건은 이후 여러 암호화폐의 프로토콜 개발에 영향을 미쳤습니다.
  6. 이더리움 탐색기와 이더리움 클래식 탐색기에서 블록 1,920,000을 조회해 보세요. 두 체인은 블록 1,919,999까지는 동일하고, 블록 1,920,000부터 달라집니다. 포크는 트랜잭션으로 The DAO의 이더를 옮긴 것이 아니라, 새 클라이언트 소프트웨어가 해당 블록에서 비정규 상태 변경(irregular state change)을 적용한 것입니다. 그래서 이 되돌림은 어떤 트랜잭션 목록이 아니라 코드에 나타납니다.

핵심 사실

  • The DAO는 출범 당시 유통되던 전체 이더의 약 14%에 해당하는 약 1,270만 ETH를 조달했습니다.
  • 2016년 6월 17일, 재진입 버그로 인해 공격자가 자식 DAO로 약 360만 ETH를 빼낼 수 있었습니다.
  • 이더리움은 공격을 되돌리고 자금을 돌려주기 위해 2016년 7월 20일 블록 1,920,000에서 하드포크했습니다.
  • 소수의 사람들은 ‘코드가 곧 법이다’라는 주장을 내세우며 원래의 체인을 계속 채굴했고, 이것이 바로 이더리움 클래식(ETC)이 되었습니다.
  • 이 포크로 홀더들은 새 체인의 ETH와 기존 체인의 ETC를 모두 보유하게 되었습니다.
  • 이 사건은 불변성, 개발자의 권한, 그리고 합의의 정의에 대한 지속적인 논쟁을 촉발시켰습니다.

연습 아홉, 여섯, 셋, 하나

9모으기소프트웨어 업데이트나 프로토콜 변경으로 기존 사용자 데이터나 거래 내역이 바뀐 사례 9가지를 나열하세요. 누가 변경을 주도했고 어떤 근거를 제시했는지 적으세요.
6묶기변경이 버그 수정, 기능 추가, 보안 롤백, 합의 업그레이드, 하드포크, 소프트포크 중 무엇이었는지에 따라 9개를 6가지 범주로 묶으세요.
3추리기6개를 결국 이러한 변경을 결정한 3가지 유형의 권한으로 압축하세요.
1결정화‘코드가 곧 법이다(code is law)’가 무엇을 약속하는지, 그리고 코드가 실패했을 때 무엇을 희생하는지 한 문장으로 쓰세요.

팩트 체크

날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.

인터랙티브 아카데미에서 열기 →

EN PT ES ZH JA RU DE FR MS