[마스터링 이더리움] 3장 이더리움 클라이언트

in #kr5 years ago (edited)

image.png

블록체인이 돌아가기 위한 구성요소가 있다. 다양한 종류의 참여자가 있는데 이들을 통칭헤서 노드(컴퓨터의 일종)라고 한다.

노드 종류

  • 풀노드: 모든 블록 데이터를 기록하고, 동기화 하는 노드. 풀노드 중에서 채굴이나 지갑기능은 없이 네트워크 기능만 제공하는 경우도 있다. 풀노드가 아닌 노드들이 네트워크를 통해서 풀노드에 접속할 수 있게 한다.
  • 채굴노드: 블록을 생성하기 위해 수학문제를 푸는 노드. 반드시 풀노드일 필요는 없다. 채굴노드는 다른 채굴노드가 캐낸 블록의 거래 유효성을 검증하는 역할도 한다.
  • 지갑노드: 이더리움 블록체인의 전체를 저장하려면 수백 GB의 저장공간이 필요하다. 앞으로 계속 커질 것이고, 이를 동기화하는데만도 일주일 넘게 걸린다. 따라서 지갑노드는 블록 데이터는 저장하지 않기때문에 거래 검증에 사용되진 못하지만, 블록을 전파하는데는 사용될 수 있다.

비트코인의 light client와 다른 개념이므로, 주의가 필요하다. 비트코인의 light client는 풀노드는 아니지만, 블록의 헤더 데이터를 저장하고, 거래를 검증하는데도 사용될 수 있다. 이더리움의 지갑노드는 거래를 검증할 수 없다.

노드 구분을 다시 풀노드와 리모트 노드로 구분할 수도 있다.

풀노드는 위 개념과 동일하며, 리모트 노드는 지갑노드와 같이 블록체인 데이터를 저장하지 않고, 풀노드에 네트워크로 접속하여 거래 생성이나 블록 전파와 같은 역할을 하는 것이다.

리모트 노드의 대표적인 것이 메타메스크이다.

클라이언트

여러 노드 종류 중 하나의 노드로서 블록체인에 참여하려면 컴퓨터 프로그램이 필요하다. 이것을 클라이언트 프로그램이라 한다. 앞서 설명한 노드는 하나의 물리적인 내용도 있지만 개념적인 것이다. 반면에 클라이언트는 보다 구체적으로 소프트웨어 프로그램을 의미한다.

때론 클라이언트를 노드의 개념으로 사용하기도 한다. 책에서도 클라이언트와 노드를 번갈아가면서 사용하고 있다.

여기서는 헷갈릴 수 있으므로 노드와 클라이언트 프로그램을 구별해서 사용한다.

클라이언트 프로그램은 각종 언어로 구현된 여러가지가 있다. 가장 유명하고 많이 쓰이는 것이 GethParity이다.

나도 Parity는 사용해보지 않았다. Geth만 알아도 충분할 거 같다. Geth는 Go언어로 만든 ethereum 클라이언트 프로그램이다. 그래서 이름이 Geth이다.

Parity와 Geth를 설치하는 방법은 생략하기로 한다.

Geth의 특징을 살펴본다.

  • 이더리움 재단에서 개발한 공식적 프로그램이다.
  • Go언어로 작성되어 있다.
  • full 블록체인 동기화를 지원한다.

이더리움 클라이언트 프로그램은 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}' \
http://localhost:8545

위 명령의 결과를 보면 gas 가격이 "0x430e23400"임을 알 수 있다. 이것은 gas 가격이 18 giga wei라는 것을 의미한다.

{"jsonrpc":"2.0","id":4213,"result":"0x430e23400"}

이더리움 블록체인 네트워크

우리가 흔히 거래할 때 쓰는 이더리움 네트워크는 메인넷이라고 불리는 네트워크다. 그러나 DApp을 개발할 때 메인넷에 바로 올리게 되면 gas 비용뿐만 아니라, 네트워크 대역문제 등 여러 문제가 발생한다. 따라서 개발용으로 테스트넷이 여러 개 존재한다. 테스트넷도 엄연히 공개 블록체인이다. 다른 점은 돈 주고 이더를 살 필요가 없다는 것이다. 그런데 테스트넷도 공개 블록체인이다 보니, 거래를 생성하고나면 채굴될때까지 시간이 소요된다. 또한 거래를 하기 위해서는 해당 테스트넷에서 필요한 이더를 확보해야 한다.

이렇기 때문에, 초기 스마트 컨트랙트 개발에서 테스트넷을 사용하기도 매우 번거롭다. 따라서 보다 편한 로컬넷을 사용할 수 있다.

로컬넷

로컬넷은 자신의 컴퓨터에 블록체인을 운영하고, 자신의 컴퓨터가 해당 블록체인에 속한 유일한 노드이다. 제네시스 블록도 생성하고, 채굴도 하고, 거래도 검증하고 모든 것을 로컬에서 다 한다. 따라서 이더를 원하는 만큼 바로 확보할 수 있고, 채굴도 즉각적으로 된다. 이전에 testrpc라는 이름의 프로그램이었는데 지금은 Ganache로 변경되었다.

여러 지갑 프로그램이 있는데, 처음 시작할 때는 MetaMask를 추천한다.


출처: 이타인클럽 - 우리 동네를 바꾸는 도움 선순환 운동

https://cafe.naver.com/etainclub/123

Coin Marketplace

STEEM 0.19
TRX 0.16
JST 0.030
BTC 65650.34
ETH 2646.63
USDT 1.00
SBD 2.87