mac OS에서 geth로 이더리움 노드 구성하기

지피지기백전망고·2022년 8월 2일
0
post-thumbnail

💻 작업 환경


📡 geth란

Go Ethereum의 약자로 이더리움 구현 프로토콜 중 하나이며 Go로 개발되었다.
Json-rpc 서버 및 대화식 콘솔의 세가지 인터페이스를 제공한다.


💽 geth 설치

본 작업엔 Homebrew가 필요하다. 설치를 원한다면 아래 글을 참고. https://velog.io/@mng051/Homebrew

1. 아래 주소에서 geth 바이너리 압축 파일을 다운로드 한다.

https://geth.ethereum.org/downloads/

2. 압축을 해제하고 geth를 /usr/local/bin/ 으로 옮긴다.

3. geth version을 확인한다.

geth version


🔗 geth 실행

1. 네트워크를 구성할 디렉토리(ethNet)를 생성한다.

2. 디렉토리 안에 genesis.json을 작성한다.

{
  "config": {
        "chainId": 49277,
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock": 0,
        "constantinopleBlock": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x8000",
  "extraData"  : "",
  "gasLimit"   : "0x1000000",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
} //genesis.json

2-1. 주요 옵션

1. Config

block 환경옵션

  • chainId: 권한이 없는 사용자의 유입을 막기 위한 ID, reply attack으로부터 보호
  • homesteadBlock: 이더리움의 두번째 하드포크, 0은 해당 release를 사용함을 의미
    release별 정보를 알고 싶다면 레퍼런스를 참고
  • eip- : Etherium Improved Proposal의 약자로 개선된 문제해결 방안 (보안 옵션)

2. alloc

사전에 생성한 계정의 balance(잔고)를 지정

3. coinbase

현재 block의 채굴 보상을 받을 계정

4. difficulty

현재 block의 채굴 난이도, 낮을수록 block이 쉽게 생성됨

5. gasLimit

  • 한 block에 담을 수 있는 가스의 임계치
  • 과도한 가스 소비를 막기 위한 장치

6. nonce

PoW 알고리즘에 사용되는 nonce 값

7. mixhash

nonce와 결합하여 block에 충분한 양의 연산이 수행되었음을 증명하는 256bit의 해시값

8. parentHash

이전 block header의 Keccak 256bit 해시값, genesis block에선 기본값 0으로 설정

9. timestam

block을 생설할 때 Unix timestamp

3. geth init으로 genesis.json 기반의 genesis block을 지닌 node를 생성한다.

e.g. geth --datadir $생성경로 init $genesis.json 경로

4. 터미널에서 geth를 실행한다. 여러 옵션을 부여할 수 있다.

geth --datadir ~/ethNet/node01 --nodiscover --allow-insecure-unlock -syncmode "full" --port 30304 --http --http.port 8546 --networkid 49277 --http.api "admin, debug, web3, eth, txpool, personal, ethash, miner, net" 

4-1. 주요 옵션

--nodiscover: peer 탐색 비활성화

--allow-insecure-unlock: 계정 unlock 권한 부여

--syncmode "full": 풀노드로 동기화

--port 30304: rpc 포트 설정

--http.port 8546: http 포트 설정

--networkid 49277: network id 설정

--http.api "admin, -": geth JavaScript console api 설정


🕹️ geth JavaScrip console

1. geth를 실행한다.

2. geth attach http://localhost:port 를 입력한다.

3. geth JavaScript console에 진입한다. JSON-RPC API를 통해 노드를 조작할 수 있다.

geth API의 자세한 정보는 JSON-RPC API reference를 참고


🔨 계정 생성과 채굴

1. geth console에 접속

2. 계정 생성

personal.newAccounts("비밀번호")

3. 생성된 계정을 확인

eth.accounts

4. 채굴 시 보상을 얻는 계정 확인

eth.coinbase

5. 해당 계정의 잔고 확인

eth.getBalance(eth.coinbase)

6. 채굴 시작 (n = 채굴에 참여하는 thread 수)

miner.start(n)

7. geth log를 통해 채굴을 확인

8. 채굴을 멈추고 coinbase의 잔액이 늘어난걸 확인 (ETH)

miner.stop()
web3.fromWei(eth.getBalance(eth.coinbase))

참고자료

  1. https://geth.ethereum.org/docs/interface/command-line-options
  2. https://dejavuqa.tistory.com/236

0개의 댓글