Ethereum Multi node Private network 구성하기
Ethereum을 이용해 dApp을 만들어 배포하기 전에 Ethereum Client의 Private Network를 만들어서 테스트 한 후 배포를 해야 불필요한 비용을 줄일 수 있다.
해당 Tutorial에서는 3가지의 방법을 설명한다.
- Multi node를 가지고 있는 block Chain망 구성하기
- 어떻게 마이닝 노드 구성하는지
- 어떻게 Multi node들간 BlockChain 통신하는지
Geth 설치방법과 기본적인 동작은 생략한다.
1. Genesis Block 생성하기
/* genesis.json */
{"config": {"chainId": 1004,"homesteadBlock": 0,"eip150Block": 0,"eip155Block": 0,"eip158Block": 0},"difficulty": "0x20000","gasLimit": "0x2fefd8","alloc": {},"coinbase": "0x0000000000000000000000000000000000000000","extraData": "","nonce": "0x0000000000000000","mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000","timestamp": "0x00"}
(자세한 내용은 Genesis json이 무엇인가 해당 게시물을 참조하면 된다.)
2. 첫 번째 Node 생성
genesis.json파일을 생성했다면 이제 geth를 이용해 genesis block을 생성할 차례이다.
$ geth --datadir test1 init genesis.json
--datadir : 해당 폴더에 Blockchain의 노드정보를 저장한다.
해당 화면이 보인다면 genesis block 생성이 완료된다.
그 다음으로 첫번째 노드의 block chain network로 접속한다.
$ geth --datadir test1 --nodiscover --networkid 1004 console
--nodiscover : peer을 찾는 기능을 사용하지 않는다. 수동으로 추가한다.
--networkid : Ethereum Network의 id값이다. 다른 노드들과 같은 Network를 구성하기 위해 같은 id값으로 설정해주어야 한다.
3. 두 번째 Node 생성
두 번째 노드를 생성하는 과정도 첫 번째 노드생성과 비슷하다.
$ geth --datadir test2 init genesis.json
해당 화면이 보인다면 두 번째 노드 역시 성공이다.
4. 두 노드 연결작업
이제 두 노드간 연결작업을 할 차례이다.
먼저 터미널에 첫 번째 노드에 연결한다.
첫 번째 노드 터미널
$ geth --networkid 1004 --datadir test1 --nodiscover --port 30303 --rpc --rpcport "8545" --rpcaddr "0.0.0.0" --rpccorsdomain "*" --rpcapi "eth, net, web3, miner, debug, personal, rpc" console
--rpc : rpc통신을 사용한다.
--rpcport : rpc 통신을 위한 port를 8545로 설정한다.
--rpcaddr : rpc 통신에 모든 접근을 허용한다.
--rpccorsdomain : CORS 모두 허용 (와일드카드 *)
--rpcapi : rpc 해당 api를 사용
이제 두 번째 노드에 연결할 차례이다. 새 터미널을 실행시킨다.
두 번째 노드 터미널
$ geth --networkid 1004 --datadir test2 --nodiscover --port 30304 --rpc --rpcport "8546" --rpcaddr "0.0.0.0" --rpccorsdomain "*" --rpcapi"eth, net, web3, miner, debug, personal, rpc" console
이번에는 첫 번째 노드와는 달리 포트번호를 다르게 설정한다.
첫 번째 노드 터미널
> admin.nodeInfo.enode
"enode://8e55cf8b3a522817a312fd239c6b310a20af27dc031ae2f959a3ea73e2668121bbe505951422593448059e02970d0355e27da2a3969cb03e522261add183fbd6@127.0.0.1:30303?discport=0"
해당 명령어는 첫 번째 노드의 주소값을 얻는것이다. "enode://"와 같은 결과값을 출력한다.
두 번째 노드 터미널
> admin.addPeer("첫 번째 노드 enode 주소")
true
그 다음 아래 명령어를 이용해 정상적으로 정상적으로 peer가 추가됬는지 확인한다.
> admin.peers
위와 같은 화면이 나온다면 정상적으로 추가가 된 것이다.
똑같은 방법으로 첫번째 노드의 터미널에도 추가 시켜준다.
5. 마이닝 작업
이제 정상적으로 두 노드간 Network가 정상적으로 연결되었다.
테스트에 앞서서 마이닝 작업으로 정상적으로 구성이 됬는지 테스트할 수 있다.
첫 번째 노드의 터미널 혹은 두 번째 노드의 터미널 (아무상관없다)
$ personal.newAccount("eth") // 계정 생성
$ miner.start() // 마이닝 시작
마이닝 명령어를 시작한다.
두 사진과 같이 첫 번째 노드의 터미널에서 miner.start()를 시작했다고 한다면 두 번째 노드의 터미널에도 마찬가지로 정보가 뜨게된다.
'블록체인 > 이더리움' 카테고리의 다른 글
[이더리움 dApp] 로또 스마트 컨트랙트 Tutorial (0) | 2019.08.10 |
---|---|
[이더리움 dApp] 이더리움으로 간단한 상품관리 dApp 만들기 (8) | 2019.05.09 |
[이더리움]Genesis json이 무엇인가 (0) | 2018.12.01 |
댓글