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

728x90

 

  • 이더리움 클라이언트는 이더리움 사양을 구현하고 다른 이더리움 클라이언트와 P2P 네트워크를 통해 통신하는 소프트웨어 애플리케이션이다.
  • 기준 사양과 표준 통신 프로토콜을 준수한다면, 서로 다른 이더리움 클라이언트들끼리 상호운용(interoperate)이 가능하다. 서로 다른 클라이언트가 다른 팀과 다른 프로그래밍 언어로 구현되는 동안 이들은 모두 동일한 프로토콜로 소통하고 동일한 규칙을 따른다.
  • 노드는 이더리움 클라이언트를 구동하는 이더리움 네트워크에 있는 컴퓨터입니다.
  • 이더리움 클라이언트란 이더리움 프로토콜 또는 네트워크 규칙을 실행하는 소프트웨어입니다. 이더리움 네트워크는 연결된 노드의 집합이며, 이러한 노드 각각은 수신한 트랜잭션과 블록이 프로토콜 규칙에 따라 유효한지 확인한 후 블록체인에 추가합니다.
  • 이더리움은 오픈 소스 프로젝트이며, 모든 주요 클라이언트의 소스 코드는 오픈 소스 라이선스(예: LGPL v3.0)하에서 사용할 수 있으므로 무료로 다운로드하여 다른 용도로 자유롭게 사용할 수 있다.
  • 이더리움은 ‘황서(Yellow paper)’라는 공식 사양에 의해 정의되고, 황서는 이더리움에 주요한 변화가 있을 때마다 주기적으로 업데이트된다.
    • 네트워크 공격을 방어하기 위한 훌륭한 방법. 특정 클라이언트의 구현 전략을 악용하는 것은 개발자가 공격을 패치하는 동안 개발자를 괴롭히지만 다른 클라이언트는 네트워크에 거의 영향을 주지 않기 때문.
  • 반면, 비트코인은 비트코인의 '사양'이 비트 코인 코어(Core) 기준 구현체

 

💡 Node vs Client 정리
Client는 이더리움 네트워크에 접속할 수 있는 수단으로 어떠한 컴퓨터가 해당 소프트웨어(클라이언트)를 이용해서 이더리움 네트워크에 참여하면, 그 컴퓨터는 노드가 되는 것.
즉, 노드는 블록과 트랜잭션 데이터를 검증할 수 있는 소프트웨어(클라이언트)를 돌리고 있는 이더리움 분산 네트워크 내 컴퓨터를 의미한다.

한 줄 정리: 클라이언트(소프트웨어)를 실행함으로써 내 컴퓨터가 노드가 된다.
참고: Nodes and clients | ethereum.org

 

🔽 마스터링 이더리움 3장에 나오진 않았지만 찾아본 정보 추후 정리해서 수정 예정 (머지 이후 바뀐 부분 업데이트)

더보기
  • Post-Merge Ethereum consists of two parts: the execution layer and the consensus layer. Both layers are run by different client software. On this page, we'll refer to them as the execution client and consensus client.
    • The execution client (also known as the Execution Engine, EL client or formerly the Eth1 client) listens to new transactions broadcasted in the network, executes them in EVM, and holds the latest state and database of all current Ethereum data.
    • The consensus client (also known as the Beacon Node, CL client or formerly the Eth2 client) implements the proof-of-stake consensus algorithm, which enables the network to achieve agreement based on validated data from the execution client.

참고할 글 목록 :

https://www.coindesk.com/learn/ethereum-nodes-and-clients-a-complete-guide/

Ethereum clients - Truffle Suite

What's the Difference Between Ethereum Nodes and Clients?

Pros and Cons of Running Your Own Node

 

이더리움 네트워크

  • 아래는 다양한 언어로 작성된 이더리움 프로토콜의 예시들이다.
    • Parity, written in Rust
    • Geth, written in Go
    • cpp-ethereum, written in C++
    • pyehtereum, written in Python
    • Mantis, written in Scala
    • Harmony, Ethereum(J) written in Java
    • ethereumjs-lib - JavaScript
    • EthereumJS
  • 각 클라이언트를 사용하여 노드를 설정하고 커맨트 라인 및 애플리케이션 프로그래밍 인터페이스(APIs) 중 일부를 탐색하는 방법을 학습할 것이다.

 

