[ Mastering Ethereum ] Chapter3

Flat_Water
HYBLOCK
Published in
10 min readMay 24, 2022

이더리움 클라이언트

Mastering Ethereum

Publisher

HYU Information System 박평수

이더리움 클라이언트는 이더리움 사양을 구현하고 다른 이더리움 클라이언트와 P2P 네트워크를 통해 통신하는 소프트웨어 애플리케이션이다. 동일한 프로토콜 아래에서, 클라이언트들은 서로 소통하고 동일한 규칙을 따른다. 이러한 이더리움 클라이언트는 오픈 소스 프로젝트인데, 단순히 자유롭게 사용하는 것을 넘어서서 참여자들은 누구나 이더리움을 수정할 수 있으며 이를 통해 이더리움을 끝없이 발전해나갈 수 있다.

이더리움 네트워크

이더리움 기반 네트워크 중에서는 이더리움 ‘황서(Yellow Paper)’에서 정의된 공식 사양에 부합하지만, 서로 상호운용(Intermediate)되는 네트워크들이 있는 반면, 그렇지 않은 네트워크들도 존재한다.

이더리움 기반 네트워크는 이더리움, 이더리움 클래식 (Classic), 엘라 (Ella), 익스팬스 (Expanse), 유비크 (Ubiq), 뮤지코인 (Musicoin) 등 여러가지 네트워크들이 존재한다. 네트워크들은 대부분 프로토콜 수준에서 서로 호환된다. 이 장에서는 이더리움 프로토콜 중에서 러스트(rust)로 작성된 패리티 (parity)와 고(Go)로 작성된 게스(Geth)를 이용하여 노드를 설정하고 커맨드 라인 (Command-line) 및 API 중 일부를 탐색하는 방법을 학습할 것이다.

parity

풀 노드를 실행해야 하는가?

블록체인은 건전성 (health), 복원력 (resilience), 검열 저항 (censorship resistance)의 특성을 갖는다. 이러한 특성들은 풀 노드 (full node)를 얼마나 많이 가지고 있는지에 따라 결정된다. 풀 노드는 블록체인의 모든 내역들을 저장하는 노드이다. 자신의 PC에 모든 블록체인의 내용을 가지고 있기 때문에 다른 노드의 도움 없이 스스로 거래를 검증할 수 있다.

하지만 풀 노드를 실행하면 용량이 너무 커서 다운로드를 받는데 시간이 오래 걸리고 하드웨어 자원 및 대역폭 비용이 발생한다 ( 2022년 3월 기준 300GB이상 소모, 각 클라이언트에 따라 다름 ) 또한 새로운 트랜잭션 및 블록이 생성됨에 따라 매일매일 데이터 부담이 빠르게 증가한다.

이더리움 개발에는 라이브 메인넷 네트워크에서 실행중인 풀 노드가 필요하지 않다. 테스트넷 노드, 로컬 사설 블록체인 (ex 가나슈), 클라우드 기반 이더리움 클라이언트, 원격 클라이언트로 대부분의 작업을 수행할 수 있다

풀 노드의 장단점

장점

  • 모든 트랜잭션을 정식으로 검증한다
  • 중개자 없이 공개 블록체인의 모든 컨트랙트와 상호작용할 수 있다
  • 중개자 없이 컨트랙트를 블록체인에 직접 배포할 수 있다
  • 블록체인 상태 ( 계정, 스마트 컨트랙트 )를 오프라인에서 조회할 수 있다
  • 읽어낸 정보를 제3자에게 노출하지 않고 가져올 수 있다

단점

  • 하드웨어와 대역폭 자원의 확대가 필요하다
  • 처음 시작할 때 전체 동기화를 위해 오랜 시간이 필요하다
  • 동기화를 유지하기 위해 관리하고, 업그레이드하고, 온라인 상태로 유지해야 한다

공개 테스트넷의 장단점

