검수요청.png검수요청.png

게스

해시넷
이동: 둘러보기, 검색

게스(Geth)는 "go-ethereum"(고 이더리움)의 약자로서, 프로그래밍 언어인 (Go)에서 구현된 전체 이더넷 노드를 실행하기 위한 다목적 명령 줄 도구이다. 명령행 부속 명령 및 옵션, Json-rpc 서버 및 대화식 콘솔의 세 가지 인터페이스를 제공한다.

개요

게스(Geth)는 이더리움재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로써, Go언어로 개발되었다. 게스를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. 게스는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 한다.

블록체인에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있다. 이더리움 블록체인의 노드 역할을 하며 사용자가 이더(Ether)를 마이닝하고 이더리움 기반의 가상머신에서 실행되는 소프트웨어인 이더리움 가상머신(EVM)을 만들 수 있는 프로그램이다.[1]

설명

Geth 설치 및 실행

Mac

Homebrew를 통해서 쉽게 설치 할 수 있다. $ brew tap ethereum/ethereum $ brew install ethereum

  • 설치확인

$ geth version

윈도우

https://geth.ethereum.org/downloads/ 에서 받으면 된다.
 zip 파일을 다운받아 설치하면 자동으로 PATH 환경 변수가 추가된다.

  • 설치확인

geth.exe를 실행 후, CMD에서 version을 확인하면 된다. [2]

실행

$ geth --networkid 4649 --nodiscover --maxpeers 0 --dataidr /PATH_TO/test_data console 2>> /PATH_TO/test_data/geth.log 명령어에 대한 설명과 옵션에 대해 설명

$ geth --networkid 4649 --nodiscover --maxpeers 0 --dataidr /PATH_TO/test_data console 2>> /PATH_TO/test_data/geth.log Geth 명령어 * networkid 4649
 네트워크 식별자(정수), 0~3은 예약된 숫자이다. 0~3을 제외한 숫자를 작성하면 된다. * nodiscover
 생성자의 노드를 다른 노드에서 검색할 수 없게 하는 옵션이다. 
 현재로써는 노드를 추가하는 것은 수동으로 해야한다.
 이 옵션을 하지 않으면 동일한 Genesis 파일과 네트워크 ID를 가진 블록체인 네트워크에
 생성자의 노드가 연결 될 수 있다.

$ geth --networkid 4649 --nodiscover --maxpeers 0 --dataidr /PATH_TO/test_data console 2>> /PATH_TO/test_data/geth.log Geth 명령어 * maxpeers 0
 생성자의 노드에 연결할 수 있는 노드의 수를 지정. 0을 지정하면 다른 노드와 연결 X * datadir /PATH_TO/test_data
 방금 우리가 생성한 데이터 폴더를 지정한다.
 미지정 시, 기본 디렉토리를 사용한다.

$ geth --networkid 4649 --nodiscover --maxpeers 0 --dataidr /PATH_TO/test_data console 2>> /PATH_TO/test_data/geth.log Geth 명령어 * console
 대화형 자바스크립트 콘솔을 가동한다. * 2>> /PATH_TO/test_data/geth.log
 로그 파일을 만들 때 사용하는 옵션. 에러를 해당 경로의 파일에 저장한다.[2]

로컬 테스트넷에서 Geth 가동

  • 데이터 디렉토리
 송수신한 블록 데이터와 계정 정보를 저장할 폴더를 말한다.
 데이터 디렉토리를 별도 지정하지 않으면 ~/.ethereum 이 기본 폴더로 지정된다.

  • 우선 바탕화면에 test_data 폴더를 만든다.
 2) Genesis 파일
 앞서 설명했듯이 Genesis 블록에 대한 정보가 저장된 JSON 형식의 텍스트 파일이다.
 사설 테스트넷을 구축할 경우 0 부터 블록체인을 만들기 때문에 Genesis 파일을 만들어준다.

노드 설치 및 실행

블록체인에 참여하려면 일반적으로 노드 가되기 위해 필요한 기능을 구현하는 클라이언트 소프트웨어를 실행한다 . 단순히 트랜잭션을 네트워크로 보내는 것과 같은 조치에도 일반적으로 노드가 필요하다. Ethereum 블록체인에 참여 하려면 Go 프로그래밍 언어를 사용하여 구현 된 Ethereum 네트워크에서 노드를 실행하기 위한 명령 줄 인터페이스인 Ethereum Geth를 사용하여 수행 할 수 있다.

이더리움의 목표는 서로 다른 프로그래밍 언어로 작성된 여러 가지 클라이언트 소프트웨어 구현을 제공하여 이더리움 내에서 다양한 생태계를 조성하는 것이다. 그러나 지금까지 가장 성숙한 이더리움 구현은 "Go Ethereum"이며 게스(Geth)로 축약된다. 다른 클라이언트, 특히 패리티가 있지만 Geth는 Ethereum 노드를 실행하기 위한 사실상의 참조 구현으로 볼 수 있다.[3]

구조

