이더리움 클라이언트
이더리움 클라이언트(Ethereum Clients)는 이더리움 블록체인 네트워크를 구성하는 개별 클라이언트 노드(node)이다. 이더리움은 중앙 집중형 서버 프로그램이 따로 존재하지 않는다. 오로지 클라이언트 프로그램만 존재한다. 이더리움 클라이언트는 멀티 플랫폼 환경을 지원하기 위해 다양한 프로그래밍 언어로 개발되고 있다.
개요
이더리움 사양을 구현하고 다른 이더리움 클라이언트와 P2P 네트워크를 통해 통신하는 소프트웨어 응용 프로그램으로 서로 다른 클라이언트가 다른 팀과 다른 프로그래밍 언어로 구현되는 동안 이들은 모두 동일한 프로토콜을 따른다. 따라서 모두 동일한 이더리움 네트워크를 운영하고 상호작용하는데 사용될 수 있다. 이더리움은 오픈 소스 프로젝트이며 모든 주요 고객을 위한 소스코드는 오픈 소스 라이센스에서 무료로 사용할 수 있다. 이더리움은 일반적으로 다른 블록체인보다 네트워크에서 실행되는 구현의 다양성이 더 크다.[1]
특징
이더리움 클라이언트는 이더리움 블록체인에 참여하는 노드이다. 즉 블록이 생성되면 그 정보를 전파 받는 역할을 하는 것이다. 따라서, 싱크된 블록체인 데이터를 가지고 있어야 하며 이더리움 클라이언트는 블록체인 네트워크의 노드이면서, 일반 사용자의 접속을 허용하고 블락체인과 연결시켜주는 역할도 담당한다. 그래서 일반 사용자는 이더리움 클라이언트, 즉 노드에 접속하여 geth와 같은 명령어로 블록체인 정보를 얻거나, 스마트 컨트랙트를 사용할 수 있다. 이더리움 클라이언트는 블록체인 데이터를 모두 가지고 있다. 한 사용자가 생성한 스마트 컨트랙트는 이더리움 클라이언트를 통해서 블록에 포함되고, 결국 블록체인으로 연결된다.[2]이더리움 클라이언트 프로그램은 리모트 프로시더 콜(Remote Procedure Call) (RPC) 명령어 인터페이스를 자바스크립트(Javascript)의 제이에스오엔(JSON)형태로 지원한다. 이것을 제이에스오엔 알피시 에이피아이(JSON-RPC API)라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다
Geth
Geth는 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로서, 고(Go) 언어로 개발되었다. Geth를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. Geth는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 한다. 블록체인에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있다.
패리티(Parity)
패리티(Parity)는 이더리움 프로토콜의 또 다른 구현체이며, 러스트(Rust) 프로그래밍 언어로 개발되었다. 현재 Parity Inc. 라는 기업에서 운영하고 있으며 사실 이더리움 네트워크에 접속할 수 있는 클라이언트 소프트웨어를 개발하는 길은 누구에게나 열려 있다. C++, 파이썬 및 다른 언어로 작성된 클라이언트도 있다. 원한다면 이더리움 황서의 사양을 따라 자신의 클라이언트를 구현할 수 있다.[3]
활용
화폐기능이 주가되었던 비트코인에 비해서 프로그래밍 가능한 Smart contract기능이 추가되어 다양한 DApp 개발이 가능하다. geth는 이더리움의 모든 기능을 사용할수 있는 클라이언트로 설치는 바이너리를 사용하여 설치하는 방법과 소스를 빌드하여 설치하는 방법이 있다. 먼저 이더리움 geth는 Go 언어로 작성이 되었기 때문에 Go lang을 설치한다. Go lnag 설치가 완료되었으면 다음과 같이 소스를 다운로드 받은후에 빌드를 한다. 빌드가 완료되면 하기 디렉토리에 geth 실행화일이 생성되니 .profile 에 해당 패스를 추가해주는것이 좋다. 이제 private net을 통해 실행 해준다. 먼저 계좌정보가 저장될 디렉토를 하나 생성하고(.data) 계좌를 하나 생성하도록 하겠다. 데이타가 저장될 디렉토리 ./data를 지정하고, genegis 블록정보가 포함되어있는 CustonGenesis.json 화일을 지정하여 genesis 블록을 생성하면 private network 실행을 위한 준비가 완료된다.
> miner.start()
INFO [04-02|22:55:39] Updated mining threads threads=0
INFO [04-02|22:55:39] Transaction pool price threshold updated price=18000000000
null
> INFO [04-02|22:55:39] Starting mining operation
INFO [04-02|22:55:39] Commit new mining work number=69 txs=0 uncles=0 elapsed=132.014µs
> INFO [04-02|22:55:39] Successfully sealed new block number=69 hash=61e6ef…61a88f
INFO [04-02|22:55:39] 🔨 mined potential block number=69 hash=61e6ef…61a88f
INFO [04-02|22:55:39] Commit new mining work number=70 txs=0 uncles=0 elapsed=120.199µs
INFO [04-02|22:55:40] Successfully sealed new block number=70 hash=81a7e6…a68b62
INFO [04-02|22:55:40] 🔨 mined potential block number=70 hash=81a7e6…a68b62
INFO [04-02|22:55:40] Commit new mining work number=71 txs=0 uncles=0 elapsed=72.851µs
> miner.start()
INFO [04-02|22:55:39] Updated mining threads threads=0
INFO [04-02|22:55:39] Transaction pool price threshold updated price=18000000000
null
> INFO [04-02|22:55:39] Starting mining operation
INFO [04-02|22:55:39] Commit new mining work number=69 txs=0 uncles=0 elapsed=132.014µs
> INFO [04-02|22:55:39] Successfully sealed new block number=69 hash=61e6ef…61a88f
INFO [04-02|22:55:39] 🔨 mined potential block number=69 hash=61e6ef…61a88f
INFO [04-02|22:55:39] Commit new mining work number=70 txs=0 uncles=0 elapsed=120.199µs
INFO [04-02|22:55:40] Successfully sealed new block number=70 hash=81a7e6…a68b62
INFO [04-02|22:55:40] 🔨 mined potential block number=70 hash=81a7e6…a68b62
INFO [04-02|22:55:40] Commit new mining work number=71 txs=0 uncles=0 elapsed=72.851µs
채굴이 진행 중일때 계좌의 잔액을 조회해보면 다음과같이 증가함을 볼수 있으며, 하기는 잔액단위를 디폴트 웨이(wei)에서 이더(ether)로 변경하여 출력하고 있다. 채굴을 중지하고자 할 때는 miner.stop()을 실행하면 된다.[4]
이더리움 클라이언트 프로그램은 Remote Procedure Call (RPC) 명령어 인터페이스를 Javascript의 JSON형태로 지원한다. 이것을 JSON-RPC API라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다.
$ curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' \
http://localhost:8545
위 예는 JSON-RPC API를 이용하여 클라이언트 포로그램의 버전을 얻어오는 명령이다. 위 명령의 결과는 JSON 형태로 다음과 같이 얻어진다. 이 경우 클라이언트 프로그램은 go.1.8.3인 것을 알 수 있다.
{"jsonrpc":"2.0","id":1,
"result":"Geth/v1.8.0-unstable-02aeb3d7/linux-amd64/go1.8.3"}
또, 현재 gas의 가격을 얻는 명령은 아래와 같이 입력한다.
$ curl -X POST -H "Content-Type: application/json" --data \
'{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":4213}' \
위 명령의 결과를 보면 gas 가격이 "0x430e23400"임을 알 수 있다. 이것은 gas 가격이 18 giga wei라는 것을 의미한다.
{"jsonrpc":"2.0","id":4213,"result":"0x430e23400"}[5]
각주
- ↑ 안성주지몬,〈[마스터링 이더리움Mastering Ethereum- Clients〉,《개발이야기》, 2018-09-26
- ↑ 〈이더리움 스마트 컨트랙트 동작방식 종결자!!! DApp 개발 가즈아〉, 《스팀잇》, 2017년도
- ↑ Geth/Parity클라이언트,〈[https://kr.zastrin.com/courses/kr-ethereum-primer/lessons/3-1 Geth/Parity 클라이언트〉,《자스트린》
- ↑ 니르바나 작가-〈[https://ihpark92.tistory.com/29 이더리움 클라이언트 설치하기〉,《티스토리》, 2018년도
- ↑ 마스터링 이더리움,〈[마스터링 이더리움3장 이더리움 클라이언트〉,《비지배타》, 2019-06-26
참고자료
- 우분투 설치법 - https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu
- 이더리움 클라이언트 설치하기-https://ihpark92.tistory.com/29
같이 보기
이 이더리움 클라이언트 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.