#1. ethereum 기초 - geth / 기초 작업 /genesis block/Dapp

sjee·2021년 8월 11일
0

ethereum

목록 보기
1/3

1. geth 설치


Geth

  • Go ehereum 의 약자로 Go 언어로 만들어졌다.
  • 이더리움 노드를 커맨드 라인 인터페이스로 로컬에서 실행시킨다.
  • 저수준에서 작동 → 가나슈와 트러플보다 오래걸리고 복잡하다.
  • 그러나 이더리움 동작에 대해 더 자세히 배울 수 있다.

    $ sudo apt-get iynstall software-properties-common
    $ sudo add-apt-repository -y ppa:ethereum/ethereum
    $ sudo apt-get update
    $ sudo apt-get install ethereum

자동으로 환경변수 설정이 돼서 따로 수정할 필요 없다.

이렇게 나오면 성공이다.






2.계정 생성


이더리움을 통해 거래를 하려면 계좌가 있어야한다. 은행에 가면 우리가 일단 계좌부터 형성하는 것과 같다.

geth --datadir . account new

password 입력 란에 입력하면 계정이 생성된다. -> 잊어버리지 않게 주의!

  • --datadir : 내용을 저장할 위치를 가리킴! 현재 . 이므로 해당 디렉토리에 형성

해당 경로에 keystore 폴더가 생긴걸 볼 수 있다.

- keystore : 앞으로 만들 계정들을 저장하는 공간

  • 해당 명령어를 반복해서 원하는 개수의 계정을 만들어 준다. -> keystore 폴더에 개수만큼 파일이 생김







3.제네시스 블록 생성


제네시스 블록은 블록체인에서 첫 블록을 가리킨다. 먼저 스타트를 끊어야 뒷 블록이 생길수 있다고 생각하면 된다!


<제네시스 블록 생성 방법>

방법 1. puppeth 이용
방법 2. vim 으로 직접 블록 만들기

  • 방법 1: puppeth 는 go-etherem(geth) 모듈로 genesis 파일을 생성을 도와준다.
  • 방법 2: 블록 생성이라고는 하지만 초기 셋팅 json 파일을 만드는 것

이번은 puppeth 를 이용하여 제네시스 블록을 생성할 것!

puppeth

네트워크 이름 설정

  1. 제네시스 블록을 만들것이므로 2번

  2. 이미 파일이 존재한다면 2번을 눌러도 된다.

  3. pow 를 선택한다.

1, 2 모두 있다면 입력하고 없다면 엔터로 스킵 ㄱㄱ


1. 네트워크 id 를 설정해준다! 나중에 컨트랙트 배포시 필요하므로 기억해 두길 바란다.
2. 제네시스 블록 파일을 추출해야하므로 2번을 선택한다.
3. 2는 오타고 그냥 엔터누르면 default 가 되어 질문에서 제시한 4개의 json 파일 추출이 진행된다. -> 폴더에 넣고 싶으면 엔터가 아닌 폴더 이름을 치면 된다.

생성된 json 파일 중 mynet.json , 이게 주된 제네시스 블록 파일이 된다. -> 각자 설정한 network 이름으로 json 파일이 추출됨

mynet.json

"config": {
    "chainId": 1234,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "ethash": {}
  },

config 필드

config 안 필드들은 체인의 파라미터들을 정의하는데 쓰인다.
chainID : puppeth에서 정했던 네트워크 아이디
ethash : 합의 알고리즘이 작업증명임을 의미


  "nonce": "0x0",
  "timestamp": "0x610aef41",
  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x47b760",
  "difficulty": "0x80000",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": { .... }

timestamp

이더리움 가상머신에서 블록생성의 난이도 조절에 쓰임
연속되는 두 개의 블록의 timestamp 차이가 작으면 난이도 올라가고, 크면 내려감
블록들이 올바른 순서로 진행되고 있는지 확인

gasLimit

블록 내 트랜잭션이 소비할수 있는 최대 가스 값
각 블록마다 트랜잭션을 몇개나 처리할 것인가를 제한 → 블록 사이즈 조절

difficulty

블록의 유효성을 검사할때 사용되는 난이도
채굴자가 블록을 채굴하기위해 퍼즐을 풀면서 연산을 해야하는 횟수가 이 값과 연관
이 값이 높으면 블록 채굴시간 길어짐

alloc

지갑 주소의 자금을 미리 할당하는 내용임

"number": "0x0",
 "gasUsed": "0x0",
 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "baseFeePerGas": null

number

제네시스 블록이기 때문에 number 가 0

gasUsed

블록내에서 여러 트랜잭션을 처리하면서 사용한 모든 gas의 합
제네시스 블록은 처리한 트랜잭션이 없어서 0

parentHash

부모블록의 hash 의 정보 담고 있음
제네시스는 시작이기때문에 부모 블록이 없어 0 값임



참고

방법 2의 기본적인 genesis.jon 파일 형식은 다음과 같다. (구글링)

{
"config": {
"chainId": 1234,
"homesteadBlock": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"eip150Block" : 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "0x20000",
"gasLimit": "0x2fefd8",
"alloc": {},


"extraData": "",
"nonce": "0x0000000000000000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"

}

alloc 까지는 필수고 아래는 안쓰는 파일도 있다.







geth init


geth --datadir . init ./mynet.json

--datadir : 파일 저장할 위치

init : init 할 파일

geth 폴더가 새로 생성된 것을 볼 수있다. -> genesis block 을 이용해 체인을 형성한 것!




이제 console 에 접속하여 명령어를 내릴 수 있다.

profile
블록체인/ 보안 / 해킹

0개의 댓글