[Ethereum] geth를 이용한 private network 구성 (PoA)
아래 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 ) 방식으로 구성하려고 한다.
진행순서는 아래와 같이 진행 한다.
- 계정생성( 지갑생성 )
- genesis.json 파일 생성
- genesis block 생성
- base node 시작
- 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 구성을 진행한 테스트 입니다.
감사합니다.