실제 블록체인 네트워크에 적용시키기 전에 테스트 하는 환경 ( 임시 네트워크 )

장점

  • 테스트넷 노드는 풀 노드에 비해 훨씬 적은 데이터와 동기화를 필요로 한다 ( 약 75GB )
  • 테스트넷 노드는 몇 시간 내에 전체 동기화를 할 수 있다
  • 컨트랙트 배포 및 트랜잭션 생성을 위한 테스트용 이더를 몇몇 Faucet으로부터 무료로 얻을 수 있다
  • 메인넷 환경과 동일한 조건으로, 실제 프로젝트가 하고자 하는 일들이 구현되는지 직접 확인해 볼 수 있다

단점

  • 테스트넷이기 때문에 실제 돈을 사용할 수 없다. 따라서 위험에 처할 일도 없기 때문에 실전 보안성 테스트를 해볼 수 없다
  • 테스트넷에서는 퍼블릭 블록체인에서만큼 실전 테스트를 할 수 없는 측면이 있다 ( 테스트넷에서는 가스 수수료를 고려하지 않음 / 메인넷에서 발생하는 네트워크 혼잡이 없음 )

로컬 블록체인 시뮬레이션 장단점

테스트 목적에 가장 좋은 선택은 단일 인스턴스 사설 블록체인을 실행하는 것이다. 대표적으로 가나슈 (Ganache)가 있는데, 네트워크와 연결할 필요없이 로컬에서 작동시킬 수 있다는 특징을 갖고 있음 ( 스마트 컨트랙트를 쉽게 배포 및 테스트 해볼 수 있음 )

Ganache

장점

  • 동기화가 없고 디스크에 데이터가 거의 없다. 직접 첫 번째 블록을 채굴한다
  • 테스트 이더를 얻을 필요가 없다. 테스트를 위해 사용할 수 있는 채굴 보상을 자신에게 ‘수여 (award)’ 한다. ( 100개의 이더가 미리 탑재된 10개의 테스트 계정을 확보하게 됨 )
  • 게스와 패리티 같은 클라이언트를 사용하면 각 트랜잭션을 실행하는데 15초씩 걸리는데 반해, 가나슈는 로컬에서 실행해 볼 수 있기 때문에 상대적으로 빠르다

단점

  • 다른 사용자 없이 사용자 자기자신만 존재하기 때문에, 공개 블록체인과 동일하게 동작하지 않는다. ( 트랜잭션 순서나 트랜잭션 공간을 두고 경쟁이 없음 )
  • 다양한 사용자들이 창출해 내는 변수가 존재하는 공개 블록체인과 달리, 자기자신 이외의 채굴자가 없는 로컬 블록체인에서는 공개 블록체인에서 발생하는 일부 시나리오를 테스트 할 수 없다.

이더리움 클라이언트 실행

하드웨어 요구사항

이더리움 풀 노드를 실행하기 위해서 이더리움 블록체인의 전체 사본을 사용자 PC로 저장해야 한다. 이를 위해 사용자의 컴퓨터는 충분한 자원을 가지고 있어야 한다.

최소 요구사항

  • 2코어 이상의 CPU
  • 적어도 300GB 이상의 여유 저장소 공간
  • 최소 4G RAM SSD (HDD의 경우 8GB 이상)
  • 다운로드 속도가 초당 8MBit인 인터넷 서비스

추천 사양

  • 4코어 이상의 빠른 CPU
  • 16GB 이상의 RAM
  • 메모리 여유 공간이 적어도 500GB인 빠른 SSD
  • 다운로드 속도가 초당 25MBit 이상인 인터넷 서비스

소프트웨어 요구사항

클라이언트 (노드)를 빌드하고 실행하기 위해, 우리는 몇 가지 소프트웨어들을 설치해야 할 필요가 있다.

  • 소스 관리 시스템 git
  • 고(Go) 언어와 표준 라이브러리를 위한 golang
  • 시스템 프로그래밍 언어 러스트 (Rust)

