사설 네트워크의 Genesis 블록 파일 정의
Genesis 블록은
이더리움의 기반인 블록체인의 가장 첫 번째 블록이며
이전 블록에 대한 정보를 갖고 있지 않는 유일한 블록이다.
Genesis블록을 정의함으로써
원하는 목적에 부합하는
이더리움 사설 네트워크를 구출할 수 있다.
해당 이더리움 네트워크에 접속하는
모든 클라이언트 노드들은
동일한 Genesis 블록을 소유하고 있어야
블록체인의 합의 과정에 참여할 수 있다.
환경 설정 가이드에서 [ Private Network 구성 - B.Genesis Block 정의 ]를 보자.
1. config
Geth 1.6 버전부터
기존 이더리움 버전에서
발생한 문제점들을 해결하기 위해
하드포크가 이루어졌다.
해당 옵션은 새로운 버전의 Geth를 이용하여
1.6 이전 버전의 이더리움 네트워크에 접속하였을 때
발생 될 수 있는 문제점을 해결하기 위한 옵션으로
사설 네트워크의 경우 가이드처럼 값을 설정하면 된다.
2. nonce
mixhash 옵션과 함께
현 블록의 작업 증명을 위해서
충분한 양의 계산을 수행했음을 증명해주는 옵션이다.
블록체인의 작업 증명을 위해서는
mixhash 값과 nonce가 조합된 값의 hash값이
일정한 수 이하인 nonce를 찾는데,
가장 최근에 추가된 블록의 헤더의 해시가
nonce값의 조합으로 일정 수를 찾아
작업 증명을 완료하게 된다.
3. timestamp
해당 블록이 취득된 시점을 나타내는 옵션이다.
유닉스의 time() 함수의 결과와 동일한다.
Genesis 블록은 최초의 블록이기 때문에
값이 0이다.
timestamp는 블록체인에서 2가지 용도로 활용된다.
첫 째로 작업 증명의 난이도를 조절하는데 사용된다.
즉 두 블록 간의 timestamp 값의 기간이 짧다면
작업 증명을 위한 난이도가 올라가게 되고,
기간이 너무 길면 난이도가 내려가고
다음 블록의 작업 증명 계산량이 즐어들게 된다.
둘 째로 블록 간의 순서를 확인할 때 활용된다.
4. parentHash
nonce와 mixhash를 포함한
부모 블록의 헤더에 대한 해시 값을 갖는 옵션이다.
Genesis 블록의 값은 당연히 0이다.
5. extraData
현재 뚜렷한 목적을 가지고 사용하는 옵션은 아니지만
앞으로 추가될지도 모르는 옵션을 위한
32바이트의 임시 저장 공간으로 활용된다.
필요에 따라 임의의 값을 넣어도 무방하다.
6. gasLimit
하나의 블록이 담을 수 있는 gas의 임계치이다.
몇 차례의 거래를
하나의 블록에 묶어서
담을 수 있는지를 결정하는데
필요한 옵션으로
값이 클수록 많은 거래를 담을 수 있기 때문에
그만큼 거래가 더 빨라질 수 있다.
7. difficulty
블록 생성을 위한 계산 난이도를 조절하는 옵션이다.
이 옵션을 조절하여
블록이 생성되는 시간을 일정 수준으로 유지할 수 있다.
값이 클수록 유효한 블록을 발견하기 위해
채굴자가 통계적으로 더 많은 계산을 수행해야한다.
지연 없이 원활한 거래 수행을 하여
테스트를 진행하기 위해선 낮은 값을 설정하면 된다.
8. mixhash
nonce 옵션과 함께
현 블록의 작업 증명을 위해서
충분한 양의 계산을 수행했음을
증명해 주는 옵션이다.
9. coinbase
해당 블록에 대해서 채굴에 성공하면
얻게 되는 총 보상금을
160비트의 주소 값으로 표현한 옵션이다.
채굴 보상금과
스마트 컨트랙트 실행에 대한 환불 값의 합을 나타낸다.
10. alloc
Genesis 블록을 생성함과 동시에
사전에 정의한 이더리움 계좌에 원하는 액수의 이더를 미리 송금해 놓을 수 있다.
즉 초기 잔고를 정의한다.
Genesis 블록 생성하기
-
환경 설정 가이드에서 [ Private Network 구성 - C. DB 초기화 하기 ] 참고
-
geth의 --dev 옵션을 이용하여 이더리움 클라이언트가 자동으로 Genesis 블록을 만들어 사용하게 할 수 있다.
-
--dev 옵션은 개발자모드로 이더리움의 네트워크에 접속하는 옵션으로 기본 Genesis 블록을 자동 생성한다.
-
이 때 생성된 Genesis 블록은 생성 계산 난이도가 낮다.