미리 알아야 할 내용들
비트코인 블록 기본 규칙
이번 글에서는 저번 글에 이어서 실제 비트코인 블록의 기본 구조와 규칙에 대해 알아보겠습니다. 먼저 분석할 블록을 먼저 불러오겠습니다. 다음은 비트코인 블록체인에서 가장 처음 채굴된 블록인 제네시스 블록입니다.
0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000
1. 블록 헤더와 트랜잭션
블록은 크게 블록 헤더와 트랜잭션으로 나뉩니다. 블록의 헤더는 이전 블록의 해시 값, 작업증명을 위한 논스 값 등을 가지고 있는 블록의 핵심 부분이며, 트랜잭션은 비트코인 트랜잭션을 말합니다.
블록 헤더: 0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c
트랜잭션 전체 개수(가변 길이 정수): 01
트랜잭션: 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000
트랜잭션의 구조에 대해서는 이전 글에서 다뤘으므로 이 글에서는 생략하겠습니다. 관련 내용에 대해서는 아래 글을 참조해주세요.
2. 블록 헤더의 구성
블록 헤더 전체: 0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c
블록의 헤더는 크게 블록의 버전, 이전 블록의 해시값, 머클 루트, 비트값, 논스값으로 구성되어 있습니다. 실제 블록을 보면서 하나씩 살펴보겠습니다.
트랜잭션과 마찬가지로 블록의 첫 4바이트(16진수 8자리)는 버전입니다.
버전(리틀 엔디안, 4바이트): 01000000
이어지는 32 바이트의 값은 이전 블록의 hash256 해시값입니다. 제네시스 블록의 이전 블록은 존재하지 않으므로 이 블록에서는 비어있는 값입니다.
이전 블록 해시(리틀 엔디안, 32바이트): 0000000000000000000000000000000000000000000000000000000000000000
이전 블록 해시 이후에 등장하는 값은 바로 트랜잭션들이 이루는 머클 트리의 루트 해시값인 머클 루트입니다.
머클 루트(리틀 엔디안, 32바이트): 3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a
그다음 등장하는 값은 유닉스 시간으로 표현된 블록 생성시간인 타인스탬프입니다. 총 4 바이트의 값입니다.
타임스탬프(4바이트): 29ab5f49
이어지는 값은 작업증명에서 사용되는 값인 비트값과 논스값입니다. 비트 값은 작업증명의 난이도를 결정하는 값이며, 논스값은 작업증명을 위해 노드가 변경하는 값입니다. 두 값 모두 4바이트로 구성되어 있습니다.
비트값(4바이트 리틀 엔디안): ffff001d
논스값(4바이트 리틀 엔디안): 1dac2b7c
지금까지 블록의 전반적인 구성에 대해 살펴봤습니다. 이어지는 글에서는 머클 루트, 비트값, 논스값 등이 정확히 어떻게 생성되고 사용되는지에 대해 알아보겠습니다. 감사합니다.
이어지는 글들
'비트코인 > 비트코인 구조' 카테고리의 다른 글
[비트코인 구조] 머클 트리(Merkle Tree) (0) | 2022.12.14 |
---|---|
[비트코인 구조] 블록 버전 (0) | 2022.12.12 |
[비트코인 구조] 비트코인 블록(Block) 기초 (0) | 2022.11.29 |
[비트코인 구조] 세그윗에서 증인(Witness) 데이터를 전송하는 방식 (0) | 2022.11.19 |
[비트코인 구조] P2SH 스크립트에서 리딤 스크립트를 전송하는 방식 (0) | 2022.11.19 |