본문 바로가기
프로그래밍/typescsript

[220630] 이더리움 private 네트워크 생성 / peer 연결하기

by 한코코 2022. 7. 8.

제네시스 블록을 생성하기 위한 초기값을 설정하기

// genesis.json
{
  "difficulty": "200000",
  "gasLimit": "3100000",
  "alloc": {},
  "config": {
    "chainId": 7722,
    "homesteadBlock": 0,
    "eip150Block":0,
    "eip155Block":0,
    "eip158Block":0
  }
}

 

chainId

제네시스 블록 외에도 chainId가 맞아야 채널을 열 수 있다. 채널넘버는 7722로 작성했다.

 

alloc

제네시스 블록을 생성할때 해당 계정에 밸런스(잔액)를 기본적으로 넣고 시작할 수 있는 요소.

( 예를 들어, 시작부터 다른 사람에게 금액을 보내야할때 생성해야할때 작성. )

 

homesteadBlock

이더리움은 총 네가지 로드맵( 프론티어, 홈스테드, 메트로폴리스, 세레니티 )이 존재한다.

그 중에서 사용할 버전을 작성하고 사용유무를 작성하면 된다.

사용하고싶을때는 숫자 0을 작성한다.

이번에는  안정성이 제일 높은 홈스테드를 사용할 것이다.

 

eip

이더리움 오픈소스이자 Ethereum Improvement Propasal의 줄임말.

핵심 프로토콜 사양, 클라이언트 API 및 계약 표준을 포함한 이더리움 플랫폼에 대한 표준을 설명하는 개념.

이더리움을 만든 사람에게 사용자들이 제안을 하고, 투표를 통해 선별한 제안을 기술로 구현해 이더리움에 넣어준다.

150, 155, 158번째 제안을 선택을 사용할 것이다.

사용하고싶을때는 숫자 0을 작성한다.

( 블로그 참고 : https://eips.ethereum.org/ )

 

 

 

 

 

 

 

데이터를 받을 디렉토리 설정해주기

geth 명령어를 통해 node라는 datadir를 만들고, genesis.json 파일을 읽어서 디렉토리를 새로 생성(init)해주는 코드다.

$ geth --datadir node init genesis.json

 

위 코드는 디렉토리만 만들어주는 코드기 때문에 실행하려면 다른 코드를 입력해야한다.

$ geth --datadir node // 실행코드

 

geth를 실행하기 전에 없던 geth.ipc 파일이 생성된것을 확인할 수 있다.

 

여기까지 왔다면 private 네트워크를 무사히 여는데 성공했다.

 

 

 

 

 

 

IPC 통신 시작하기

geth가 실행되고 있는 프로토콜에 연결할 다른 프로토콜을 만들기 위해 새 터미널을 열고 다음 코드를 입력해준다.

돌아가고 있는 geth가 있는 곳에 ipc통신을 하기위해 ipc파일이 있는 위치를 붙여주는(attach) 코드다.

$ geth attach '/Users/hancoco/workspace/220630/node/geth.ipc'

// ipc가 저장될 곳을 원하는 경로로 바꿔주는 icpatch
$ geth --datadir node ipcpath 'ipc파일이 있는 경로'

 

 

실행된 상태에서 admin을 입력하면 여러 정보가 뜨는데, 그 중에서 ports라는 속성이 있다.

7722라는 네트워크가 남과 겹칠 것을 한번 더 방지해서 discovery라는 속성이 주어져있다.

이더리움 모듈이 이 30303라는 포트번호를 가지고 알아서 찾아 연결해준다.

남과 중복되는 것을 방지하기 위해서 사용하는 코드가 있다.

다음 코드를 사용하면 외부적으로 연결되는 것을 막고 피어를 찾지않고,

강제적으로 나에게 피어를 연결하지 않는한 나만 사용하는 네트워크가 된다.

$ geth --datadir node --nodiscover

 

연결되어 있는 피어가 있는지 확인해보려면 다음 코드를 입력하면 된다.

$ geth attach 'ipc파일이 있는 곳' // <- 연결된 상태에서
$ admin.peers

 

 

 

 

 

 

계정 만들어주기

채굴을 하기전에 채굴을 하면 주는 보상을 저장할 코인베이스를 지정해야한다.

$ personal.newAccounts()
// 이후에 뜨는 Passphrase: 에는 비밀번호를 적어주자
// 비밀번호를 새로 만드는거니까 절대 잊지말자. 얘는 비밀번호 찾기 기능이 없다.
// Repeat passphrase: 비밀번호를 다시 한번 적기
// >> 생성된 계정주소가 뜬다.

keystore 안에 새로운 객체가 생성된것을 볼 수 있다.

 

생성한 계정을 확인해보자.

$ eth.accounts // 생성한 계정들을 배열상태로 전부 볼 수 있음.
$ eth.coinbase // 코인베이스 계정을 확인할 수 있다.

 

코인베이스를 다른 계정으로 바꾸려면 다음 코드를 사용하면 된다.

$ miner.setEtherbase(eth.accounts[1])
// 계정이 있는 배열에서 두번째 계정을 코인베이스로 바꾸는 코드

 

 

 

 

 

 

 

채굴 시작하기

결과값이 null이 나올건데 실행되고 있는 중이니까 걱정말자.

miner.start() // 채굴 시작하기
miner.stop() // 채굴 그만두기

 

저 망치 이모티콘이 채굴했다! 라는 표시다

 

채굴이 잘 되었는지 확인해보자.

$ eth.getBalance(eth.coinbase) // Wei단위
$ web3.fromWei(eth.getBalance(eth.coinbase),'ether') // ether 단위

어우.. 너무 많이 했다..

 

 

 

 

 

 

 

다른 사람과 연결하기

인터넷에서 사이트에 접속하려면 url 주소가 필요한것처럼, geth에서도 다른 사람과 연결되려면 그 사람의 enode값이 필요하다.

$ admin.nodeInfo.enode // 자신의 enode값 확인
$ admin.addPeer('다른 사람 enode값') // peer 연결하기
$ net.peerCount // 나와 연결된 peer 갯수 파악하기

 

댓글