비트코인 블록 구조: 블록 해부학
비트코인 블록 구조를 80바이트 헤더부터 코인베이스 트랜잭션, SegWit 증인 데이터, 블록 가중치까지 상세히 분석합니다. 실제 블록 헤더의 16진수 분석을 포함합니다.
평균 약 10분마다 새로운 블록이 비트코인 블록체인에 추가된다. 이 블록은 트랜잭션을 캡슐화하고, 암호학적 해싱을 통해 이전 블록과 연결하며, 그것을 생성하기 위해 연산 작업이 수행되었다는 증거를 내장하는 신중하게 구조화된 데이터 컨테이너다. 블록의 정확한 구조를 바이트 단위로 이해하는 것은 비트코인이 불변성, 탈중앙화, 신뢰 불필요 검증이라는 속성을 어떻게 달성하는지 이해하는 데 기본이다.
비트코인 블록은 두 가지 주요 구성 요소로 이루어진다: 블록 헤더(정확히 80바이트)와 블록 바디(가변 크기, 트랜잭션 포함). 이들이 함께 블록체인의 원자 단위 — 후속 블록 아래 묻히면 사실상 되돌릴 수 없는 불가분의 기록 — 를 형성한다.
블록 헤더: 체인을 보호하는 80바이트
블록 헤더는 비트코인에서 가장 정보 밀도가 높은 구조다. 단 80바이트에 6개 필드를 인코딩하여 체인 연결, 트랜잭션 무결성 검증, 타임스탬프 정보, 난이도 목표, 작업증명 논스를 집합적으로 제공한다. 채굴자는 이 80바이트 헤더를 반복적으로 해싱하며, 현재 목표보다 낮은 해시를 찾는다.
필드별 분석
| 필드 | 크기 | 설명 |
|---|---|---|
| 버전 | 4바이트 | 블록 버전 번호, 어떤 검증 규칙을 따를지 표시 |
| 이전 블록 해시 | 32바이트 | 이전 블록 헤더의 SHA-256d 해시 |
| 머클 루트 | 32바이트 | 블록 내 모든 트랜잭션의 머클 트리 루트 해시 |
| 타임스탬프 | 4바이트 | 유닉스 시간 (1970-01-01 00:00:00 UTC 이후 초) |
| 비트(목표) | 4바이트 | 난이도 목표의 압축 표현 |
| 논스 | 4바이트 | 유효한 해시를 찾기 위해 채굴자가 증가시키는 카운터 |
| 합계 | 80바이트 |
버전 (4바이트)
버전 필드는 원래 프로토콜 업그레이드를 시그널링하기 위한 것이었다. 블록 버전 1은 제네시스 블록부터 2012년까지 사용되었다. 버전 2는 BIP-34와 함께 도입되어 코인베이스 트랜잭션에 블록 높이를 요구했다. 버전 3(BIP-66)은 서명에 대한 엄격한 DER 인코딩을 시행했다.
BIP-9(2016년) 이후 버전 필드는 “버전 비트” 시그널링으로 용도가 변경되었다. 순차적으로 증가하는 대신, 버전 필드 내의 개별 비트를 설정하여 특정 소프트 포크 제안에 대한 지지를 시그널링할 수 있다. 이 메커니즘은 탭루트 활성화(BIP-341)를 비트 2를 통해 시그널링하는 데 사용되었다.
이전 블록 해시 (32바이트)
이 필드는 선행 블록의 80바이트 헤더의 이중 SHA-256 해시를 포함한다. 이것이 블록체인에서의 “체인”이다 — 데이터 구조를 블록의 선형적이고 순서가 있는 시퀀스로 만드는 암호학적 연결이다.
해시는 내부 바이트 순서(리틀 엔디안)로 저장되며, 이는 블록 탐색기에서 표시되는 사람이 읽을 수 있는 형식의 역순이다.
이 필드가 불변성 보장을 만든다: 과거 블록의 어떤 데이터를 변경하면 그 블록의 해시가 변경되고, 이는 다음 블록의 이전 블록 해시 필드를 무효화하며, 모든 후속 블록을 통해 연쇄적으로 전파된다.
머클 루트 (32바이트)
머클 루트는 블록의 모든 트랜잭션으로 구성된 이진 해시 트리의 꼭대기다. 블록의 트랜잭션 집합에 대한 간결하고 변조 방지 요약을 제공한다.
구성 과정:
- 각 트랜잭션을 이중 SHA-256으로 해시하여 리프 해시(txid)를 생성
- 인접한 리프 해시를 연결하고 다시 해시하여 부모 노드를 생성
- 어떤 레벨에서 노드 수가 홀수이면 마지막 노드를 복제
- 단일 32바이트 루트가 남을 때까지 이 과정을 상향 반복
머클 루트는 간이 결제 검증(SPV)을 가능하게 한다: 경량 클라이언트가 전체 블록을 다운로드하지 않고 머클 증명(트랜잭션에서 루트까지의 경로를 따라가는 작은 해시 집합)만 요청하여 특정 트랜잭션이 블록에 포함되어 있는지 검증할 수 있다. 2,000개 트랜잭션이 있는 블록에서 증명은 약 11개 해시(log₂(2000) ≈ 11)만 필요하다 — 수 메가바이트 대신 약 352바이트다.
타임스탬프 (4바이트)
타임스탬프는 유닉스 에포크(1970년 1월 1일 00:00:00 UTC) 이후의 초 수를 나타내는 부호 없는 32비트 정수다. 채굴자가 이 값을 설정하지만 검증 규칙을 따라야 한다:
- 타임스탬프는 이전 11개 블록의 중앙값(Median Time Past, MTP)보다 커야 한다
- 타임스탬프는 노드의 로컬 시간보다 2시간 이상 앞설 수 없다
32비트 타임스탬프는 2106년 2월 7일 06:28:15 UTC에 오버플로된다. 이것은 비트코인의 “2106년 문제”로 알려져 있으며 그 날짜 전에 프로토콜 변경이 필요하다.
비트 / 목표 (4바이트)
bits 필드는 작업증명 난이도 목표를 압축 형식으로 인코딩한다. 목표는 256비트 숫자이며, 이 목표보다 낮은 해시가 유효한 작업증명으로 간주된다.
인코딩 형식:
bits = 0xAABBCCDD
지수 = AA
계수 = 0x00BBCCDD
목표 = 계수 × 2^(8 × (지수 - 3))
난이도는 2,016블록마다(약 2주마다) 재조정된다. 이전 2,016블록이 예상 20,160분(10분 × 2,016)보다 빠르게 채굴되었으면 목표가 감소(난이도 증가)한다. 느리면 목표가 증가(난이도 감소)한다. 조정은 급격한 변동을 방지하기 위해 양방향 최대 4배로 제한된다.
논스 (4바이트)
논스(한 번 사용되는 숫자)는 채굴자가 유효한 작업증명을 찾기 위해 반복하는 필드다. 0부터 시작하여 2³²(약 43억) 개의 가능한 값을 모두 증가시키면서, 채굴자는 각 논스 값에 대해 SHA-256d(헤더)를 계산하고 결과가 목표보다 낮은지 확인한다.
현대 채굴 하드웨어가 초당 수백 테라해시(TH/s)를 처리하므로, 4바이트 논스 공간(43억 가능성)은 1초도 안 되어 소진된다. 따라서 채굴자는 다른 헤더 필드를 변경하여 새로운 논스 탐색 공간을 만들어야 한다:
- 타임스탬프: 1초씩 증가시킬 수 있음
- 코인베이스 추가 논스: 코인베이스 트랜잭션을 수정하면 머클 루트가 변경되어 완전히 새로운 탐색 공간 생성
- 버전 비트: 사용되지 않는 버전 비트를 롤링
실제 블록 헤더의 16진수 분석
블록 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f — 사토시 나카모토가 2009년 1월 3일에 채굴한 제네시스 블록(블록 0)을 해부해 보자.
원시 80바이트 헤더(16진수):
01000000 # 버전: 1
0000000000000000000000000000000000000000
00000000000000000000000000000000 # 이전 블록 해시: 모두 0 (이전 블록 없음)
3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3
888a51323a9fb8aa4b1e5e4a # 머클 루트
29ab5f49 # 타임스탬프: 1231006505 (2009-01-03 18:15:05 UTC)
ffff001d # 비트: 0x1d00ffff (초기 난이도)
1dac2b7c # 논스: 2083236893
각 필드 파싱:
버전 01000000 → 정수 1의 리틀 엔디안. 블록 버전 1이다.
이전 블록 해시 0000...0000 → 32바이트의 0. 제네시스 블록에는 이전 블록이 없다. 이것이 이 필드가 모두 0인 체인의 유일한 블록이다.
머클 루트 → 제네시스 블록의 단일 트랜잭션(코인베이스)의 해시. 트랜잭션이 하나뿐이므로, 머클 루트는 단순히 그 트랜잭션의 이중 SHA-256이다.
타임스탬프 29ab5f49 → 0x495fab29의 리틀 엔디안 = 1231006505 (10진수). 이는 2009년 1월 3일 토요일 18:15:05 UTC에 해당한다. 비트코인이 탄생한 순간이다.
비트 ffff001d → 0x1d00ffff의 리틀 엔디안. 비트코인이 사용한 가장 쉬운 목표를 인코딩한다 — 단일 채굴자의 네트워크에 적합하다.
논스 1dac2b7c → 0x7c2bac1d의 리틀 엔디안 = 2083236893 (10진수). 사토시는 목표보다 낮은 해시를 생성하는 것을 찾기 전에 20억 개 이상의 논스 값을 반복했다.
블록 바디
헤더 아래에 실제 트랜잭션을 포함하는 블록 바디가 있다. 바디는 트랜잭션 수를 나타내는 가변 길이 정수(varint)로 시작하고, 직렬화된 트랜잭션이 뒤따른다.
코인베이스 트랜잭션
모든 블록의 첫 번째 트랜잭션은 코인베이스 트랜잭션(생성 트랜잭션이라고도 함)이다. 이것은 비트코인에서 새 코인을 생성하는 유일한 트랜잭션 유형이다 — 실제 입력이 없고 블록 보상을 채굴자에게 수여하는 출력을 생성한다.
입력: 특별한 속성을 가진 단일 입력:
- 이전 트랜잭션 해시: 32바이트의 0 — 소비할 이전 트랜잭션이 없음
- 이전 출력 인덱스: 0xFFFFFFFF — 실제 출력 참조가 아님을 나타내는 최대값
- 코인베이스 데이터: 최대 100바이트의 임의 데이터. BIP-34 이후 첫 바이트는 블록 높이를 인코딩해야 함
사토시는 제네시스 블록의 코인베이스 데이터에 “The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”라는 텍스트를 유명하게 내장했다 — 타임스탬프 증거이자 비트코인이 대체하도록 설계된 통화 시스템에 대한 정치적 성명이다.
출력: 블록 보상(보조금 + 수수료)은 반감기 스케줄을 따른다:
- 블록 0-209,999: 50 BTC
- 블록 210,000-419,999: 25 BTC
- 블록 420,000-629,999: 12.5 BTC
- 블록 630,000-839,999: 6.25 BTC
- 블록 840,000-1,049,999: 3.125 BTC (2026년 현재 에포크)
코인베이스 트랜잭션은 특별한 성숙 규칙이 있다: 출력은 해당 블록 위에 100개의 추가 블록이 채굴될 때까지 소비할 수 없다.
증인 데이터와 세그윗
세그윗(Segregated Witness)은 2017년 8월에 활성화되어 블록 내 트랜잭션 데이터 구성 방식을 근본적으로 변경했다. 세그윗 이전에는 서명(증인) 데이터가 트랜잭션 입력에 직접 내장되었다. 세그윗은 이 데이터를 별도의 “증인” 구조로 이동시켰다.
세그윗 블록은 코인베이스 트랜잭션에 증인 커밋먼트를 포함한다. 이것은 블록 내 모든 트랜잭션의 wtxid(증인 트랜잭션 ID)로 구성된 트리의 머클 루트를 포함하는 OP_RETURN 출력이다.
이는 각 블록 내에 두 개의 병렬 머클 트리를 생성한다:
- 트랜잭션 머클 트리 (헤더 내): 증인 데이터를 포함하지 않는 txid로 구축
- 증인 머클 트리 (코인베이스 내): 증인 데이터를 포함하는 wtxid로 구축
이 분리는 트랜잭션 가변성 문제를 해결했다: txid가 서명 데이터를 포함하지 않으므로 제3자가 서명을 수정하여 txid를 변경할 수 없다. 이것은 신뢰할 수 있는 결제 채널 구축(라이트닝 네트워크)의 전제 조건이었다.
블록 크기 vs 블록 가중치
세그윗 이전에 비트코인은 블록 크기에 1MB(1,000,000바이트) 하드 제한을 적용했다. 세그윗은 바이트 기반 크기 제한을 가중치 기반 시스템으로 대체했다:
블록 가중치 = (비증인 데이터 × 4) + (증인 데이터 × 1)
최대 블록 가중치는 4,000,000 가중치 단위(4 MWU)다.
이 공식은 증인 데이터에 비증인 데이터 대비 75% 할인을 부여한다. 근거:
- 비증인 데이터(입력, 출력, 금액)는 UTXO 집합에 영구적으로 저장되어야 하며 노드가 처리하는 데 더 비용이 많이 든다
- 증인 데이터(서명)는 초기 검증에만 필요하며 이후 가지치기할 수 있다
실제적으로:
- 레거시(비세그윗) 트랜잭션만 포함하는 블록의 유효 최대 크기는 1MB
- 100% 세그윗 트랜잭션 블록은 원시 크기로 최대 약 4MB까지 가능하지만, 일반적인 블록은 1.5-2.5MB
- 2026년 초 기준 채굴된 가장 큰 블록은 약 3.96MB(2023년 2월 블록 774,628)였으며, 거의 전체 증인 공간을 소비하는 단일 Ordinals 인스크립션을 포함했다
가상 크기 (vsize)
수수료 계산 목적으로 비트코인은 가상 크기(vsize)를 사용한다:
vsize = 가중치 / 4 (올림)
수수료율은 vbyte당 사토시(sat/vB)로 표현된다.
컴팩트 블록 (BIP-152)
2016년 BIP-152는 네트워크를 통해 새 블록을 전파하는 데 필요한 대역폭을 극적으로 줄이는 컴팩트 블록 릴레이를 도입했다.
컴팩트 블록은 다음과 같이 작동한다:
- 송신 노드가 블록 헤더, 짧은 트랜잭션 ID 목록(6바이트 절단 해시), 코인베이스 트랜잭션을 포함하는 컴팩트 블록 메시지를 전송
- 수신 노드가 짧은 ID를 자신의 멤풀에 있는 트랜잭션과 매칭
- 수신자가 없는 트랜잭션에 대해 전체 트랜잭션 데이터를 요청
- 수신자가 멤풀 트랜잭션과 요청한 누락 트랜잭션으로 전체 블록을 재구성
실제로 새 블록의 대부분의 트랜잭션이 이미 수신 노드의 멤풀에 있기 때문에, 컴팩트 블록은 블록 릴레이 대역폭을 약 90% 줄인다. 2MB 블록이 약 20KB로 전달될 수 있다.
경제적 대상으로서의 블록
기술적 구조를 넘어 블록은 경제적 현실을 대표한다. 블록을 생성하는 채굴자는 경제적 결정을 내린다: 어떤 트랜잭션을 포함할지(수수료 극대화), 얼마나 많은 연산 작업을 투자할지(에너지 비용 vs 예상 보상), 코인베이스 출력을 어떻게 구성할지.
블록 헤더에 내장된 작업증명은 단순한 기술적 메커니즘이 아니다 — 에너지 지출의 위조 불가능한 기록이다. 목표보다 낮은 유효한 해시를 생성하는 논스는 수십억 번의 해시 계산을 대표하며, 각각은 실제 전기를 소비한다. 이 에너지 비용이 비트코인의 불변성에 물리적 기반을 부여한다.
모든 블록은 2009년 1월 3일 이후 지속적으로 성장해 온 추가 전용 원장의 한 장이다. 트윗보다 작은 80바이트 헤더가 전체 체인 보안의 무게를 지탱한다. 그 구조를 이해하는 것은 신뢰 불필요 디지털 화폐의 기반을 이해하는 것이다.