최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
− | '''게스'''<!--게쓰-->(Geth)는 "go-ethereum"(고 이더리움)의 약자로서, 프로그래밍 언어인 [[고]](Go)에서 구현된 전체 [[이더넷]] 노드를 실행하기 위한 다목적 명령 줄 도구이다. 명령행 부속 명령 및 옵션, Json-rpc 서버 및 대화식 콘솔의 세 가지 인터페이스를 제공한다.
| + | 게스(Geth)는 [[Go]]에서 구현 된 전체 이더넷 노드를 실행하기위한 명령 행 인터페이스이다. 명령 행 부속 명령 및 옵션, Json-rpc 서버 및 대화식 콘솔의 세 가지 인터페이스를 제공한다. |
− | | |
| ==개요== | | ==개요== |
− | 게스(Geth)는 [[이더리움재단]](Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로써, Go언어로 개발되었다. 게스를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. 게스는 [[블록체인]]의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 [[RPC]]를 통해 상호작용할 수 있는 [[API]]를 노출하여 서버 역할을 하기도 한다. | + | 게스(Geth)는 [[이더리움]] 재단([[Ethereum]] Foundation)이 제공하는 공식 클라이언트 소프트웨어로써, Go언어로 개발되었다. 게스를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. 게스는 [[블록체인]]의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 [[RPC]]를 통해 상호작용할 수 있는 [[API]]를 노출하여 서버 역할을 하기도 한다. |
− | | + | [[블록체인]]에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있다. Ethereum 블록 체인의 노드 역할을하며 사용자가 Ether을 마이닝하고 EVM에서 실행되는 소프트웨어 인 Ethereum [[Virtual]][[ Machine]]을 만들 수 있는 프로그램이다.<ref> |
− | [[블록체인]]에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있다. 이더리움 블록체인의 노드 역할을 하며 사용자가 이더(Ether)를 마이닝하고 이더리움 기반의 가상머신에서 실행되는 소프트웨어인 [[이더리움 가상머신]](EVM)을 만들 수 있는 프로그램이다.<ref>〈[https://programmers.co.kr/learn/courses/7322/lessons/42394 게스클라이언트]〉, 《프로그래머스》</ref> | + | 〈[https://programmers.co.kr/learn/courses/7322/lessons/42394 게스클라이언트]〉, 《프로그래머스》</ref> |
− | | |
| [[파일:이더리움_블록체인_네트워크.png|700픽셀|섬네일|오른쪽|설명]] | | [[파일:이더리움_블록체인_네트워크.png|700픽셀|섬네일|오른쪽|설명]] |
| | | |
− | ==Geth 설치 및 실행== | + | ==역사== |
− | ===Mac===
| |
− | Homebrew를 통해서 쉽게 설치 할 수 있다.
| |
− | $ brew tap ethereum/ethereum
| |
− | $ brew install ethereum
| |
− | *설치확인
| |
− | $ geth version
| |
− | ===윈도우===
| |
− | https://geth.ethereum.org/downloads/ 에서 받으면 된다.
| |
− | zip 파일을 다운받아 설치하면 자동으로 PATH 환경 변수가 추가된다.
| |
− | *설치확인
| |
− | geth.exe를 실행 후, CMD에서 version을 확인하면 된다. <ref name="게스"> DongHyeok Lee, 〈[https://www.slideshare.net/xyrho123/blockchain-study3-geth Blockchain Study(3) - 이더리움(Geth)]〉, 《SlideShare》, 2018-03-27 </ref>
| |
− | | |
− | ===실행===
| |
− | $ 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
로그 파일을 만들 때 사용하는 옵션. 에러를 해당 경로의 파일에 저장한다.<ref name="게스"></ref>
| |
− | | |
− | ==로컬 테스트넷에서 Geth 가동==
| |
− | *데이터 디렉토리
송수신한 블록 데이터와 계정 정보를 저장할 폴더를 말한다.
데이터 디렉토리를 별도 지정하지 않으면 ~/.ethereum 이 기본 폴더로 지정된다.
| |
− | *우선 바탕화면에 test_data 폴더를 만든다.
2) Genesis 파일
앞서 설명했듯이 Genesis 블록에 대한 정보가 저장된 JSON 형식의 텍스트 파일이다.
사설 테스트넷을 구축할 경우 0 부터 블록체인을 만들기 때문에 Genesis 파일을 만들어준다.
| |
− | | |
− | ==노드 설치 및 실행==
| |
− | 블록체인에 참여하려면 일반적으로 노드 가되기 위해 필요한 기능을 구현하는 클라이언트 소프트웨어를 실행한다 . 단순히 트랜잭션을 네트워크로 보내는 것과 같은 조치에도 일반적으로 노드가 필요하다. Ethereum 블록체인에 참여 하려면 Go 프로그래밍 언어를 사용하여 구현 된 Ethereum 네트워크에서 노드를 실행하기 위한 명령 줄 인터페이스인 Ethereum Geth를 사용하여 수행 할 수 있다.
| |
− | | |
− | 이더리움의 목표는 서로 다른 프로그래밍 언어로 작성된 여러 가지 클라이언트 소프트웨어 구현을 제공하여 이더리움 내에서 다양한 생태계를 조성하는 것이다. 그러나 지금까지 가장 성숙한 이더리움 구현은 "Go Ethereum"이며 [[게스]](Geth)로 축약된다. 다른 클라이언트, 특히 [[패리티]]가 있지만 Geth는 Ethereum 노드를 실행하기 위한 사실상의 참조 구현으로 볼 수 있다.<ref name="geth">Stefan Beyer, 〈[https://www.mycryptopedia.com/ethereum-geth-installing-and-running-a-node/ Ethereum Geth: Installing and Running a Node]〉, 《MYCRYPTOPEDIA》, 2019-03-27</ref>
| |
− | | |
− | ==구조==
| |
− | 가장 낮은 수준에서 P2P (Peer-to-Peer) 프로토콜은 네트워크에서 통신을 담당하며 네트워크에서 피어를 검색하는 역할도 한다. 이 수준에서 사용되는 통신 메커니즘은 가십 알고리즘을 기반으로 한다 . 이 고전적인 분산 시스템 알고리즘은 1980 년대부터 시작되었으며 전염병 또는 소문이 인구를 통해 퍼지는 방식에 따라 네트워크 통신을 모델링한다. 아이디어는 간단하지만 강력하다. 네트워크의 노드는 메시지가 직접 연결된 다른 노드로 메시지를 릴레이 한 다. 이러한 노드는 이웃 노드로 간주 될 수 있다. 결국, 모든 노드는 전체 네트워크에 전파 될 때 릴레이 된 메시지를 받아야 한다.
| |
− | | |
− | P2P 메커니즘 외에도 Ethereum Geth는 세 가지 주요 모듈을 구현한다. 실제 Ethereum 클라이언트 구현 외에도 Geth에는 Swarm 및 Whisper 도 포함된다 . Swarm은 IPFS (Interplanetary Filesystem) 와 유사한 분산 파일 시스템으로, 대량의 데이터를 저렴하고 분산 된 방식으로 저장하는 것을 목표로 한다. Whisper는 블록체인 트랜잭션에 의존하지 않고 엔드 포인트 간의 통신을 가능하게하는 분산 메시징 프로토콜이다.
| |
− | | |
− | 실제 이더리움 특정 모듈은 트랜잭션 처리를 위해 이더리움 가상 머신을 구현한다. 블록체인 상태는 LevelDB 키-값 데이터베이스에 저장된다. 애플리케이션이 실행중인 Geth 인스턴스에 연결하기 위해 JSON RPC API 가 노출된다. 직접 연결하거나 web3.js 와 같은 언어별 라이브러리를 통해 연결할 수 있다.<ref name="geth"></ref>
| |
− | | |
| ==특징== | | ==특징== |
| 게스를 실행하면 [[이더리움]] 프론티어 라이브 네트워크에 참여할 수 있다. | | 게스를 실행하면 [[이더리움]] 프론티어 라이브 네트워크에 참여할 수 있다. |
54번째 줄: |
15번째 줄: |
| | | |
| 지원되는 플랫폼은 리눅스(Linux), 맥(Mac Os) 및 윈도우(Windows)이다. | | 지원되는 플랫폼은 리눅스(Linux), 맥(Mac Os) 및 윈도우(Windows)이다. |
− | | + | ===인터페이스=== |
− | ===명령어===
| + | *자바스크립트[[(Javascript)]]콘솔: geth대화식 콘솔로 시작할 수 있으며, Javascript[[API]]를 노출시켜 노드와 상호작용하는 자바스크립트런타임 환경을 제공한다. 자바스크립트 콘솔 API 에는 web3추가 관리 API뿐만 아니라 자바 스크립트 앱 API도 포함된다. |
− | ====account 명령어====
| + | *JSON-[[RPC]] 서버 : JSON-RPC [[APIgeth]]를 노출하는 json-rpc 서버로 시작할 수 있다. |
− | *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> <ref> IT한다옹, 〈[https://minstar0410.tistory.com/28 geth 명령어 정리 및 활용]〉, 《티스토리》, 2018-03-10 </ref>
| |
− | | |
− | ====인터페이스====
| |
− | *자바스크립트[[(Javascript)]]콘솔: geth 대화식 콘솔로 시작할 수 있으며, 자바스크립트 [[API]]를 노출시켜 노드와 상호작용하는 자바스크립트 런타임 환경을 제공한다. 자바스크립트 콘솔 API 에는 web3 추가 관리 API뿐만 아니라 자바 스크립트 앱 API도 포함된다. | |
− | *JSON-[[RPC]] 서버 : JSON-RPC API geth를 노출하는 json-rpc 서버로 시작할 수 있다. | |
| *명령 행 옵션은 명령 행 매개 변수와 하위 명령을 문서화한다.<ref> | | *명령 행 옵션은 명령 행 매개 변수와 하위 명령을 문서화한다.<ref> |
| Chris Chinchilla, 〈[https://github.com/ethereum/go-ethereum/wiki/geth 겟]〉, 《깃허브》, 2019-08-01</ref> | | Chris Chinchilla, 〈[https://github.com/ethereum/go-ethereum/wiki/geth 겟]〉, 《깃허브》, 2019-08-01</ref> |
| | | |
− | ====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 : 현재 진행을 기다리고 있는 트랜잭션 <ref> Duongame, 〈[https://steemkr.com/geth/@duongame/geth 이더리움 geth 명령어 모음]〉, 《Steemkr》, 2018-02-27 </ref>
| |
| | | |
− | ==활용==
| + | *채광 |
| ===Geth를 사용한 CPU 마이닝=== | | ===Geth를 사용한 CPU 마이닝=== |
− | 이더리움([[Ethereum]])의 첫 번째 릴리스 인 Frontier에서는 a) GPU와 b) Ethereum 클라이언트인 게스만 있으면 된다. [[CPU]] 마이닝은 가능하지만 너무 비효율적이다. | + | 이더리움([[Ethereum]])의 첫 번째 릴리스 인 Frontier에서는 a) GPU와 b) Ethereum 클라이언트인 게스만 있으면 된다. [[CPU]]마이닝은 가능하지만 너무 비효율적이다. |
− | 현재 게스에는 CPU 마이너만 포함되어 있으며 팀은 [[GPU]] 광부분기를 테스트하고 있지만 프론티어의 일부는 아니다. | + | 현재 게스에는 CPU광부만 포함되어 있으며 팀은 [[GPU]] 광부분기를 테스트하고 있지만 프론티어의 일부는 아니다. |
− | Ethereum의 C++ 구현은 Eth (CLI), AlethZero (GUI) 및 EthMiner (독립형 마이너)의 일부로 GPU 마이너를 제공한다. | + | Ethereum의 C++ 구현은 Eth (CLI), AlethZero (GUI) 및 EthMiner (독립형 광부)의 일부로 GPU 광부를 제공한다. |
− | * 계정관리 | + | *계정관리 |
− | * 암호화 토큰, 분산앱 | + | *암호화토큰, 분산앱 |
| | | |
| ==종류== | | ==종류== |
− | * 게스 v1.9.0 최신 클라이언트
| + | 게스 v1.9.0 최신 클라이언트 |
| | | |
| + | ==문제점과 대안== |
| + | ==평가 및 전망== |
| {{각주}} | | {{각주}} |
− |
| |
| ==참고자료== | | ==참고자료== |
− | * 〈[https://programmers.co.kr/learn/courses/7322/lessons/42394 게스클라이언트]〉, 《프로그래머스》 | + | *〈[https://programmers.co.kr/learn/courses/7322/lessons/42394 게스클라이언트]〉, 《프로그래머스》 |
− | * Chris Chinchilla, 〈[https://github.com/ethereum/go-ethereum/wiki/geth 겟]〉, 《깃허브》, 2019-08-01
| |
− | * 산두 타우, 〈[http://www.talkcrypto.org/blog/2018/01/23/what-is-geth/ GETH 란 무엇입니까?]〉, 《티스토리》, 2019-08-01
| |
− | * DongHyeok Lee, 〈[https://www.slideshare.net/xyrho123/blockchain-study3-geth Blockchain Study(3) - 이더리움(Geth)]〉, 《SlideShare》, 2018-03-27
| |
− | * IT한다옹, 〈[https://minstar0410.tistory.com/28 geth 명령어 정리 및 활용]〉, 《티스토리》, 2018-03-10
| |
− | * Duongame, 〈[https://steemkr.com/geth/@duongame/geth 이더리움 geth 명령어 모음]〉, 《Steemkr》, 2018-02-27
| |
− | * Stefan Beyer, 〈[https://www.mycryptopedia.com/ethereum-geth-installing-and-running-a-node/ Ethereum Geth: Installing and Running a Node]〉, 《MYCRYPTOPEDIA》, 2019-03-27
| |
− | | |
− | == 같이 보기 ==
| |
− | * [[이더리움]]
| |
− | * [[고]]
| |
− | | |
− | {{블록체인 기술|검토 필요}}
| |