앞서 알아본 블록체인의 블록은 블록체인 1.0(작업 증명 알고리즘을 사용한 블록체인 기술)에서의 블록이었다.
이번에는 블록체인 2.0(스마트 컨트렉트 기능이 추가된 블록체인 기술)의 블록에 대해서 알아본다.
블록의 구성요소
블록체인 1.0을 기반으로 한 비트코인과 블록체인 2.0을 기반으로 한 이더리움의 블록을 통해 살펴본다.
비트코인의 블록은 헤더와 바디로 나누어 볼 수 있다.
이더리움도 비트코인의 블록 구조와 크게 다르진 않지만 블록의 헤더부분에 stack trace와 바디부분에 uncle list값이 추가되어 있다.
이더리움 블록 구성
이더리움의 코드(GO)를 보면 아래와 같이 블록과 블록헤더가 struct로 선언되어 있다.
블록
블록헤더
- ParentHash : 부모 블록의 해시값
- UncleHash : 현재 블록의 엉클 블록들의 해시값
- Coinbase : 채굴 후 해당 트랜잭션의 수수료를 받을 계정 주소
- Root : 계정의 상태정보가 보여있는 머클 패트리시아 트리의 루트 노드 해시값
- TxHash : 블록의 모든 트랜잭션에 대한 머클트리의 루트노드 해시값
- ReceiptHash : 블록 내 모든 트랜잭션에 대한 receipt들의 머클트리의 루트노드 해시값
- Bloom : 로그 정보를 사용하는데 사용하는 32바이트 블룸필터
- Difficulty : 블록 난이도를 이전블록의 난이도와 타임스탬프로 계산
- Number : 현재 블록번호
- GasLimit : 블록당 지급가능한 최대 가스 총합
- GasUsed : 블록내 트랜잭션에 사용된 가스의 총합
- Time : 블록의 최초 생성시간
- Extra : 블록의 기타정보
- MixDigest,Nounce : 작업증명에서 해시값을 계산하는데 충분한 계산횟수를 보장하기 위해 사용하는 값
Root, TxHash, ReceiptHash는 머클트리의 각 노드를 해시한 최종 루트해시값에 해당하고 나머지 값들은 각각 하나의 상수로 볼 수 있다.
제네시스 블록
제네시스 블록은 블록의 첫번째에 위치하는 최조 블록을 말하며 블록번호 0번에 해당되고 어떤 트랜잭션도 포함되지 않는다.
- Alloc : 일정량의 이더를 초기 계정에 할당할 때 사용하는 값으로 채굴작업 없이 초기 일정량의 이더를 발생하여 ICO(Initial Coin Offering)를 통해 판매하는데 사용할 수 있다.
- Coinbase : 채굴 후 보상코인을 수령할 주소
- Nounce, Mixhash : 채굴 시에 사용되는 값 (각각 8,32바이트)
- Difficulty : 채굴시의 목표값
- ExtraData : 32바이트 옵션항목
- GasLimit : 블록의 최대 가스량
- ParentHash : 이전 부모블록의 해시값, 제네시스 블록은 부모가 없기 때문에 0으로 할당
- Time Stamp : 블록의 생성기간