1. 블록의 구조와 식별자

블록은 링크 구조를 가지며, 새로 추가된 블록은 이 링크의 끝에 위치하게 된다. 각 블록은 자신의 앞에 위치한 블록(부모 블록)으로 연결되는 링크를 갖고 있고, 이 링크를 거슬러 올라가면 첫 번째 블록인 genesis 블록에 다다를 수 있다.

블록에는 거래나 부모 블록으로 이어지는 링크 같은 정보가 저장되어 있다.

 

[표1. 블록의 구조]

 

필드

필드 크기(바이트)

설명

Block Size

4

다음 필드부터 블록 끝가지 데이터 크기(바이트)

Block Header

80

블록 헤더 정보

Transaction Counter

1~9

블록에 포함된 거래의 수

Transaction

가변적

거래의 목록

[표2. 블록 헤더의 구조]

 

필드

필드 크기(바이트)

설명

Version

4

소프트웨어 혹은 프로토콜 버전 정보

Previous Block Hash

32

부모 블록의 해시값

Merkle Root

32

머클 트리 루트의 해시값

Timestamp

4

블록을 생성한 시간(Unixtime)

Difficulty Target

4

블록을 생성할 때 PoW의 난이도

Nonce

4

PoW에서 사용하는 카운터

블록체인 안에서 어떤 블록을 특정하려면 블록 해시와 블록 높이라는 값을 사용하는데, 이들 값을 블록 식별자라고 한다.

 

블록 해시는 블록 헤더를 SHA-256 알고리즘으로 2번 연속 해싱한 값으로, 모든 블록이 서로 다른 값을 갖는다. 블록 해시는 필요에 따라 노드가 계산하며 블록 내에 직접 저장되지는 않는다.

 

genesis 블록의 블록 높이는 0이고 그 뒤로 블록이 덧붙을 때마다 1씩 증가한다. 블록 해시는 특정 블록을 식별할 수 있는 유일 식별자인 데 비해 블록을 특정할 수 없는 경우도 있다.

 

블록에는 부모 블록으로 이어지는 링크가 있다. 하나 이상의 자식 블록을 갖는 경우도 있다.

 

 

2. 블록 안의 거래 검색하기

블록체인 네트워크에 참여하는 노드라고 해도 과거 모든 블록을 저장하지 않는다. 스마트폰이나 태블릿 같은 노드에는 저장 용량이 부족하여 모든 블록을 저장할 수 없다.

이러한 이유를 방지하기 위한 SPV(블록 헤더만 저장하는)가 있다. 과거의 모든 블록으로 구성된 블록체인을 풀블록체인이라 부르는데, 블록헤더만 저장하면 풀블록체인에 비해 1/1000 정도로 크키가 줄어들기 때문에 필요한 저장 용량도 대폭 줄어든다.

 

SPV노드에서 특정한 거래가 블록에 포함되어 있는지 확인하려면 어떻게 해야 할까?

-> 머클트리(Merkle tree)라는 것을 사용한다.

머클트리는 다음장으로 ^___^

 

이상 포스터를 마치겠습니다.

+ Recent posts