본문 바로가기
카테고리 없음

비트코인 블록 헤더 구조 분석

by 3min⚡️bitcoin 2025. 12. 7.

비트코인은 블록체인으로 만들어져 있다는 얘기는 이제는 너무 유명하다.

블록체인이란 블록을 해싱해서 체인으로 연결했기에 이와 같이 불린다.

사토시가 제시한 백서에서는 공식적으로 블록체인이라는 단어가 나오진 않지만, 업계 용어로 자리잡았다.

 

블록체인으로 인해서 과거의 데이터를 수정할 수 없고, 무결성이 보장된다는 얘기도 이제는 유명하다.

어떻게 이게 가능한지 알아보기 위해서는 블록의 헤더 데이터 구조를 살펴봐야 한다.

블록 헤더 & 타임스탬프 서버

learnmeabitcoin - Block

 

블록은 위 그림과 같은 구조로 이루어져있다.

블록의 본문에는 거래 내역인 트랜잭션이 기록되고, 블록의 헤더에는 다양한 메타데이터가 담긴다.

 

블록 헤더에는 정확히 6개의 값이 포함된다.

  • version: 버전값으로 어떤 프로토콜에 의해 이루어졌는지 알려준다.
  • previous block: 이전 블록 해시값이다. 이 값이 헤더에 포함되어 블록이 해싱되기 때문에, 값의 위변조가 불가능해지는 성격을 갖게 된다.
  • merkle root: 머클루트 값으로 모든 트랜잭션 값의 대장 해시값이다.
  • time: 블록 생성시각을 의미한다. 백서의 세번째 섹션에 나오는 타임스탬프와 달리 진짜 시각값이다.
  • bits: 난이도 값으로, 비트코인 작업증명(채굴) 난이도 값이다.
  • nonce: 채굴자가 해시 타겟값을 맞췄을 때 정답값이다. 채굴자는 논스값을 바꿔보며 난이도 목표에 맞는 블록 해시값을 찾아서 nonce에 기록하여 증명한다.

블록 헤더는 위 6가지 값을 포함해서 총 80바이트로 구성된다.2009년 이후 변한적 없이 무조건 80바이트이다.

  • 버전에 4바이트
  • 이전 블록 해시값에 32바이트
  • 머클루트에 32바이트
  • 시간에 4바이트
  • 난이도에 4바이트
  • 타임에 4바이트

이 80바이트 값을 SHA256 해시함수를 두 번 돌려서 만드는게 현재 블록의 해시값. 백서에서는 이를 현재 블록의 타임스탬프 서버라고 한다. 이렇게 계산한 현재 블록의 타임스탬프 서버값은 헤더에 포함되진 않고, 다음 블록 previous hash에 포함된다.

bitcoin white paper

 

JSON 형태로 살펴보기

 

57043번 블록을 살펴보자. 이는 비트코인이 역사적으로 첫 실물 거래가 일어난 피자데이의 블록이다.

https://news.sbs.co.kr/news/endPage.do?news_id=N1008111431

 

'15년 전 피자 두 판' 1조 5천억 가치 됐다…달라진 위상

비트코인 가격이 어제 사상 처음으로 11만 달러를 넘어섰습니다. 15년 전 5월 22일은 한 미국인이 비트코인 1만 개로 피자 두 판을 사 먹어 가상자산 업계에선 아주 기념비적인 날로 꼽히는데요.

news.sbs.co.kr

 

https://blockchain.info/block-height/57043?format=json

위 사이트에 접속하면 57043 번 블록을 JSON 포맷으로 확인할 수 있다.

"hash": "00000000152340ca42227603908689183edc47355204e7aca59383b0aaac1fd8",
"ver": 1,
"prev_block": "0000000013e7e85518dac94d012d73253d3fdac5c30c4143b177f3086f129580",
"mrkl_root": "5c1d2211f598cd6498f42b269fe3ce4a6fdb40eaa638f86a0579c4e63a721b5a",
"time": 1274552191,
"bits": 471178276,
"next_block": [
  "0000000013ab9f8ed78b254a429d3d5ad52905362e01bf6c682940337721eb51"
],
"fee": 99000000,
"nonce": 188133155,
"n_tx": 2,
"size": 23835,
"block_index": 57043,
"main_chain": true,
"height": 57043,
"weight": 95340,

 

 

위 사이트에서 조회하면 진짜 헤더값과, 자체적으로 추가한 메타데이터 값이 혼재되어있다.

블록 헤더의 6개 항목들은 자세히 다른 포스트에서 확인해보자.