Go Ethereum

❶ 공식 Full Node Ethereum Full Node는 총 3가지 존재한다. Go-Ethereum(geth), cppEthereum(aleth)(현재 미지원), pyethereum(현재 미지원) 으로 존재한다. 공식적이지는 않지만 많이 사용했던 openethereum(parity)(현재 미지원)이 존재한다. ❷ 다양한 통신방안 Socket통신만 지원하는 bitcoind와는 달리 geth는 IPC, HTTP, Websocket등 다양한 방법으로 Client와 통신할 수 있는 방안을 제공한다.

❸ 사용방안에 따른 용량관리 Bitcoind prune와 달리 geth는 사용 방안에 따라 여러가지 모드를 제공한다. Snap, Full, light 모드등을 제공한다. 여기에 archive 모드를 on/off 하느냐에 따라 접근 가능한 블록체인 데이터가 달라진다.

Geth 실행 주요 Option

❶ --http.api JSON RPC API(admin,clique, debug, eth, les, miner, personal, txpool,web3) 중 Client에 허락되는 API 만 지정하여 Open이 가능하다.

❷ --networkid 테스트넷과 메인넷 그리고 Private Blockchain 중 선택하여 운영이 가능하도록 한다.

❸ --syncmode 블록체인 데이터를 어느정도 가지고 있을지 정하는 것이다. Snap 모드는 약 400GB정도이고, Full 모드의 경우 1000GB정도이다.

❹ --gcmode Full, Archive 모드로 구분되며 Archive의 경우 약 11TB정도의 데이터 저장공간이 필요하다. 모든 History 데이터가 조회가 가능하다.

Geth 설치 및 실행

Geth는 Binary파일을 다운 받아서 실행하면 자동으로 default 값으로 설정된 값으로 실행이 된다.

Geth 설치 후 Node에 접근하는 방법은 2가지 방법이 있다.

geth console 은 node실행과 console 실행이 동시에 진행된다. geth attach 은 노드를 실행한 상태에서 진행해야한다.

스크린샷 2024-01-08 오후 1.05.33.png

Geth API 예제

Geth Attach에서 가장 먼저 진행해야하는 것은 Block Syncing이 완료되어야 한다는 것이다.

전체 블록체인이 Sync가 완료되어야 해당 계정의 State를 정확하게 알 수 있고, Transaction을 실행시킬 수 있게 된다.

스크린샷 2024-01-08 오후 1.05.51.png

JSON-RPC API

❶ eth_getBlockByNumber Ethereum 블록 정보를 조회합니다. Number, Header Hash 기준으로 조회가 가능합니다.

❷ eth_newfilter Geth에서 제공 받을 Event 정보를 등록합니다. 특정 주소, 이벤트 형식에 따라서 Dapp에서 조회가 가능합니다.

❸ eth_getTransactionCount 사용자가 거래 생성을 위해서 현재 nonce 정보를 조회합니다.