본문 바로가기
프로그래밍/Block Chain

[Bitcoin] 블록체인

by YuminK 2025. 4. 29.

블록체인

블록체인 데이터 구조는 거래가 담겨있는 블록이 그 이전 블록과 연결되어 있는 형태의 정돈된 목록이다. 블록체인 내에 있는 블록 각각은 해시를 이용해서 식별된다. 해시는 블록의 헤더에서 SHA256 해시 알고리즘을 이용해서 생성된다. 각 블록은 블록헤더에 있는 '이전 블록 해시' 필드를 통해 이전 블록(부모 블록)을 참조한다.

 

블록은 단 1개의 부모 블록을 가지지만 일시적으로 여러 개의 자식 블록을 보유할 수 있다. 여러 개의 자식 블록은 블록체인 분기가 발생하는 동안 생성된다. 블록체인 분기란 다른 채굴자들에 의해 거의 동시로 다른 블록들이 발견되는 경우 발생하는 일시적 상황이다. 결국 단 하나의 자식 블록만이 블록체인의 일부가 되며 블록체인 '분기' 현상은 해결된다. 

'이전 블록 해시' 필드는 블록 헤더 내에 있으며, 이러한 특성 때문에 현재 블록의 해시에 영향을 끼친다. 블록 하나가 그 아래에 여러 세대를 두는 경우 나중에 생성된 블록 전부를 재계산하지 않고서는 해당 블록 내용을 변경시킬 수 없다. 이러한 재계산을 위해서는 엄청난 규모의 계산을 실행해야 하기 때문에 긴 체인으로 연결된 블록들은 블록체인의 누적된 기록을 변경시킬 수 없으며, 이러한 특성 덕분에 비트코인의 보안이 유지된다. 

 

블록 구조

블록은 메타데이터를 담고 있는 헤더와 그 뒤에 블록 크기를 결정하는 거래 목록이 길게 나열되어 있다. 

 

4바이트: 블록크기

80바이트: 블록헤더

1~9바이트: 거래 개수

가변적: 거래

 

블록 헤더

4바이트: 버전

32바이트: 이전 블록 해시

32바이트: 머클루트

4바이트: 타임스탬프

4바이트: 난이도

4바이트: 논스

 

블록 식별자: 블록 헤더 해시와 블록 높이

블록의 주요 식별자는 디지털 지문 역할을 하는 암호화 해시로 SHA256 알고리즘을 통해 블록 헤더를 2번 해싱하여 얻어진다. 결과값으로 나온 32바이트 크기의 해시를 블록해시라고 하지만 더 정확하게는 블록 헤더 해시이다(블록 헤더만 해시를 만드는 데 사용된다.) 블록 해시는 블록의 데이터 구조에 포함되지 않는다. 블록을 네트워크에서 전송받는 노드들에 의해 계산된다.  

 

블록을 식별할 수 있는 두 번째 방법은 블록체인 내에서의 위치를 파악하는 것이다. (블록 높이)

블록 높이를 통해 항상 단일 블록을 확인할 수 있는 것은 아닌데, 두 개 이상의 블록들이 동일한 위치를 점하기 위해 경쟁하는 경우가 있기 때문이다. (분기) 블록의 높이는 블록 내부에 저장되지 않는다. 

 

머클 트리

비트코인 블록체인 내 블록 각각은 머클 트리를 이용해서 해당 블록에 들어있는 모든 거래의 요약본을 가지고 있다. 머클 트리는 이진 해시 트리라고도 하는데, 규모가 큰 데이터 집합의 완전성을 효울적으로 요약하고 검증하는 데 사용되는 데이터 구조다. 머클 트리는 블록 내에 있는 모든 거래를 요약하기 위해 비트코인에서 사용되며, 거래의 전체 집합에 대한 모든 디지털 지문을 만들어 내고, 특정 거래가 블록 내부에 포함되는지 여부를 검증하는 데 매우 효율적인 프로세스를 제공한다. 루트 혹은 머클 투르라고 부르는 해시 하나가 남을 때까지 노드 쌍을 반복적으로 해싱하여 머클 트리를 만든다. 

 

비트코인의 머클 트리에 사용되는 암호 해시 알고리즘은 SHA256이며, 두 번 적용되기 때문에 더블 Sha256이라고도 한다. 거래는 머클 트리 내에 저장되지 않고 거래 데이터를 해싱해서 나온 결과를 리프 노드에 저장한다. 붙어 있는 리프 노드끼리 쌍을 지어 두 개의 해시를 연결하여 함께 해싱한 해시값을 부모 노드 내에서 요약한다. 

HA = SHA256(SHA256(Tx A))

HAB = SHA256(SHA256(HA + HB))

 

이러한 프로세스를 상위 노드가 1개만 남을 때까지 반복한다. 최상단 노드를 머클 루트라고 부르며 32바이트 크기의 해시가 블록 헤더에 저장된다. 요약해야 할 거래의 수가 홀수 개인 경우, 마지막 거래의 해시를 복사하여 짝수 개의 거래를 만든다. 

 

출처: 마스터링 비트코인 챕터 7

'프로그래밍 > Block Chain' 카테고리의 다른 글

[Bitcoin] 채굴과 합의  (0) 2025.04.30
[Bitcoin] 거래 스크립트 2  (0) 2025.04.28
[Bitcoin] 거래 스크립트 1  (0) 2025.04.27
[Bitcoin] 거래  (0) 2025.04.23
[Bitcoin] Descriptor  (0) 2025.04.22

댓글