salsa source

[이더리움 베이직] Genesis 블록 생성하기 본문

STUDY/블록체인

[이더리움 베이직] Genesis 블록 생성하기

dayofday 2018. 3. 12. 01:19

<출처 : 이더리움 베이직>




사설 네트워크의 Genesis 블록 파일 정의


Genesis 블록은 이더리움 기반인 블록체인의 가장 첫 번째 블록으로서 이전 블록에 대한 정보를 갖지 않는 유일한 블록입니다.


이더리움은 이 블록체인의 내용을 유연하게 변경할 수 있는 많은 옵션들을 지원하며,

이 옵션을 Genesis 블록에 정의함으로써 원하는 목적에 부합하는 이더리움 사설 네트워크를 구축할 수 있습니다.


해당 이더리움 네트워크에 접속하는 모든 클라이언트 노드들은 동일한 Genesis 블록을 소유하고 있어야

블록체인의 압의 과정에 참여 가능합니다.




다음은 JSON 형식의 커스텀 Genesis 블록 파일로서 메모장과 같은 텍스트 에디터를 이용하여 작성합니다.


<CustomGenesis.json>

{ "config" : { "chainID" : 15, "homesteadBlock" : 0, "eip155Block" : 0, "eip158Block" : 0 }, "nonce" : "0x0000000000000042", "timestamp" : "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData" : "0x00", "gasLimit" : "0x800000", "difficulty" : "0x400", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase" : "0x3333333333333333333333333333333333333333", "alloc" : { "7e214a733eb52d122df43968dbc62945ef92bb1e" : {"balance": "10000000000000000000"} } }

1) config

Geth 1.6 이전 버전의 이더리움 네트워크에 접속할 시 생길 수 있는 문제점을 해결하기 위한 옵션으로

사설 네트워크의 경우 위의 값으로 설정하면 됩니다.


2) nonce

mixhash 옵션과 함께 현 블록의 작업 증명을 위해 충분한 양의 계산을 수행했음을 증명해주는 옵션

블록체인의 작업증명을 위해 mixhash값과 nonce가 조합된 값의 해시 값이 일정 수 이하인 nonce를 찾는데

가장 최근에 추가된 블록의 헤더의 해시가 nonce 값의 조합으로 일정 수를 찾아 작업 증명을 완료합니다.


3) timestamp

해당 블록이 취득된 시점을 나타내는 옵션

Genesis 블록은 최초의 블록이기 때문에 0으로 설정하였습니다.

용도 - (1)작업증명의 난이도 조절  (2) 블록 간 순서 확인


4) parentHash

nonce와 mixhash를 포함한 부모 블록의 헤더에 대한 해시 값을 갖는 옵션

Genesis 블록은 최초의 블록이기 때문에 값은 0입니다.


5) extraData

현재 뚜렷한 목적을 가지고 사용하는 옵션은 아니지만 앞으로 추가될 지 모르는 옵션을 위한 32바이트 임시 저장공간입니다.

필요에 따라 임의의 갑을 넣어도 무방합니다.


6)gasLimit

하나의 블록이 담을 수 있는 gas의 임계치


7) difficulty

블록 생성을 위한 계산 난이도 조절 옵션

테스트를 위한 코드이기 때문에 낮은 값으로 설정했습니다.


8) mixhash

nonce옵션과 함께 블록의 작업 증명을 위한 옵션입니다.


9) coinbase

해당 블록에 대해 채굴에 성공하면 얻게 되는 총 보상금을 160비트의 주소값으로 표현한 옵션입니다.

채굴 보상금과 스마트 컨트랙트 실행의 환불 값의 합을 나타내며 'beneficiary' 또는 'etherbase'라고도 불립니다.

지속적인 테스트를 위해 큰 값으로 설정해 주는 것이 좋습니다.


10) alloc

genesis블록 생성과 함께 사전에 정의한 이더리움 계좌에 원하는 액수의 이더를 미리 송금 가능합니다.

이 옵션을 활용하여 앞서 개설한 계좌의 주소와 함께 초기 잔고(balance)를 정의하였습니다.

계좌의 주소는 앞서 생성 시 리턴받은 계좌의 주소입니다

(* 1018 wei == 1 ether)




Genesis 블록 생성하기



사설 네트워크 실행하기


-----------------------------각 폴더 경로------------------------------

사설 이더리움 네트워크 기본경로 : "c:\ethereum"

계좌 및 블록 데이터 저장 경로 : "c:\ethereum\data\myAccount"

Genesis 블록 파일(CustomGenesis.json)의 위치 : "c:\ethereum"

-------------------------------------------------------------------------


사설 네트워크의 최초 블록으로 생성하기


cmd 창에 아래 명령어를 실행합니다.

geth --datadir "c:\ethereum\data" init "c:\ethereum\CustomGenesis.json"



Genesis블록이 정상적으로 생성되면 아래 그림과 같이 블록 데이터가 저장되는 경로와

"Successfully wrote genesis state"라는 메세지를 확인 할 수 있습니다.



Comments