마스터링 이더리움을 개인적으로 정리한 글입니다. 누락된 내용이 있을 수 있으며 잘못된 해석이 있을 수 있습니다.
포스트에 문제가 있다면 언제든지 댓글 부탁드립니다. :)
이더리움 클라이언트는 이더리움 사양을 구현하고 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클라이언트 및 컨트랙트 탐색기 기능 지원
'⛓️ Web3' 카테고리의 다른 글
솔리디티 문해력 특강_4강 (0) | 2023.09.17 |
---|---|
마스터링 이더리움_Ch.4 암호학 (0) | 2023.09.15 |
마스터링 이더리움_Ch.2 이더리움 기초 (0) | 2023.09.10 |
마스터링 이더리움_Ch.1 이더리움이란 무엇인가? (0) | 2023.09.09 |
솔리디티 문해력 특강_ 3강 (0) | 2023.09.07 |