다운로드

  1. Git

2. Go / golang : version 1.13 이상이면 원하는 버전의 게스 컴파일 가능

3. Rust : version 1.27 이상

패리티

게스 (Geth)

게스 (go-ethereum)는 이더리움 재단에서 Go 언어로 개발한 공식 클라이언트이다. 일반적인 이더리움 기반 블록체인은 자체 게스 구현을 가지고 있다.

블록체인에 적합한 버전을 가지고 있는 저장소를 복사하여 소스 코드로 게스를 빌드하는 방법이 있고, 선택한 플랫폼에 맞게 컴파일이 되어있는 바이너리 (binary)를 설치하는 방법이 있다.

  1. 저장소 클론하여 게스 빌드하는 방법
  • Go-ethereum github 저장소 : Geth를 빌드하는 방법이 담겨있는 저장소
  • Go-ethereum 공식문서

2. 바이너리 (binary) 설치하는 방법

바이너리는 위에서 설명했듯 선택한 플랫폼에 맞게 소스코드 빌드가 다 되어있는 것을 의미한다. 설치 방법은 다음과 같다.

  • 운영체제에 맞는 파일을 다운로드 한다
  • Geth가 잘 빌드 되었는지 확인만 해주면 된다
Geth

이더리움 기반 블록체인의 첫 번째 동기화

클라이언트는 이더리움 블록체인을 동기화할 때 제네시스 블록 (Genesis block) 이후 모든 블록 및 트랜잭션을 다운로드하고 유효성을 검사한다.

하지만 이러한 동기화는 시간이 굉장히 많이 소요되고 많은 자원을 필요로 한다. 그래서 대부분의 이더리움 클라이언트는 트랜잭션의 전체 유효성 검사를 건너뛰고 블록체인의 일부에 동기화되는 빠른 동기화를 진행한 후, 유효성 검사를 다시 재개한다.

이더리움 클라이언트인 패리티와 게스 또한 빠른 동기화를 지원하는데, 게스는 — fast로 빠른 동기화를 활성화하며, 패리티의 경우 기본적으로 빠른 동기화를 수행한다.

게스는 빈 블록 데이터베이스로 시작할 때만 빠른 동기화를 수행할 수 있다. 따라서 블록체인 데이터 디렉터리를 삭제하고 ‘빠른’ 동기화 모드로 동기화를 시작하는 것이 전체 유효성 검사보다 빠르다. (블록체인 데이터를 삭제할 때 지갑을 삭제하면 안된다! )

JSON-RPC 인터페이스

원격 이더리움 클라이언트

원격 클라이언트는 풀 클라이언트의 일부 기능을 제공한다. 원격 클라이언트는 더 빠르며 데이터 용량도 훨씬 더 적게 요구한다.

기능 (클라이언트 마다 제공하는 기능은 다 다르나, 최소 하나 이상 제공한다)

- 개인키와 이더리움 주소를 지갑에서 관리

- 트랜잭션 생성, 서명 및 브로드캐스트

- 데이터 페이로드 (payload)를 사용하여 스마트 컨트랙트와 상호연동

- 브라우저와 댑(Dapp) 간 상호연동

- 블록 탐색기 같은 외부 서비스 링크

- 이더 단위를 변환하고 외부 소스에서 환율을 검색

- 자바스크립트 객체로서 web3 인스턴스 (instance)를 웹 브라우저에 삽입

- 다른 클라이언트가 브라우저에 제공/삽입한 web3 인스턴스를 사용

- 로컬 또는 원격 이더리움 노드에서 RPC 서비스로 접근

모바일 (스마트폰) 지갑 같은 원격 클라이언트는 기본적인 지갑 기능만 제공한다. 이를 제외한 다른 클라이언트들은 모든 기능을 갖춘 Dapp 브라우저이다.

--

--