‘마스터링 이더리움’ 세미나 3-1 – 3장. 이더리움 클라이언트
이번 세미나에서는 ‘3장. 이더리움 클라이언트’를 다룹니다.
이번 장은 크게 중요한 내용을 포함하지 않고 있기 때문에 빠르게 읽고 넘어가면 됩니다. 내용을 한 번 다 읽은 후에 한 두 시간 낼 수 있을 때 패리티나 게스를 설치하고 실행해 봅니다.
아래 인용한 문장을 다시 한 번 읽어봅니다.
- 이더리움 클라이언트는 이더리움 사양을 구현하고 다른 이더리움 클라이언트와 피어투피어(P2P) 네트워크를 통해 통신하는 소프트웨어 애플리케이션이다.
- 클라이언트 서버라는 용어에 익숙한 개발자들은 ‘이더리움 클라이언트’라는 용어를 들으면 ‘서버는 따로 있나’라고 오해할 수 있습니다. P2P 네트워크에서는 모두가 서로에게 클라이언트입니다. 이더리움 클라이언트는 이더리움의 모든 기능을 구현한 소프트웨어 입니다.
아래 요약한 내용을 기억하도록 합니다.
- 이더리움은 ‘황서’라는 공식 사양(명세)에 의해 정의된다.
- 비트코인은 사토시 나카모토의 논문을 가능하게 하는 참조 구현(비트코인 코어)을 제시
- 대표적인 클라이언트로 패리티와 게스가 있음
- 패리티는 러스트로 작성되었고, 게스는 고로 작성되었음
풀 노드를 실행해야 하는가?
100기가를 넘는 데이터를 수 일 동안 동기화해야 하는 상황에서, 일반 개발자가 학습을 위해서나 댑 서비스를 위해 풀 노드를 운영한다는 것은 쉽지 않습니다. 다음 링크는 이더리움 블록체인 크기에 대한 최신 추정치를 제공합니다. 2020년 2월 17일 시점에서 227.58 GB.
블록체인 세계에 보면 암호화폐와 블록체인을 분리해야 한다고 주장하시는 분들이 있는데, 이 분들이 강하게 비판하는 대상 중에 하나가 거래소 입니다. 사실 소규모 거래소들이 벌이는 행태를 보면 그럴 만하다고 이해도 갑니다. 하지만 채굴자를 제외하고 거래소들이 얼마 만큼의 비중으로 풀노드를 실행하고 있는지도 따져봐야 합니다. 소규모 거래소라고 하더라도 지갑 서비스를 위해 이더리움과 같이 메인넷을 운영하는 코인 하나에 대해 하나에서 둘 정도의 풀노드를 운영합니다. 한 쪽 면만을 보면 안 됩니다. 다른 쪽 면도 살펴봐야 합니다.
개발을 위해 풀 노드를 실행하는 것이 만만치 않은 상황에서 테스트넷, 노드를 운영하면서 노드 기능을 제공하는 서비스 공급자, 로컬 노드는 필수적입니다. 이더리움은 메인넷 외에 다양한 테스트 넷을 제공하고, 인퓨라(Infura) 같은 서비스 공급자가 있고, 편리하게 로컬 노들를 실행할 수 가나슈(Ganache)를 제공합니다.
또한 다른 풀 노드에 의존하면서 로컬 사본을 저장하지 않거나 블록 및 트랜잭션의 유효성을 확인하지 않는 원격 클라이언트를 실행할 수도 있습니다. 이전 장에서 사용해봤던 메타마스크가 원격 클라이언트입니다.
아래 인용한 본문 내용을 주의해서 다시 한 번 읽어 봅니다.
‘원격 클라이언트’ 및 ‘지갑’이라는 용어는 혼용되어 사용되기도 하지만 서로 다른 점이 있다. 일반적으로 원격 클라이언트는 지갑의 트랜잭션 기능 외에도 API(예: web3.js API)를 제공한다.
이더리움의 원격 지갑 개념과 라이트 클라이언트(비트코인의 단순지급검증(SPV)와 유사한)의 개념과 혼동하면 안 된다. 라이트 클라이언트는 블록 헤더의 유효성을 검사하고, 머클 증명을 사용하여 블록체인에서의 트랜잭션 포함 여부를 확인하고 그 영향도를 결정하여 풀 노드에 대해 비슷한 수준의 보안을 제공한다. 반대로, 이더리움 원격 클라이언트는 블록 헤더 또는 트랜잭션의 유효성을 검사하지 않는다.
풀 노드의 장단점, 공개 테스트넷의 장단점, 로컬 블록체인 시뮬레이션 장단점
이걸 장단점으로 논하기는 그렇고 특징 정도로 논하는 것이 좋을 것 같습니다.
댑 개발자라면 로컬 블록체인에서 개발하고, 테스트넷에서 테스트하고, 최종적으로 메인넷에서 테스트 후 배포할 것입니다. 실제적으로 댑 서비스를 운영해야 하고, 운영 중 다양한 모니터링 상황이 필요하다면 가능한 풀 노드를 실행하는 것이 좋겠지요. 풀 노드를 실행할 수 없다면 인퓨라 같은 믿을 만한 서비스 공급자를 사용하는 것도 괜찮은 방법입니다.
과제입니다. 패리티 또는 게스를 설치하고 실행해 봅니다.
패러티 소개 부분에서 ‘댑 부라우저’가 눈에 띕니다.
- Parity is an implementation of a full-node Ethereum client and DApp browser.
- 댑 브라우저는 웹기반의 댑 서비스를 지갑과 연동해서 사용할 수 있도록 하는 것으로 메타 마스크가 대표적인 댑 브라우저입니다. 왜 패러티를 댑 브라우저로 소개하고 있는지 궁금하네요.
저는 우분투 18.04에 패리티를 설치했습니다. 원서를 참조해서 다음과 같은 절차로 설치해서 실행해 보았습니다.
- http://www.rustup.rs/를 참조해서 러스트 설치
-
123456sudo apt-get install openssl libssl-dev libudev-dev cmake clanggit clone https://github.com/paritytech/paritycd paritycargo install --pathparity --versionparity
JSON-RPC 인터페이스
아래 요약한 내용을 다시 한 번 확인해 봅니다.
- 이더리움 클라이언트는 JSON-RPC API를 제공한다.
- 일반적으로 RPC 인터페이스는 포트 8545에서 HTTP 서비스로 제공된다.
- JSON-RPC 요청은 JSON-RPC 2.0 사양에 따라 형식이 지정된다.
원격 이더리움 클라이언트
원격 이더리움 클라이언트는 댑 브라우저로 포지셔닝 하면서 이더리움 블록체인 생태계의 매우 중요한 역할을 차지하고 있습니다. 댑 브라우저를 만든다면 아래 인용한 기능들을 잘 살펴봐야 합니다.
These clients typically provide the ability to do one or more of the following:
- Manage private keys and Ethereum addresses in a wallet.
- Create, sign, and broadcast transactions.
- Interact with smart contracts, using the data payload.
- Browse and interact with DApps.
- Offer links to external services such as block explorers.
- Convert ether units and retrieve exchange rates from external sources.
- Inject a web3 instance into the web browser as a JavaScript object.
- Use a web3 instance provided/injected into the browser by another client.
- Access RPC services on a local or remote Ethereum node.
대표적인 원격 클라이언트인 브라우저 지갑인 메타마스크에 대한 아래 요약을 다시 한 번 읽어 봅니다.
Unlike other browser wallets, MetaMask injects a web3 instance into the browser JavaScript context, acting as an RPC client that connects to a variety of Ethereum blockchains (mainnet, Ropsten testnet, Kovan testnet, local RPC node, etc.). The ability to inject a web3 instance and act as a gateway to external RPC services makes MetaMask a very powerful tool for developers and users alike.
최근 의미있는 수의 트랜잭션을 일으키는 디파이 서비스들이 웹 서비스로 개발되고 댑 브라우저를 요구하면서 메타마스크가 뜨고 있습니다. 그러자 이곳 저곳에서 메타마스크 비슷한 것을 만들거나 자기도 댑 브라우저다라고 하는 것들이 많이 나타나고 있습니다.
메타마스크는 일찌감치 댑 브라우저로 가기 위한 준비를 차근 차근 해 왔고 시장을 선도해 왔습니다. 디파이 서비스들이 지갑에 대한 걱정 없이 웹 서비스를 제공할 수 있는 것은 메타마스크 덕이라고 할 수 있습니다. 메타마스크가 갖는 의미를 지갑 수준으로 사소하게 평가해서는 안 됩니다.