Cute Bow Tie Hearts Blinking Pink Pointer

블록체인

[이더리움] Geth로 다른 블록노드와 연결하기(리눅스 환경)

청포도 에이드 2022. 6. 30. 17:59
728x90

목차

 

- 개인키 파일인 json 생성해서 메타마스크 로그인

- geth 명령어

- geth 모듈 사용해보기

- private 네트워크 구성하기

 

 

 

제니시스, 체인네트워크로 나만의 네트워크 생성하거나, 코인 만들때
web3 라이브러리 같은 것들을 이용하는 것들은 geth부터 시작이다.

즉, geth가 이더리움의 근본이다.

 

앞으로 일어질 결과들은, go 언어와 geth 다운로드를 했다는 전제하에 이루어진다.

 

 

개인키 파일 생성하기

 

 

 cd ~/.ethereum
ls

 

 

~/.ethereum 디렉토리 안에 geth, keystore가 있는 것을 확인할 수 있을 것이다.

 

(geth,ipc, history 일단 무시.아직 없는 게 맞음)

 

여기서 keystore는 내 개인키저장공간, geth는 chaindata 가 담긴 공간이다.

 

keystore안에 있는 파일을 보자.

 

cd keystore

ls

 

여기 있는 파일이 json형식이다. 개인키 말고도 이걸로 메타마스크 로그인을 할 수 있다!!(파일추가해서. 이건 별도로 쓰진 않겠음.)

 

geth 동기화 명령

 

  • full sync - 모든 body 트랸잭션 내용 다받음(모든 블록 다 받음) default
  • fast sync - 마지막 트랜잭션 1024개만 받아옴(블록은 가져오되, latest tx -1024)
  • light sync - block header정보와, latest 스냅샷 받음


default 값을 변경하는 명령은,

 

geth --syncmode light

이다.

 

만약 geth가 없다는 에러 메세지가 나온다면,

 

source ~/.profile

를 한번씩 실행해주자. 아마 터미널을 재실행할 때마다 저 명령을 사용해주어야 할 것이다.

 

geth --syncmode light를 입력하면, geth.ipc파일이 생성된다.

 

geth 를 실행하면, 뭐가 계속 나올텐데... 기존의 블록들을 다운받는 과정이고,

멈춰있는 상태로 있다가,뭔가 하나씩 추가된다면 새로 생긴 블록이 생성 되는 거다.

 

실행 중인 geth --syncmode light는 그대로~ 두고, 새 터미널을 열어라.

 

그다음

source ~/.profile

를 한 번 실행 후,

 

geth attach ~/.ethereum/geth.ipc

를 입력해주자. 그러면 드디어 geth 모듈들을 사용할 수 있는 환경으로 들어온 것이다. (ipc통신연결을 한 것임)

 

혹시 오류가 난다면,

 

geth attach --ipcpath "~/.Ethereum/geth.ipc"

절대경로를 이용해주자.

 

아래와 같이 나오면 성공이다.

 

Geth 모듈 사용해보기

 

personal.newAccount()
1234 //비번설정
1234 // 비번 재입력

새로운 계정을 생성하는 명령이다.

비밀번호는 까먹지 않도록 그냥 1234로 했다.

 

eth.accounts

여태 생성한 계좌가 다 나온다. 필자는 personal.newAccount()를 여러번 했기때문에 많이 나오는 것임.

 

private 네트워크 구성하기

 


디렉토리 하나 생성에서 거기 들어가서,

node라는 파일을 생성해볼것이다. (직접 만드는 거 x)

 

그 전에, genesis Block 파일을 만들어준다.

 

 

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

 

여태 실행시켜놨던 서버 다 끄고,

 

geth --datadir node init genesis.json

를 해주면? node라는 이름의 디렉토리가 생성된다.

 

그 안에 geth, keystore 모두 있음.

 

이제 아까 했던 내용을 반복해준다.

 

근데 명령어가 조금 다르다.

 


geth --datadir node --nodiscover ~/.ethereum/geth.ipc
안되면
geth --datadir node --nodiscover --ipcpath "~/.Ethereum/geth.ipc"
geth attach ~/.ethereum/geth.ipc
안되면
geth attach --ipcpath "~/.Ethereum/geth.ipc"

add to peer 안한 상태의 서버가 연결되는 것이다(나 혼자).

 

만약 안되면? (나도 안됐음)

 

 

이렇게 줄줄이 뜨면,

여기에 있는 url을 이용해주면 된다!! 즉,

 

geth attach /home/gyuri/.Ethereum/geth.ipc


그럼 끝..!

 

계정을 생성해보자.

 

personal.newAccount()
1234
1234
eth.accounts

 

계정생긴거 확인가능

eth.coinbase

도 사용할 수 있다

 

은행으로 치면... 주거래계좌를 띄워준다는 느낌.

주거래 계좌를 업데이트 하려면?

miner.setEtherbase(eth.accounts[1])

코인베이스 계좌를 인덱스 1번째 계정으로 바꾸겠다라는 뜻.

(eth.accounts 쳤을 때, 나오는 순서대로 인덱스 값을 먹이면 됨. 당연히 0부터 시작.)

eth.coinbase



바뀐것을 확인할수 있다.



miner.start(8)

숫자는 채굴에 사용할 쓰레드 수이다. 자유 지정가능.

 

혹시 멈추고 싶으면

 

miner.stop()

로 멈출 수 있다.

 

 

좀 시간이 지나고,(채굴할 정도 시간)

 

web3.fromWei(eth.getBalance(eth.coinbase),'ether')

몇 이더 채굴했는 지 확인 가능.

 

자, 이제 마지막으로 peer를 추가해보자.

 

admin.nodeInfo.enode

 

치면 나의 enode값을 알아낼 수 있다.

 

 

같이 private 네트워크를 실행중인 타인의 enode값을 가져와라.

 

그 후,

 

그 값을 붙여넣자.

 

 

 

 admin.addPeer("enode")

enode값은 대충 이렇다...

 

"enode://c2190c11c7949dd9f9e0dbb482a750bf5e29d54cce981ef212fc01ddd4e08e97c837d68a9a889584d604845946b2711c63b48b62513ad10fbf2fc06c8efc6fa2@127.0.0.1:30303?discport=0"

 

true가 뜨면 성공. 다시 말하지만 본인 enode 붙여넣는 거 아니다. 필자는 예시를 위해 친 것 뿐임.

 

net.peerCount

연결에 성공하면, 연결한 수만큼 숫자가 올라간다.!!

 

나는 왜 인지 되지 않았음....... 이유를 알아내면 나중에 추가하겠다.

728x90