풀 노드를 돌려야 하는 가?

  • 블록체인의 건전성(health), 복원력(resilience), 검열저항(censorshipresistance) 특성은 독립적으로 운용되고 지리적으로 분산된 풀 노드(full node)가 얼마나 많은지에 달려있다. 각각의 풀 노드는 다른 새 노드가블록 데이터를 얻어 작업을 부트스트랩(bootstrap)하고, 운영자에게 모든 트랜잭션 및 컨트랙트에 대해 신뢰할 수 있고 독립적인 검증을 제공할 수 있도록 도와 준다. *bootstrap : 일반적으로 한 번 시작되면 외부의 도움없이 알아서 진행되는 일련의 과정
  • 그러나 풀 노드를 돌리면 하드웨어 자원 및 대역폭 비용이 발생한다.
  • 특히 이더리움 개발 시, 메인넷에서 실행 중인 풀 노드가 필요한 경우는 많지 않음. 테스트넷 노드, 로컬 블록체인(가나슈), 서비스 공급자가 제공하는 쿨라우드 기반 이더리움 클라이언트(인퓨라)로 대부분 작업 수행 가능.
💡 원격 클라이언트
블록체인의 로컬사본을 저장하지 않거나 블록 및 트랜잭션의 유효성을 확인하지 않는 클라이언트
풀 클라이언트를 신뢰하여 블록체인에 대한 접근 권한을 부여 - 보안 및 익명성 보장 수준 떨어짐
이 클라이언트는 지갑의 기능을 제공하며 트랜잭션을 생성하고 전파할 수 있음. 
  • 원격 클라이언트를 사용하여 자신의 풀 노드, 공개 블록체인, 공개 테스트넷 또는 개인 로컬 블록체인 같은 기존 네트워크에 연결할 수 있음
  • 실제 다른 모든 노드 옵션 간에 전환하기 위한 편리한 방법으로 메타마스크같은 원격 클라이언트를 사용할 것
💡 원격 클라이언트 vs 지갑
두 용어가 혼용되어 사용되기도 하지만 서로 다른 점이 존재
일반적으로 원격 클라이언트는 지갑의 트랜잭션 기능 외에도 API(ex. web3.js API)를 제공원격
클라이언트 > 지갑 (더 큰 범위가 원격 클라이언트)

 

 

풀 노드의 장단점

장점:

  • 이더리움 기반 네트워크의 복원력과 검열 저항을 지원한다.
  • 모든 트랜잭션을 정식으로 검증한다.
  • 중개자 없이 컨트랙트를 공개 블록체인에 직접 배포할 수 있다.
  • 중개자 없이 공개 블록체인의 모든 컨트랙트와 상호작용할 수 있다.
  • 블록체인 상태(계정, 스마트 컨트랙트 등)를 오프라인으로 조회할 수 있다(읽기 전용).
  • 여러분이 읽은 정보를 제 3자에게 노출하지 않고 가져올 수 있다.

단점:

  • 하드웨어와 대역폭 자원이 많이 필요하다.
  • 처음 시작할 때 전체 동기화를 위한 시간이 많이 소모된다. (최소 며칠 소요)
  • 동기화를 유지하기 위해 관리하고, 업그레이드하고, 온라인 상태로 유지해야 한다. (유지비 높음)

 

공개 테스트넷의 장단점

장점:

  • 테스트넷 노드는 훨씬 적은 데이터와 동기화를 필요로 함.
  • 몇 시간 내에 전체 동기화 가능.
  • 테스트용 이더 faucet 가능 (무료라는 말)
  • 공개 블록체인임.

단점:

  • 실제 돈을 사용할 수 없고 테스트 이더를 사용하기 때문에 실제 위험에 처할 만한 상황에 대한 실전 보안성 테스트를 완벽하게 할 순 없음.
  • 퍼블릭 블록체인과 완벽하게 유사한 환경이 아니기 때문에 실전 테스트를 할 수 없는 측면이 존재. 예를 들면, 테스트넷은 가스 수수료를 덜 고려하게 되고 네트워크도 혼잡도가 높지 않음.

 

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

  • Ganache (구 testrpc)는 다른 참여자들 없이 상호작용할 수 있는 가장 인기 있는 로컬 블록체인 시뮬레이터 중 하나다.

장점:

  • 동기화가 없고 디스크에 데이터가 거의 없다. 직접 첫 번재 블록을 채굴한다.
  • 테스트 이더를 얻을 필요가 없다. 테스트를 위해 사용할 수 있는 채굴 보상을 본인이 직접 가져가기 때문에.
  • 다른 사용자 없이 나 혼자 사용.
  • 다른 컨트랙트 없고 내가 배포한 컨트랙트만 있음.

