본문 바로가기
개발 학습/블록체인

Docker로 노드 운영 (2) : 계정 및 제네시스 블록 생성

by StelthPark 2022. 2. 19.

1. Geth로 계정생성

우선 로컬테스넷에서 나만의 프라이빗 블록체인을 만들고 거기서 첫 제네시스 블록부터 계정생성 ~ 채굴까지 해볼것이다. 로컬에서 geth를 시작하기전에 데이터디렉토리와 genesis.json파일이 필요하다 이 genesis.sjon은 제네시스 블록정보가 저장된 json형태 파일이다 데이터 디렉토리는 송수신한 블록데이터와 계정정보를 저장하게 된다. 제네시스 블록이라하면 뭔가 가슴이 웅장해진다..

 

먼저 데이터디렉토리와 그 안에 genesis.json을 만든다.

 $ sudo mkdir test_data
 $ cd test_data
 $ vi genesus.json

 

자! 이제 준비가 다 됐고 geth console로 계정을 생성해보자!!!

       $ geth --datadir test_data account new

명령어 입력뒤 우리가 웹지갑에서 지갑을 만들때 처럼 비밀번호를 입력해준다. 비밀번호를 입력하고 나면 지갑주소가 나오게 되는데 이는 이후에 genesis.json에 사용되기 때문에 기억해두자!!!

 

 

2. 제네시스 블록 만들기

제네시스 블록이 만들어진다면 네 프라이빗 블록체인의 시작을 알리는것이다. 우선 아까 만들어놓은 test_data디렉토리안에 genesis.json을 vim으로 열어보자

 

$ vim genesis.json

그런 다음 아래 내용을 붙여넣는다.

        {
          "config": {
            "chainId": 8484,
            "homesteadBlock": 0,
        	  "eip150Block": 0,
            "eip155Block": 0,
            "eip158Block": 0
          },
          "difficulty": "20",
          "gasLimit": "2100000",
          "alloc": {
            "계정의 주소값": { "balance": "300000" }
          }
        }

계정주소값에는 아까 생성한 계정의 지갑주소를 넣어준다. 잘 기억하고 있어야한다. 여기서 각 속성들이 가지는 값은 이해하기 어려울 수 있다 한번씩 읽어보는것을 추천한다.

 

[genesis.json 속성값]

  • config: 이더리움 관련 설정이 들어 있습니다.
  • config.chainId: chain id는 현재 chain을 구별하는 값이며, replay attack으로 부터 보호해주는 역할을 합니다.
  • replay attack이란, 네트워크 공격의 한 종류로, 유효한 데이터 전송을 악의적으로 반복시키거나 지연시키는 공격의 일종입니다.
  • config.homesteadBlock: homestead는 이더리움의 4단계 로드맵 중 두번째 메이저 단계입니다. 속성값이 0인 경우, true를 의미합니다.
  • config.eip155Block: EIP는 Ethereum Imporvement Proposal의 약자로, 개발자들이 이더리움을 업그레이드 하기 위해 제안된 아이디어를 의미합니다. EIP155는 chainId와 마찬가지로 replay attack을 막기 위한 설정입니다.
  • config.eip150Block: IO가 많은 작업에 대한 가스 변경 비용을 위한 설정입니다.
  • config.eip158Block: EIP158은 계정의 상태가 변경되고, 변경된 결과값으로 인해 계정의 nonce와 balance 값이 0이 되고 code와 storage가 빈 값이 되는 경우 해당 계정을 삭제합니다.

위 4가지 설정(config.homesteadBlock, config.eip155Block, config.eip150Block, config.eip158Block)은 사설 블록체인을 만들 때 기본적으로 동일한 설정입니다.

  • difficulty: 채굴 난이도 입니다. 값이 클 수록 채굴 난이도가 상승하며, 낮을 수록 난이도가 낮으집니다. 여기서는 빠른 채굴을 위해 낮은 값을 넣었습니다.
  • gasLimit: 블록 당 담을 수 있는 가스(수수료)의 한도를 설정합니다. 하나의 블록 안에 담을 트랜잭션 갯수를 결정하는 데 사용하는 옵션입니다. 값이 클 수록 트랜잭션을 많이 보내고 다양한 테스트를 할 수 있기 때문에 여기서는 높은 값을 할당했습니다.
  • alloc: 제네시스 블록이 생성됨과 동시에, alloc 에 등록된 주소로 이더를 전송합니다.
  •  

    그 외에도 parentHash, coinbase, nonce, mixhash, timestamp 속성값이 존재한다.

 

 

자!!!! 이제 제네시스 블록을 초기화하고 생성 할 준비를 하자

 

$ geth --datadir test_data init test_data/genesis.json

Successfully가 나온다면 정상적으로 초기화에 성공한것이다. tree모듈을 설치하고 모듈을 사용해 트리형대 디렉터리 구조를 확인해보자

 

$ apt-get install tree -y
$ tree test_data/

나는 어제 밤에 한번 작동을 시켜본적이 있어 트리구조가 다르게 나올 수 있다. 무시하자~ 트리구조를 잘 보길바란다. 이제 우리는 geth로 채굴을 해보고 트랜잭션을 날려볼것이다.

 

댓글