Ethereum (5) - BlockChain Private Network (Mac m1)
자 geth도 설치했고 간단한 테스트도 해봤으니 이제 Private Network를 구축해보자..!
현재 내 geth 버전은 1.10.15-stable 이다.
Private Network 구축시에 가장 중요한 3가지가 있는데 바로 genesis.json, network id, 부트스트랩 노드 이다.
각 서버에 Private Network를 구축한다고 가정했을때, 위의 세가지가 동일해야 같은 네트워크에서 블록체인을 실행 시킬 수 있다.
genesis.json
genesis json 파일은 블록체인의 가장 처음 블록을 의미한다. 해당 json 파일이 다르면 블록체인의 처음 블록이 달라지기 때문에 , 서로 다른 Private Network가 되어 버리니 주의 해야 한다.
chainId : networkId를 의미한다.(networkId는 밑에서 설명)
homesteadBlock : 블록체인의 Release 버전을 나타낸다.
(내가 봤던 예제들에는 eip155Block,eip158Block 까지만 있었는데 제대로 init이 되지 않아서, 이거 때문에 하루를 날려먹었다..이렇게 아래 블록들을 더 추가해주면 제대로 동작한다.)
difficulty : Private Network에서 블록의 nonce를 발견하는 난이도를 설정한다. difficulty가 높으면 블록이 느리게 생성된다.
gasLimit : 블록에서 소비되는 가스의 최대치를 의미한다.
alloc : 초기 account에 balance만큼 이더를 할당해 줄 수 있다. 단위는 wei이다. (0이 드릅게 많...네)
network Id
네트워크를 구분하기 위한 임의의 번호를 의미한다. 0번은 메인네트워크를 의미하고 여기 로 이동하면 각 번호가 의미하는 네트워크 아이디가 잘 설명되어 있다. private nework를 구축하기 위해서는 genesis.json에 chain id에 이 network id 값이 필수로 들어가 있어야 한다.
부트스트랩 노드
부트 스트랩 노드는 블록체인을 연결하고 있는 노드들의 목록을 저장하고 있는 노드이다. 부트 스트랩노드는 부트 노드로 실행되는데,
이더리움에서 부트노드는 여기에 소스코드가 있다. 해당 코드의 주석을 보면 부트노드는 다음과 같이 설명되어 있다.
bootnode runs a bootstrap node for the Ethereum Discovery Protocol.
직역하면 부트 노드는 Ethereum Discovery 프로토콜을 위한 부트스트랩 노드를 실행한다 는 의미이며 'bootnode' 명령어로 부트 노드를 구동 시킬 수 있다. 부트 스트랩 노드는 규모가 큰 블록체인에서 주로 사용되며, 규모가 작은 private network같은 경우에는 특정 노드가 부트스트랩 노드 역할을 하는 경우가 많다.
BlockChain Private Network 구축(부트스랩 노드 없이)
먼저 노드를2개 생성해서 연결하는 간단한 BlockChain Private network를 구축해보자.