비트코인의 공급 한계를 넘은 거래, 그리고 그 기록을 거부한 노드들
74,638번 블록에는 각각 92,233,720,368.54275808 BTC인 출력 두 개가 들어갔다. 복구에는 코드 수정뿐 아니라 수정판을 실행한 채굴자와 노드, 그리고 다음 날 잘못된 기록을 추월한 대체 체인이 필요했다.

3줄 퀵 브리핑
- 발단 / 역설2010년 8월 15일 17:05:57 UTC, 74,638번 블록은 각각 92,233,720,368.54275808 BTC인 출력 두 개, 합계 184,467,440,737.08551616 BTC를 기록했다.
- 결정적 사건제프 가직이 이상을 알렸고 참여자들은 각각 유효한 출력의 합이 음수로 넘치는 결함을 추적했다. 개빈 안드레센이 빠른 수정안을 올린 뒤 사토시가 합의 규칙 패치를 배포했다.
- 역사적 결말0.3.10은 문제 거래를 무효로 만들었지만 복구는 채굴자와 노드 운영자의 채택에 달렸다. 사토시는 8월 16일 수정 체인이 약 74,689번 높이에서 잘못된 체인을 추월했다고 보고했다.
사건의 흐름 한눈에 보기
양수인 출력 두 개의 합계 184,467,440,737.08551616 BTC가 기존 검증 경로에서 음수로 넘어갔다.
가직은 블록 데이터를 올리고 거대한 출력이 정수 한계와 관련 있는지 물었다.
안드레센은 짧은 시험 뒤 화폐 범위를 넘는 출력을 거부하는 코드를 제안했다.
21:40 사토시는 각 출력과 누적 합계를 화폐 범위 안에서 검사하는 132번 리비전을 올렸다. 23:48에는 오버플로 거래를 거부하는 0.3.10 실행 파일을 발표하고 운영자에게 업그레이드를 요청했다.
사토시는 정상 체인이 약 74,689번 높이에서 앞섰고 구버전 노드도 그 기록으로 재구성됐다고 알렸다.
1. 블록 탐색기에 나타난 불가능한 금액
8월 15일 17:05:57 UTC, 74,638번 블록은 0.5 BTC 입력 하나와 정확히 92,233,720,368.54275808 BTC인 출력 두 개를 기록했다.[1]
합계는 184,467,440,737.08551616 BTC다. 제목에서 흔히 쓰는 1,844억 BTC는 규모를 줄여 쓴 표현이지 정확한 합계가 아니다.[1]
두 출력은 각각 64비트 부호 정수의 상한 바로 아래였다. 기존 클라이언트가 둘을 더하자 누적 합계는 -0.01 BTC로 넘어갔다. 평범한 금액을 전제로 한 검사를 통과했고, 블록 채굴자는 정상 보조금 50 BTC에 겉으로 계산된 수수료 0.51 BTC를 더해 50.51 BTC를 받았다.[1]
2. 공개 토론이 놀라움을 원인 분석으로 바꾸다
제프 가직은 18:08에 블록 데이터를 공개했다.[1][2]
참여자들은 거래 출력값을 재현하고 음수가 된 합계를 지목했으며, 일부는 채굴을 멈추고 문제가 풀릴 때까지 거래를 만들거나 받지 말라고 경고했다. 남은 기록으로는 거래 작성자와 의도를 확인할 수 없으므로 해커나 채굴자가 고의로 공격했다고 단정할 수 없다.[1][2]
개빈 안드레센은 20:39에 짧게 시험한 수정안을 제시했다. 20분 뒤 사토시는 2,100만 BTC를 넘는 개별 출력과 누적 합계를 모두 거부하는 더 넓은 초안을 공개했다. 개빈은 코드가 괜찮다고 답하면서 모든 사람이 체인을 다시 받을 필요 없이 문제 블록을 고립시킬 방법도 물었다.[2]
3. 코드는 먼저 바뀌었고, 인정받는 기록은 나중에 바뀌었다
21:40 사토시는 소스 저장소 132번 리비전을 올렸다고 알렸다.[2][4]
지금 남은 커밋은 개별 출력과 출력 합계에 화폐 범위 검사를 추가한 사실을 보여준다. 구버전이 이미 받아들인 거래를 수정판은 거부했으므로 검증 규칙 자체가 엄격해진 수정이었다.[2][4]
사토시는 이어 0.3.10을 빌드해 23:48에 발표했다. 운영자들은 중단, 업그레이드, 마지막 정상 기록에서의 재시작을 논의했고 오래된 체인 사본과 수정 노드 주소를 공유했다. 수정판 채굴자들은 74,637번 블록 다음부터 새 가지를 늘렸다. 릴리스가 규칙을 제시했다면 그 규칙에 작업증명을 실은 것은 독립 운영자들의 선택이었다.[2][3]
4. 복구는 밤새 이어졌다
8월 16일 02:16, 사토시는 수정 체인에 블록 14개가 생겼고 자신에게 연결된 노드 절반 이상이 0.3.10이라고 보고했다. 다만 그때도 정상 체인이 더 많은 연산력을 가졌을 것이라고 추정했다.[2]
12:59이 되어서야 정상 체인이 약 74,689번 높이에서 잘못된 체인을 추월했고 구버전도 이미 현재 높이를 응답하고 있다고 확인했다.[2]
이 순서는 흔히 하나로 뭉뚱그리는 두 시점을 갈라 놓는다. 블록 시각 약 4시간 반 뒤 소스 패치가 올라왔고 실행 파일은 그보다 뒤에 나왔지만, 수정된 작업증명 기록의 추월 확인은 다음 날이었다. 버려진 가지의 일반 거래는 다시 포함돼 확인을 쌓을 수 있었고, 74,638번 이후 그 가지에서 나온 미성숙 채굴 보상은 사라졌다. 사토시가 수정을 공개했고, 여러 채굴자와 노드 운영자가 그 규칙을 채택해 복구를 완성했다.[2][3]
이 사건이 남긴 핵심 교훈 (Key Takeaways)
한도는 개별 값과 합계 모두에서 지켜져야 한다
기존 경로는 개별 출력을 통과시켰지만 합산 중 넘침을 막지 못했다. 패치는 누적 과정에도 화폐 범위 검사를 넣었다.
패치 공개만으로 원장이 바뀌지는 않았다
채굴자와 노드 운영자가 새 규칙을 실행하고 수정 체인에 충분한 작업증명을 쌓은 뒤에야 그 기록이 선택됐다.
빠른 복구에도 확인과 보상의 이동이 있었다
일반 거래는 확인 수가 다시 시작될 수 있었고, 버려진 체인에서 생성된 미성숙 채굴 보상은 사라졌다. 운영자에게는 실제 상태 변화였다.
이어서 읽을 이야기
같은 주제를 다른 사례와 배경에서 살펴보세요.
출처 및 참고 자료
- [1]출처 1: 비트코인 포럼: 74,638번 블록의 이상 출력 최초 보고비트코인 포럼 기록 · 2010-08-15
- [2]출처 2: 비트코인 포럼: 오버플로 결함 긴급 대응 논의비트코인 포럼 기록 · 2010-08-15
- [3]출처 3: 비트코인 포럼: 0.3.10 오버플로 수정판 발표사토시 나카모토 / 비트코인 포럼 기록 · 2010-08-15
- [4]출처 4: 비트코인 소스: 74,638번 블록 출력 오버플로 수정비트코인 소스 저장소 · 2010-08-15
- [5]출처 5: CVE-2010-5139 취약점 상세 정보National Vulnerability Database, NIST


