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

[220630] GETH를 통해 실제 이더리움 네트워크와 연결하기

by 한코코 2022. 7. 6.

geth 실행

geth가 잘 설치 되었다면 다음 경로에 keystore와 chaindata 디렉토리가 설치되어있을것이다.

이 장소에 블러온 블럭 정보들이 차곡차곡 저장된다.

mac : ~/Library/Etherum

linux : ~./ethereum

$ geth

// 실행이 안된다면 다음을 실행한 후 재실행
$ source ~/.bash_profile

 

 

 

 

블럭 동기화

geth를 실행시키면 이더리움 메인넷의 블럭 정보들을 가져오는게 이를 블럭동기화라고 한다.

keystore : geth가 개인키를 저장하는 공간

geth/chaindata : 블럭헤더, 바디, 트랜젝션(tx) 같은 정보들이 저장되는 공간

메인넷은 chain ID : 1 / 그 외엔 개인적으로 사용 가능한 private 네트워크

 

 

 

블럭동기화 3가지

full sync : 모든 블럭,바디,트랜젝션(tx),헤더 같은 블록의 내용들을 모두 받음

fast sync (설치 기본값) : 모든 블럭은 가져오지만 tx는 최근 1024건만 가져옴, 1024개는 body말고 헤더 내용만 가져옴.

light sync :  통신이 될 최소한의 정보만 가져옴, miner 모듈 없음. / block header lastest snp

 

나는 가볍게 기능을 확인할거라 light sync를 설치했다.

채굴 기능을 사용하고싶다면 최소 fast sync를 사용해야한다.

$ geth --syncmode light // 설치
$ geth removedb // 삭제

 

 

 

 

 

 

 

 

 

IPC 통신

Inter-Process Communication의 약자이며 프로세스 간 통신이란 뜻이다.

프로세스들 사이에 서로 데이터를 주고받는 모든 행위 또는 그에 대한 방법이나 경로를 뜻한다.

프로세스간 통신 : https://hancoco.tistory.com/268

 

프로세스간 통신

프로세스 통신 개념 정리 네트워크에 연결된 모든 장치를 노드(Node)라고 한다. 이 중에서 네트워크 주소(IP주소)가 할당되어 있는 노드들을 호스트라고 한다. 한 호스트 내에는 여러 프로세스들

hancoco.tistory.com

 

 

 

RPC 통신

IPC 통신 방법의 한 종류로 (예 :  ganache),

Remote Procedure Call의 약자이며 원격 프로시저 호출이란 뜻이다.

별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스간 통신 기술이다.

RPC 호출을 이용하면 함수가 실행프로그램에 로컬에 있던 원격위치에 있던 동일한 코드를 사용할 수 있다.

즉, 위치에 상관없이 원하는 위치에 원하는 함수를 사용할 수 있게 함.

 

 

 

프로시저

영구 저장 모듈 (Presistente Storage Module)의 줄임말.

DB(데이터베이스)에 대한 일련의 작업을 저장한 절차를 관계형 DB 관리 시스템에 저장한것

일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리집단의 집합.

하나의 요청으로 여러 SQL문을 실행시켜 네트워크 소요 시간을 줄여서 네트워크 부하를 줄인다.

특정 기능을 변경할때 프로시저면 변경하면 되기때문에 기능변경이 편하며 여러 어플리케이션과 공유가 가능하다.

 

 

 

 

GETH에서 IPC통신을 사용하는 방법

$ geth attach ~/Library/Ethereum/geth.ipc

노드 안에서 프로세스가 돌아가고있다는 전제하에, 다른 노드가 이 노드에게 연결 요청을 하는 코드다

  • geth를 실행하고 있는 프로세스에
  • 연결할게(붙일게 = attach)
  • ipc통신을 (ipc통신을 할 수 있게 해주는 .ipc 파일이 있는 위치를  =  ~/Library/Ethereum/geth.ipc)
  • 영어라서 이 순서로 되는건가봄.

 

http 네트워크를 생각하면 좀 더 이해가 쉽다.

geth = axios
attach = post
~/Library/Ethereum/geth.ipc = url

통신을 위해 axios를 사용하며, post 요청을 url로 보냄.
= 통신을 위해 geth를 사용하며 attach 요청을 ~/Library/Ethereum/geth.ipc로 보냄.

 

 

연결을 하게되면 Geth JabaScript console 프로그램이 실행되었다는 코드가 뜬다.

이더리움 기반의 가상머신에서 실행되는 이더리움 가상머신(EVM)을 만들 수 있는 프로그램이며,

이렇게 되면 module을 사용할 수 있게 되어서, web3 라이브러리를 물론 더 많은 기능을 사용할 수 있다.

 

 

 

 

사용할 수 있는 대표적인 모듈

web3.eth.syncing // 현재 블록데이터를 맞추는 중이냐
web3.eth.accounts

admin // node에 관련한 정보 뜸
admin.info // admin이 객체기 때문에 안에 속성값을 이용할 수 있음.
admin.nodeInfo.enode // node의 ip주소 같은 개념
  // 상대방과 피어를 연결하고 싶을때 이 정보를 주면 가능함
  
admin.datadir // 실제로 데이터가 저장되어있는 장소
personal
personal.newAccount() // 계정생성
  // keystore 디렉토리 안에 파일 하나 생성됨 (확장자는 다르지만 내용은 json)
  // 이거를 메타마스크에서 계정가져오기 json 파일에 넣으면 가져오게 됨
  // 보안면에서 조금 낫다. 비밀번호를 나만 알 수 있으니까.

miner.start() // 마이닝 시작
minser.stop() // 마이닝 종료
eth.getBalance(계정) // 계정에 있는 잔액을 확인
eth.coinbase // miner가 돌때 보상을 받을 계정 확인
miner.setEtherbase(계정) // 보상을 받을 계정 변경

 

댓글