가장 낮은 수준에서 P2P (Peer-to-Peer) 프로토콜은 네트워크에서 통신을 담당하며 네트워크에서 피어를 검색하는 역할도 한다. 이 수준에서 사용되는 통신 메커니즘은 가십 알고리즘을 기반으로 한다 . 이 고전적인 분산 시스템 알고리즘은 1980 년대부터 시작되었으며 전염병 또는 소문이 인구를 통해 퍼지는 방식에 따라 네트워크 통신을 모델링한다. 아이디어는 간단하지만 강력하다. 네트워크의 노드는 메시지가 직접 연결된 다른 노드로 메시지를 릴레이 한 다. 이러한 노드는 이웃 노드로 간주 될 수 있다. 결국, 모든 노드는 전체 네트워크에 전파 될 때 릴레이 된 메시지를 받아야 한다.

P2P 메커니즘 외에도 Ethereum Geth는 세 가지 주요 모듈을 구현한다. 실제 Ethereum 클라이언트 구현 외에도 Geth에는 Swarm 및 Whisper 도 포함된다 . Swarm은 IPFS (Interplanetary Filesystem) 와 유사한 분산 파일 시스템으로, 대량의 데이터를 저렴하고 분산 된 방식으로 저장하는 것을 목표로 한다. Whisper는 블록체인 트랜잭션에 의존하지 않고 엔드 포인트 간의 통신을 가능하게하는 분산 메시징 프로토콜이다.

실제 이더리움 특정 모듈은 트랜잭션 처리를 위해 이더리움 가상 머신을 구현한다. 블록체인 상태는 LevelDB 키-값 데이터베이스에 저장된다. 애플리케이션이 실행중인 Geth 인스턴스에 연결하기 위해 JSON RPC API 가 노출된다. 직접 연결하거나 web3.js 와 같은 언어별 라이브러리를 통해 연결할 수 있다.[3]

특징

게스를 실행하면 이더리움 프론티어 라이브 네트워크에 참여할 수 있다.

  • 주소간 자금 이체
  • 계약서 작성 및 거래
  • 블록 히스토리 탐색
  • 개인 에테르

지원되는 플랫폼은 리눅스(Linux), 맥(Mac Os) 및 윈도우(Windows)이다.

명령어

account 명령어

  • list : Print summary of existing accounts
  • new : Create a new account

새로운 계정 생성

  • update : Update an existing account

비밀번호 바꾸기 $ geth account update 0 : 명령으로 0번째 계정을 업데이트 할 수 있다.

  • import : Import a private key into a new account

새로운 계정에 private key 생성, key 파일로 계정 생성 geth account import/path/to/<keyfile> [4]

인터페이스

  • 자바스크립트(Javascript)콘솔: geth 대화식 콘솔로 시작할 수 있으며, 자바스크립트 API를 노출시켜 노드와 상호작용하는 자바스크립트 런타임 환경을 제공한다. 자바스크립트 콘솔 API 에는 web3 추가 관리 API뿐만 아니라 자바 스크립트 앱 API도 포함된다.
  • JSON-RPC 서버 : JSON-RPC API geth를 노출하는 json-rpc 서버로 시작할 수 있다.
  • 명령 행 옵션은 명령 행 매개 변수와 하위 명령을 문서화한다.[5]

attach 이후에 javascript로 수행 할 수 있는 명령어

  • eth.accounts : 현재 생성된 계정 배열
  • eth.blockNumber : 현재 채굴된 블록의 번호
  • eth.hashrate : 현재 해시레이트
  • eth.coinbase : 채굴이 진행되면 보상을 받을 계정. 보통 이것을 eth.accounts[0]과 동일하게 셋팅한다.
  • eth.mining : 현재 채굴중인지 여부
  • eth.getBalance(account) : 계좌 잔고 조회
  • eth.getTranaction(tx) : 트랜잭션의 정보
  • eth.sendTransaction({from:account, to:account, value:wei}) : 트랜잭션 보내기
  • eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1,"ether")})
  • eth.pendingTransactions : 현재 진행을 기다리고 있는 트랜잭션 [6]

활용

Geth를 사용한 CPU 마이닝

이더리움(Ethereum)의 첫 번째 릴리스 인 Frontier에서는 a) GPU와 b) Ethereum 클라이언트인 게스만 있으면 된다. CPU 마이닝은 가능하지만 너무 비효율적이다. 현재 게스에는 CPU 마이너만 포함되어 있으며 팀은 GPU 광부분기를 테스트하고 있지만 프론티어의 일부는 아니다. Ethereum의 C++ 구현은 Eth (CLI), AlethZero (GUI) 및 EthMiner (독립형 마이너)의 일부로 GPU 마이너를 제공한다.

  • 계정관리
  • 암호화 토큰, 분산앱

종류

  • 게스 v1.9.0 최신 클라이언트

각주

  1. 게스클라이언트〉, 《프로그래머스》
  2. 2.0 2.1 DongHyeok Lee, 〈Blockchain Study(3) - 이더리움(Geth)〉, 《SlideShare》, 2018-03-27
  3. 3.0 3.1 Stefan Beyer, 〈Ethereum Geth: Installing and Running a Node〉, 《MYCRYPTOPEDIA》, 2019-03-27
  4. IT한다옹, 〈geth 명령어 정리 및 활용〉, 《티스토리》, 2018-03-10
  5. Chris Chinchilla, 〈〉, 《깃허브》, 2019-08-01
  6. Duongame, 〈이더리움 geth 명령어 모음〉, 《Steemkr》, 2018-02-27

참고자료

같이 보기


  검수요청.png검수요청.png 이 게스 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.