본문 바로가기
⛓️ Web3

마스터링 이더리움_Ch.3 이더리움 클라이언트

by meLR 2023. 9. 12.

마스터링 이더리움을 개인적으로 정리한 글입니다. 누락된 내용이 있을 수 있으며 잘못된 해석이 있을 수 있습니다.

포스트에 문제가 있다면 언제든지 댓글 부탁드립니다. :)


이더리움 클라이언트는 이더리움 사양을 구현하고 P2P 네트워크를 통해 통신한다.

 

클라이언트끼리 상호운용 가능

⇒ 같은 프로토콜로 소통하고 동일한 규칙을 따름

⇒ 모두 동일한 네트워크에서 운영 및 상호작용

 

이더리움은 오픈소스 프로젝트이며 누구든지 수정가능하며 황서라는 공식 사양으로 정의 된다. 📌 ethereum
비트코인은 공식적인 방식으로 정의 되지않으며 비트코인 사양은 비트코인 코어의 기준 구현체이다.

 

이더리움은 영어와 수학 사양이 결합되어 문서화 되어있다.

⇒ 공식 사양 = 다양한 이더리움 개선제안 + 이더리움 클라이언트 표준 작동 방식

⇒ 이처럼 사양의 기준을 명확히 하기 때문에 독립적으로 개발된 클라이언트도 상호운용이 가능하다.

⇒ 즉, 이더리움은 실행되는 구현의 다양성이 크다. → 네트워크 안전성에 기여


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

💡 블록체인의 건전성, 복원력, 검열 저항성 특성은 독립적으로 운용되고 지리적으로 분산된 풀노드가 얼마나 많은지에 달려있다.

 

이더리움 개발에는 라이브 메인넷 네트워크에서 실행하는 풀노드가 필요하지 않다.

⇒ 테스트넷 노드, 로컬 사설 블록체인(가나슈), 클라우드 기반 이더리움 클라이언트(인퓨라) 에서 작업 수행가능

 

원격 클라이언트

  • 사본을 저장하지 않고 블록 및 트랜잭션의 유효성을 확인 하지 않는다.
  • 지갑의 기능을 제공 한다. 트랜잭션 생성 및 전파 가능
  • 풀노드, 퍼블릭 블록체인, 테스트넷, 개인 로컬 블록체인에 연결가능→ 메타마스크
💡 원격 클라이언트와 지갑의 다른점은 원격 클라이언튼 API를 제공하지만 지갑은 그렇지 않다.
💡 원격 클라이언트와 라이트 클라이언트의 다른점은 원격 클라이언트는 블록헤더 트랙잭션을 검사하지 않지만 라이트 클라이언트는 검사한다.

 

풀노드의 장단점

다른 새노드가 블록의 데이터를 얻어 부트스트랩하고, 독립적인 검증을 제공할 수 있도록 도와준다.

 

장점

  • 복원력과 검열 저항성을 지원
  • 모든 트랜잭션의 정식으로 검증
  • 중개자 없이 모든 컨트랙트와 상호작용 가능
  • 중개자 없이 컨트랙트를 공개 블록체인에 직접 배포가능
  • 블록체인의 상태를 오프라인에서 확인 가능
  • 정보를 제 3자에게 노출 시키지 않고 가져올 수 있다.

단점

  • 하드웨어와 대역폭 자원 확대가 필요하다.
  • 전체 동기화가 오래 걸린다.
  • 동기화를 유지하기 위해 관리 및 업그레이드 온라인 상태 유지가 필요하다.\

공개 테스트넷의 장단점

장점

  • 풀노드에 비해 훨씬 적은 데이터 동기화를 필요로 한다.
  • 전체 동기화가 적은 시간 내에 이루어진다.
  • 테스트용 이더를 무료로 받을 수 있다.
  • 라이브 퍼블릭 블록체인이다.

단점

  • 실제 돈 사용 불가능 => 실전 보안성 테스트 불가능
  • 실제 트랜잭션 시 발생하는 가스 수수료를 고려하지 않음  => 네트워크 혼잡이 없기에 해당 사항 테스트 불가능

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

장점

  • 동기화가 없고 디스크에 데이터가 거의 없다. 직접 첫번째 블록채굴
  • 테스트 이더를 자신이 직접 채굴해서 사용가능
  • 블록체인에 나만 존재
  • 내가 배포한 컨트랙트만 존재

단점

  • 공개 블록치인과 동일하게 작동하지않음 => 즉 경쟁이 없다.
  • 사용자가 나혼자이기에 채굴이 예측가능하고 다양한 시나리오를 테스트할수없다.
  • 블록체인에 컨트랙트가 없기 때문에 필요한 컨트랙트를 모두 배포해야한다.
  • 시나리오 테스트를 위한 공개 컨트랙트와 주소를 다시 못만들수있다.

