블록체인의 블록구조
비트코인의 블록 구조
비트코인의 블록 구조는 헤더 ( Header ) , 거래로 나누어져 있다.
블록 구조에는 바디(Body)라는 필드가 존재하지 않는다.
블록체인이 왜 체인이고 암호화되어 있다고 하는지를 헤더를 보면 알 수 있다.
비트코인 헤더의 구조
1. 버전
비트코인이 어떤 버전을 쓰고 있는지 표기한다.
소프트웨어 프로토콜 업그레이드 추적을 위한 버전 번호이기도 하다.
2. 이전 블록 헤더 해시
체인으로 만드는 중요한 개념이다.
N번째 블록을 채굴하려는 노드가 N-1번째 블록을 전송받았을 때, 바로 이전 블록(N-1)에 대한 헤더 해시를 직접 계산하여 헤더에 넣는다는 뜻이다.
3. 타임스탬프
유닉스 타임(1970년 1월 1일) 기준으로 초 단위 해당 블록 채굴 시각을 기록한다.
4. 머클 트리 ( Merkle Tree )
4-1. 최종 데이터(트랜잭션)를 SHA256 형태의 해시값으로 변환한다.
4-2 . 거장 가까운 노드를 2개를 한 쌍으로 묶어 합친 해시값으로 변환한다.
4-3. 계속해서 해시값으로 변환하여 마지막 하나가 남을 때까지 이 과정을 반복한다.
최종적으로 최상단에 있는 노드가 머클 루트가 되고 머클루트는 모든 거래를 합친 해시값이 된다.
머클트리가 필요한 이유는 블록체인 네트워크 정보를 최소화하기 위해서 필요로 한다.
라이트 노드가 갖고 있는 요약본은 항상 64자로 일정하다. 용량을 줄이면 다양한 디바이스에서 참여 가능
머클 트리 자체가 해시값으로 이루어져 있어 하나의 트랜잭션 혹은 블록 내 필드 값이 변조되면
머클 트리 해시값이 변조되기 때문이다.
이러한 현상을 쇄도 효과 (Avalanche Effect) 라고 한다.
머클트리가 중요한 이유는 데이터의 유효성 검증을 시간복잡도 O(log_2N) 만에 할 수 있기 때문
모든 데이터를 가지고 있지 않아도 머클루트와 머클경로를 통해 무결성 검사를 할 수 있다. ( 용량 절감 )
5. 난이도 목표
Difficulty는 난이도를 표기한 형태이다
해당 블록을 채굴할 때의 난이도를 의미하며 블록에 높이에 따라 자동 설정된다.
Difficulty = MAX_TARGET / current_target
MAX_TARGET은 첫 난이도로 비트코인 블록체인이 처음 구동될 때 설정된 난이도 값으로 1을 의미한다.
4바이트로 1d00ffff 라고 표기되어있다.
current_target(목표값) = 계수 2^ ( 8 ( 지수 - 3 ) ) 이라는 공식을 사용할 수 있다.
특정 길이의 공간에서 앞자리의 0의 숫자 ( Leading Zerios) 가 길수록 난이도는 높다고 표현할 수 있다.
즉, 해시를 통해 나올 수 있는 결과값은 무수히 많은 경우의 수를 가지지만
난이도가 높을수록 목표값보다 낮은 값을 찾는 과정이 어렵다
결국 채굴은 목표값보다 낮은 현재 블록 헤더 해시값을 찾는 과정으로 설명할 수 있다.
블록 헤더 해시는 해시값이라 Random의 수의 결과를 갖고 왜 채굴이 어렵고 무작위인지 이해할 수 있다.
6. 논스 ( Nonce )
이 랜덤한 과정에서 유일하게 변하는 값은 논스다.
논스는 한번만 쓰이는 숫자이며 Number + Once 라고 생각하면 더 쉽게 이해할 수 있다.
논스는 0부터 시작하여 무수히 많은 숫자까지 증가시키며 목표값보다 낮은 해시 결과값을 찾도록 쓰인다.
모든 채굴 과정은 논스로 인해 결정된다.
채굴을 하기 위해선 논스만 바꿔주면 되는데 채굴이 간단한 것 같아도 한 글자의 차이도 완전히 다른 결과값을 만들어 낸다.
해시를 특성을 생각하면 목표값 이하를 만족시키는 해시를 찾기 위한 논스를 찾는 것은 쉽지 않은 것을 알 수 있다.
'BlockChain > 암호화폐' 카테고리의 다른 글
탭 루트 (1) | 2022.12.20 |
---|---|
다크코인과 영지식증명 (1) | 2022.12.18 |
지갑과 지갑의 종류 (0) | 2022.12.18 |
암호학 (0) | 2022.12.18 |
코인과 토큰 (1) | 2022.12.18 |
댓글