DEV/Ethereum

[Ethereum] geth를 이용한 private network 구성 (PoA)

아이와사생활_ 2022. 1. 10. 23:43

아래 url에 있는 내용을 진행 할 예정이다.

https://geth.ethereum.org/docs/interface/private-network

 

Private Networks | Go Ethereum

Private Networks This guide explains how to set up a private network of multiple Geth nodes. An Ethereum network is a private network if the nodes are not connected to the main network. In this context private only means reserved or isolated, rather than p

geth.ethereum.org

위 내용을 보면 Private network은 PoA를  강력 추천 한다고 한다. 

 

이번 포스팅은 PoA ( Proof-of-authority ) 방식으로 구성하려고 한다.

 

진행순서는 아래와 같이 진행 한다.

  1. 계정생성( 지갑생성 )
  2. genesis.json 파일 생성
  3. genesis block 생성
  4. base node 시작
  5. 2번 node 구성 및 시작

 

1. 계정생성( 지갑생성 )

아래 명령어를 이용하여 지갑을 먼저 생성한다.

명령어 입력후 비밀번호를 두번입력하여 아래와 같이 지갑 주소를 생성한다.

 

geth account new --datadir .

    --datadir 은 저장소 경로를 설정하는 옵션이다.

 

2. genesis.json 파일 생성

아래 json을 이용하여 파일을 생성한다.

* extradata 값의 중간 c4d999A2aF7aFb301d2288F15C9920483C370d03 부분을  1번에서 생성한 지갑주소로 변경 해야한다. 

* alloc 값의 c4d999A2aF7aFb301d2288F15C9920483C370d03 값을 1번에서 생성한 지갑주소로 변경한다.

{
  "config": {
    "chainId": 1343,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "clique": {
      "period": 5,
      "epoch": 30000
    }
  },
  "difficulty": "1",
  "gasLimit": "8000000",
  "extradata": "0x0000000000000000000000000000000000000000000000000000000000000000c4d999A2aF7aFb301d2288F15C9920483C370d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "alloc": {
    "c4d999A2aF7aFb301d2288F15C9920483C370d03": { "balance": "300000000000000000000000000" }
  }
}

 

3. genesis 블록 생성

geth init --datadir . poa_genesis.json

위 명령어를 이용하여 genesis block을 생성한다.

 

4. base node 시작

geth --datadir . --networkid 1343 --http --http.api web3,eth,personal,admin,miner --mine --unlock 0xc4d999A2aF7aFb301d2288F15C9920483C370d03 --allow-insecure-unlock

위 명령어로 node를 실행한다. 

 * networkid는 genesis.json의 networkid와 같아야 한다. 

 * http 옵션은 http api를 활성화 하는 옵션이다.

 * mine 옵션은 블록 생성을 할 수 있도록 한다.

 * unlock 옵션은 geth 구동시 블록을 생성할 지갑을 사용하도록 설정한다. ( geth 구동시 비밀번호를 입력하여 활성화 한다. )

 * allow-insecure-unlock 옵션은 http api에서 지갑 unlock을 사용 할 수 있도록 한다.

정상 구동과 실행이 확인 된다.

 

5. 2번 노드 구성 및 시작

2 번의 genesis.json 파일을 이용하여 2번 노드에서 사용할 genesis block을 생성한다.

geth init --datadir second_node poa_genesis.json

두번째 노드를 시작한다.

geth --datadir second_node --ipcdisable --networkid 1343 --http --http.api web3,eth,personal,admin,miner --http.port 8544 --port 30302 --bootnodes "enode://86010262b3f3792d61a31ffccdac704bae170be552b224178c9680c346f790aa12f57292cae97f74cae4fdd443ced4926c81ee69460d5af2084a3fdc9d036ac6@127.0.0.1:30303"

* ipcdisable 옵션은 아래 이미지와 같이 에러가 발생하여 추가하였다.

* 포트 충돌을 피하기 위해 http.port 옵션과 port 옵션으로 포트를 변경해 주었다.

* bootnodes 옵션은 1에서 기동 로그에 p2p networking 값을 입력한다.

 

정상작동을 아래와 같이 확인할 수 있다.

 

https://github.com/chuljin100/TestEthereum/tree/main/private_network

 

GitHub - chuljin100/TestEthereum

Contribute to chuljin100/TestEthereum development by creating an account on GitHub.

github.com

위 node 구성을 진행한 테스트 입니다.

 

감사합니다.