이더리움 클라이언트 실행

패리티

  • 풀노드 이더리움 클라이언트 및 댑 브라우저 구현
  • 러스트로 작성
  • 이더리움 클라이언트 중 25% 차지

게스

  • 이더리움 재단에서 go언어로 개발
  • 이더리움 공식 클라이언트
  • 일반적으로 모든 이더리움 기반 블록체인은 자체 게스 구현을 갖고 있다.

 

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

일반적으로 이더리움 블록체인을 동기화할 때 클라이언트는 처음부터 다운로드 및 유효성 검사한다. -> 너무 오래걸리고 많은 자원을 소모한다.

많은 이더리움 기반 블록체인이 디도스 공격을 받았고 공격을 받은 블록체인은 전체 동기화를 진행할때 천천히 수행된다.

-> 이러한 취약점은 하드포크로 해결했다.

유효성검사와 동기화를 같이하면 매우 느려지지만 빠른 동기화 옵션을 사용하면 빠르게 동기화를 먼저하고 유효성 검사하여 보다 빠르게 동기화 가능하다.

💡 게스는 빠른 동기화를 설정해줘야 하지만 패리티는 기본적으로 빠른 동기화를 실행한다.

 


JSON RPC 인터페이스

이더리움 클라이언트는 애플리케이션 인터페이스와 JSON 으로 인코딩된 RPC 명령을 제공한다.

JSON RPC는 이더리움 클라이언트를 네트워크 및 블록체인의 케이트웨이 프로그램을 작성할 수 있게 해주는 인터페이스이다.

💡 RPC 인터페이스는 포트 8545 HTTP 서비스로 제공하고 로컬호스트의 연결만 허용하도록 제한한다.

 

JSON RPC API에 접근하려면…

  • 사용 가능한 각 RPC 명령인 스텁 함수를 호출을 제공하는 라이브러리 사용
  • HTTP요청과 JSON으로 인코딩된 보내기/받기 요청을 수동으로 요청

위 커맨드 라인에서 JSON 타입객체를 제외한 부분을 살펴보면 POST명령을 사용하고 있으며 컨텐츠 타입을 식별하기 위한 커맨드 라인도 살펴볼 수 있다.

 

또한 마지막줄에서 포트 8545에서 HTTP 를 사용하는 것을 확인 할 수 있다.

위 JSON RPC요청을 살펴보면

jsonrpc

JSON RPC의 프로토콜 버전

method

호출할 메서드 이름

params

메서드를 호출하는 동안 사용할 파라미터를 보유하는 구조화된 값 params는 생략 가능하다.

id

클라이언트가 설정한 식별자, 두 객체 간의 컨텍스트를 연결할 때 사용

위 JSON은 방금 살펴본 요청값의 응답 값이다.

이를 통해 게스 클라이언트 버전 1.8.0에서 서비스 됨을 알 수 있다.

위는 현재 가스 값을 확인하는 JSON RPC API이다.

💡 패리티는 게스 호환 모드를 지니고 있다.


원격 이더리움 클라이언트

원격 클라이언트는 풀 클라이언트의 일부 기능을 제공한다. 원격 클라이언트는 훨씬 빠르고 적은 자원을 소모한다.

다음 기능중 하나 이상을 제공한다.

  • 개인키와 이더리움 주소를 지갑에서 관리
  • 트랜잭션 생성, 서명 및 브로드캐스트
  • 데이터 페이로드 사용하여 스마트 컨트랙트와 상호 연동
  • 브라우저 댑간 사호연동
  • 블록 탐색기 같은 외부 서비스 링크
  • 이더 단위를 변환하고 외부소스에서 환율 검색
  • JS 객체로서 웹3 인스턴스를 웹 브라우저에 삽입
  • 다른 클라이언트가 브라우저에 제공 삽입한 웹3 인스턴스를 사용
  • 로컬 또는 원격 이더리움 노드에서 RPC서비스로 접근

원격 클라이언트는 다른곳에서 실행되는 풀노드에 연결하여 이더리움 블록체인의 로컬 사본으로 동기화 하지 않고 풀노드 이더리움 클라이언트의 기능 중 일부만 제공한다.

💡 모바일 지갑은 이더리움 클라이언트를 실행하는데 자원이 충분하지 않기 때문에 모든 모바일 지갑은 원격클라이언트이다.

 

메타마스크

  • 브라우저 기반 지갑
  • RPC클라이언트 및 컨트랙트 탐색기 기능 지원