앞서 알아본 블록체인의 블록은 블록체인 1.0(작업 증명 알고리즘을 사용한 블록체인 기술)에서의 블록이었다.
이번에는 블록체인 2.0(스마트 컨트렉트 기능이 추가된 블록체인 기술)의 블록에 대해서 알아본다.
블록의 구성요소
블록체인 1.0을 기반으로 한 비트코인과 블록체인 2.0을 기반으로 한 이더리움의 블록을 통해 살펴본다.
![](https://velog.velcdn.com/images%2Fdojun527%2Fpost%2Fd64767cc-58f8-476e-a01c-657ea37c20f7%2F%EC%A0%9C%EB%AA%A9%20%EC%97%86%EC%9D%8C.png)
비트코인의 블록은 헤더와 바디로 나누어 볼 수 있다.
이더리움도 비트코인의 블록 구조와 크게 다르진 않지만 블록의 헤더부분에 stack trace와 바디부분에 uncle list값이 추가되어 있다.
이더리움 블록 구성
이더리움의 코드(GO)를 보면 아래와 같이 블록과 블록헤더가 struct로 선언되어 있다.
블록
![](https://velog.velcdn.com/images%2Fdojun527%2Fpost%2F2fdfff08-0899-4a75-8220-39b7ca375815%2F%EC%A0%9C%EB%AA%A9%20%EC%97%86%EC%9D%8C.png)
블록헤더
![](https://velog.velcdn.com/images%2Fdojun527%2Fpost%2F16c9f391-7ff2-46a7-867f-0262528f13c7%2F%EC%A0%9C%EB%AA%A9%20%EC%97%86%EC%9D%8C.png)
- ParentHash : 부모 블록의 해시값
- UncleHash : 현재 블록의 엉클 블록들의 해시값
- Coinbase : 채굴 후 해당 트랜잭션의 수수료를 받을 계정 주소
- Root : 계정의 상태정보가 보여있는 머클 패트리시아 트리의 루트 노드 해시값
- TxHash : 블록의 모든 트랜잭션에 대한 머클트리의 루트노드 해시값
- ReceiptHash : 블록 내 모든 트랜잭션에 대한 receipt들의 머클트리의 루트노드 해시값
- Bloom : 로그 정보를 사용하는데 사용하는 32바이트 블룸필터
- Difficulty : 블록 난이도를 이전블록의 난이도와 타임스탬프로 계산
- Number : 현재 블록번호
- GasLimit : 블록당 지급가능한 최대 가스 총합
- GasUsed : 블록내 트랜잭션에 사용된 가스의 총합
- Time : 블록의 최초 생성시간
- Extra : 블록의 기타정보
- MixDigest,Nounce : 작업증명에서 해시값을 계산하는데 충분한 계산횟수를 보장하기 위해 사용하는 값
Root, TxHash, ReceiptHash는 머클트리의 각 노드를 해시한 최종 루트해시값에 해당하고 나머지 값들은 각각 하나의 상수로 볼 수 있다.
![](https://velog.velcdn.com/images%2Fdojun527%2Fpost%2Fd3631204-98fd-4adc-9db7-2f4c6c51a5f2%2F%EC%A0%9C%EB%AA%A9%20%EC%97%86%EC%9D%8C.png)
제네시스 블록
제네시스 블록은 블록의 첫번째에 위치하는 최조 블록을 말하며 블록번호 0번에 해당되고 어떤 트랜잭션도 포함되지 않는다.
![](https://velog.velcdn.com/images%2Fdojun527%2Fpost%2F9da6d1e6-ad9b-4152-acc8-5665a3468336%2F%EC%A0%9C%EB%AA%A9%20%EC%97%86%EC%9D%8C.png)
- Alloc : 일정량의 이더를 초기 계정에 할당할 때 사용하는 값으로 채굴작업 없이 초기 일정량의 이더를 발생하여 ICO(Initial Coin Offering)를 통해 판매하는데 사용할 수 있다.
- Coinbase : 채굴 후 보상코인을 수령할 주소
- Nounce, Mixhash : 채굴 시에 사용되는 값 (각각 8,32바이트)
- Difficulty : 채굴시의 목표값
- ExtraData : 32바이트 옵션항목
- GasLimit : 블록의 최대 가스량
- ParentHash : 이전 부모블록의 해시값, 제네시스 블록은 부모가 없기 때문에 0으로 할당
- Time Stamp : 블록의 생성기간