단점:

  • 다른 사용자가 없다는 건, 공개 블록체인과 완전히 동일하게 동작하지 않는다는 뜻이다. 즉, 실제로 존재하는 트랜잭션 순서나 공간을 두고 경쟁하는 일은 없다.
  • 다른 채굴자가 없다는 건, 채굴이 그만큼 쉽고 예측 가능하다는 뜻이다. 이는 공개 블록체인에서 발생하는 일부 경우들을 테스트할 수 없다는 것을 의미한다.
  • 다른 컨트랙트가 없으므로 테스트를 위해 의존성을 갖는 것들과 라이브러르 등 모든 것을 다 배포해야 한다.
  • DAO 컨트랙트와 같은 경우 등 공개 컨트랙트와 주소를 다시 만들지 못할 수도 있다.

Ethereum (ETH) price stats and information


이더리움 클라이언트 실행

풀 노드를 위한 하드웨어 요구사항

클라이언트(노드)를 빌드하고 실행하기 위한 소프트웨어 요구사항

패리티

게스

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

게스 또는 패리티 실행

 

위 7개의 파트는 실습 내용인 주인 관계로 추후 포스트에서 상세하게 다룰 예정입니다.


JSON-RPC 인터페이스

  • 이더리움 클라이언트는 애플리케이션 인터페이스와 JSON(JavaScript Object Notation)으로 인코딩된 RPC(Remote Procedure Call) 명령을 제공한다. JSON-RPC API에서 이 명령을 볼 수 있음. 기본적으로 JSON-RPC API는 이더리움 클라이언트를 이더리움 네트워크 및 블록체인의 게이트웨이(gateway)로 사용하는 프로그램을 작성할 수 있게 해주는 인터페이스
  • 일반적으로, RPC 인터페이스는 포트 8545에서 HTTP 서비스로 제공된다.
  • JSON-RPC API에 접근하려면 사용 가능한 각 RPC 명령에 해당하는 '스텁(stub)' 함수 호출을 제공하는 특수 라이브러리(원하는 프로그래밍 언어로 작성됨)를 사용하거나, HTTP 요청과 JSON으로 인코딩된 send/recieve 요청을 수동으로 생성할 수 있다. 
  • curl같은 일반 커맨드 라인 HTTP 클라이언트를 사용해 RPC 인터페이스를 호출할 수도 있음.

추후 실습 참고 예정: 이더리움 geth JSON-RPC를 이용한 HTTP 웹으로 사용하기

 

 

원격 이더리움 클라이언트

  • 원격 클라이언트는 풀 클라이언트의 일부 기능을 제공
  • 더 빠르며 데이터 용량도 훨씬 더 적게 요구됨
  • 클라이언트는 일반적으로 다음 기능 중 하나 이상을 제공:
    • 개인키와 이더리움 주소를 지갑에서 관리
    • 트랜잭션 생성, 서명 및 브로드캐스트
    • 데이터 페이로드(payload)를 사용하여 스마트 컨트랙트와 상호연동
    • 브라우저와 댑(DApp) 간 상호연동
    • 블록 탐색기 같은 외부 서비스 링크
    • 이더 단위를 변환하고 외부 소스에서 환율을 검색
    • 자바스크립트 객체로서 web3 인스턴스를 웹 브라우저에 삽입
    • 다른 클라이언트가 브라우저에 제공/삽입한 web3 인스턴스를 사용
    • 로컬 또는 원격 이더리움 노드에서 RPC 서비스로 접근
  • 모바일 지갑 같은 원격 클라이언트는 기본적인 지갑 기능만 제공
  • 다른 원격 클라이언트는 모든 기능을 갖춘 DApp 브라우저
  • 원격 클라이언트는 일반적으로 다른 곳에서 실행되고 있는 풀 노드에 연결하여 이더리움 블록체인의 로컬 사본으로 동기화하지 않고 풀노드 이더리움 클라이언트의 기능 중 일부만 제공
    • 예를 들면, 로컬에서 여러분의 PC 혹은 웹 서버(혹은 이더리움 서버)에서 서드파티 제품을 통해 제공
  • 원격 클라이언트와 제공되는 기능 간단하게 살피기:
    • 모바일 지갑
      • 스마트폰에는 전체 이더리움 클라이언트를 실행하는 데 필요한 자원이 충분하지 않기 때문에 모든 모바일 지갑은 원격 클라이언트
    • 브라우저 지갑
      • 브라우저 내부에서 실행되는 원격 클라이언트
      • 가장 인기있는 것은 메타마스크
💡 메타마스크
RPC 클라이언트 및 컨트랙트 탐색기 기능도 지원
다양한 이더리움 블록체인에 연결되는 RPC 클라이언트 역할을 하는 브라우저 자바스크립트 컨텍스트에 web3 인스턴스를 넣음.