챕터 3 : 이더리움 클라이언트
"이더리움 클라이언트는 이더리움 사양을 구현하고 다른 이더리움 클라이언트와 피어투피어 네트워크를 통해 통신하는 소프트웨어 애플리케이션이다. 기준 사양과 표준 통신 프로토콜을 준수한다면, 서로 다른 이더리움 클라이언트들끼리 상호운용(interoperate)이 가능하다."
그냥 이 문장만 딱 봤을 때 무슨 말인지 사실 이해하기 힘들었다.
챕터를 다 읽고나서 대충 이해한 것 같은데 쉽게 설명하자면,
1. 이더리움 네트워크가 있고
2. 네트워크에 접속할 수 있도록 도와주는 클라이언트가 있는 것이다.
더 쉽게 비유해서 설명하면 네트워크가 있고 통신사가 여러개 있다고 생각하면 맞는 것 같다.
통신 규격만 맞춰서 통신하면 통신사끼리 통신이 가능하듯이 이더리움 사양을 구현한 이더리움 클라이언트끼리 상호운용이 가능하는 뜻이다.
이더리움은 오픈소스이며(LGPL v3.0) 아래링크에서 깃을 확인할 수 있다.
ethereum
ethereum has 254 repositories available. Follow their code on GitHub.
github.com
공개 기여자 커뮤니티가 있고 누구나 개발에 참여할 수 있다.
Home | ethereum.org
Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.
ethereum.org
"비트코인의 '사양'이 비트코인 코어(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
openethereum/parity-ethereum
The fast, light, and robust client for Ethereum-like networks. - openethereum/parity-ethereum
github.com
패리티는 풀 노드 이더리움 클라이언트 및 댑 브라우저이다.
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 |