챕터 3 : 이더리움 클라이언트
"이더리움 클라이언트는 이더리움 사양을 구현하고 다른 이더리움 클라이언트와 피어투피어 네트워크를 통해 통신하는 소프트웨어 애플리케이션이다. 기준 사양과 표준 통신 프로토콜을 준수한다면, 서로 다른 이더리움 클라이언트들끼리 상호운용(interoperate)이 가능하다."
그냥 이 문장만 딱 봤을 때 무슨 말인지 사실 이해하기 힘들었다.
챕터를 다 읽고나서 대충 이해한 것 같은데 쉽게 설명하자면,
1. 이더리움 네트워크가 있고
2. 네트워크에 접속할 수 있도록 도와주는 클라이언트가 있는 것이다.
더 쉽게 비유해서 설명하면 네트워크가 있고 통신사가 여러개 있다고 생각하면 맞는 것 같다.
통신 규격만 맞춰서 통신하면 통신사끼리 통신이 가능하듯이 이더리움 사양을 구현한 이더리움 클라이언트끼리 상호운용이 가능하는 뜻이다.
이더리움은 오픈소스이며(LGPL v3.0) 아래링크에서 깃을 확인할 수 있다.
공개 기여자 커뮤니티가 있고 누구나 개발에 참여할 수 있다.
"비트코인의 '사양'이 비트코인 코어(core)기준 구현체인 반면, 이더리움은 영어와 수학(공식) 사양이 결합되어 문서화되어 있다. 이 공식 사양은 다양한 이더리움 개선 제안과 함께 이더리움 클라이언트의 표준 작동 방식을 정의한다."
이더리움은 비트코인과 달리 '황서'라는 공식 사양에 의해 정의된다.(위의 깃에서 황서/yellow paper도 확인 할 수 있다.)
황서는 이더리움 변경사항에 맞게 주기적으로 업데이트 되며, 이 황서를 기준으로 독립적인 클라이언트들이 상호운용 가능하다.
공식사양에만 맞추면 되기 때문에 클라이언트 구현의 다양성이 크고, 이러한 다양성이 네트워크 안정성에 도움을 준다.
특정 클라이언트가 공격받더라도, 다른 독립된 클라이언트들이 살아있을 수 있기 때문이다.
이더리움 네트워크
"이더리움 기반 네트워크는 이더리움, 이더리움 클래식, 엘라, 익스팬스, 유비크, 뮤지코인 및 기타 여러 네트워크가 있다. 대부분 프로토콜 수준에서 호환되는 반면, 이더리움 클라이언트 소프트웨어의 관리자가 각 네트워크를 지원하기 위해 작은 변경을 요구하는 기능 또는 속성을 갖고 있는 경우가 많다. 이 때문에 이더리움 클라이언트 소프트웨어의 모든 버전이 모든 이더리움 기반 블록체인을 실항해는 것은 아니다."
프로토콜 수준에서 호환이 된다는 부분이 이해가 잘 안되는데, 각자의 필요에 의해 기능을 조금 수정할 뿐이라, 프로토콜 수준에서는 건드리지 않기 때문에 호환이 된다는 의미인 것 같다.
6가지 언어로 구현된 이더리움 프로토콜 기본 구현
- 러스트(Rust)로 작성된 패리티(Parity)
- 고(Go)로 작성된 게스(Geth)
- C++로 작성된 cpp-ethereum
- 파이썬(Python)으로 작성된 pyehtereum
- 스칼라(Scala)로 작성된 맨티스(Mantis)
- 자바(Java)로 작성된 하모니(Harmony)
풀 노드를 실행해야 하는가?
"블록체인의 건전성(health), 복원력(resilience), 검열 저항(censorship resistance) 특성은 독립적으로 운영되고 지리적으로 분산된 풀 노드(full node)가 얼마나 많은지에 달려있다. 각각의 풀 노드는 다른 새 노드가 블록 데이터를 얻어 작업을 부트스트랩(bootstrap)하고, 운영자에게 모든 트랜잭션 및 컨트랙트에 대해 신뢰할 수 있고 독립적인 검증을 제공할 수 있도록 도와준다."
풀 노드는 모든 장부를 가지고 있는 노드로써 블록체인 생태계에 꼭 필요한 존재이다.
하지만 풀 노드를 실행하려면 자원이 필요이상으로 발생하기 때문에,
개발을 위해서는
- 로컬 사설 블록체인 : 테스트넷 노드(롭스텐,카반,링키비), 가나슈
- 클라우드 기반 이더리움 클라이언트 : 인퓨라
로 원하는 작업을 대부분 수행할 수 있다.
노드 역할을 하지 않는 원격 클라이언트(메타마스크, 마이이더월렛 등)를 실행할 수도 있다.
원격 클라이언트는 공개 블록체인이나 자신의 노드, 테스트 넷, 로컬 블록체인 같은 기존 네트워크에 연결 할 수 있다.
원격 클라이언트와 지갑은 API(예 : web3.js API) 를 제공한다는 점에서 다르다.
풀 노드의 장단점, 공개 테스트넷의 장단점, 로컬 블록체인 시뮬레이션 장단점
각 환경의 장단점들을 소개한다.
이더리움 클라이언트 실행
풀 노드를 위한 하드웨어 요구사항
사양들이 나와있다.(옛날 책이라 다를 수도 있다)
클라이언트(노드)를 빌드하고 실행하기 위한 소프트웨어 요구사항
이 책에서는 배쉬 쉘을 실행하는 우분투 GNU/리눅스 환경에서 게스와,페리티 클라이언트를 설치하는 과정을 보여준다.
게스는 이더리움을, 패리티는 이더리움 포함 여러 이더리움 기반 블록체인을 지원한다.
git과 게스를 위해서 golang, 패리티를 위해서 rust를 설치해야한다.
패리티는 OpenSSL 과 libudev 같은 소포트웨어 라이브러리가 필요하다.
sudo apt-get install openssl libssl-dev libudev-dev cmake
패리티
github.com/openethereum/parity-ethereum
패리티는 풀 노드 이더리움 클라이언트 및 댑 브라우저이다.
git clone https://github.com/paritytech/parity-ethereum
cd parity-ethereum
//책에서 시킨대로 해보고 깃에 있는대로 해봤지만 에러가 떠서
//아래 커맨드로 하니 설치가 되었습니다.
sudo snap install parity
책에선 cargo install을 하라고 했으나 cargo가 없어서 'sudo apt install cargo' 로 깔았습니다.(cargo는 rust 패키지 매니저라고 합니다.)
책에 나온대로 하려했으나 cargo install이 안먹어서 cargo install --path . 도 시도했으나 아래와 같은 에러가 뜨며 실패하였습니다.
깃에 나와있는대로 다시 아래의 명령어들을 실행했으나
curl https://sh.rustup.rs -sSf | sh
git clone https://github.com/paritytech/parity-ethereum
cd parity-ethereum
cargo build --release --features final
빌드 마지막에 이렇게 에러가 뜨며 끝났습니다... 무슨말인지 하나도 모르겠고...
parity --version을 하니 나오는 문구를 따라하니 성공적으로 깔 수 있었다.
sudo snap install parity
snap도 패키지 관리자라고 하는데 snap은 되고 cargo는 안되는 것이
뭔가 cargo에 문제가 있어서 안깔렸던 것 같은데 뭔지 아시는 분은 댓글로 알려주시면 감사하겠습니다.
일단 깔았다는거에 만족하고 넘어간다...
'블록체인 > 책' 카테고리의 다른 글
지갑 | 마스터링 이더리움 (0) | 2021.07.25 |
---|---|
암호학 | 마스터링 이더리움 (0) | 2021.05.10 |
이더리움 기초 | 마스터링 이더리움 (0) | 2021.04.16 |
Evolution of Economics | Economics and Math of Token Engineering and DeFi - Fundamentals of Token Economics (0) | 2021.04.16 |
이더리움이란 무엇인가? | 마스터링 이더리움 (1) | 2021.04.16 |