상세 컨텐츠

본문 제목

Ethereum 노드 아키텍처 (실행 클라이언트와 컨센서스 클라이언트)

Blockchain/Ethereum

by Yongari 2023. 2. 25. 12:40

본문

 

0. 이더리움 네트워크의 전체적인 개요 

이더리움 네트워크는 실행 클라이언트, 컨센서스 클라이언트, 데이터베이스, 스토리지, 네트워크 인터페이스, RPC 서버 등으로 구성되어 있다. 자세한 내용은 다음과 같다. 

 

  • 실행 클라이언트: 이더리움 가상 머신을 실행시키는 역할을 합니다. 노드가 트랜잭션을 받으면 실행 클라이언트가 해당 트랜잭션을 실행하고, 그 결과를 블록으로 생성합니다. 대표적인 실행 클라이언트로는 Geth, Parity 등이 있습니다.

  • 컨센서스 클라이언트: 분산 시스템에서 노드들이 합의를 이루는데 필요한 역할을 합니다. 이더리움은 PoW(Proof of Work)와 PoS(Proof of Stake) 두 가지 방식을 지원하는데, 컨센서스 클라이언트는 이러한 알고리즘을 구현하고 블록의 유효성을 검증하는 역할을 합니다. 대표적인 컨센서스 클라이언트로는 Geth, Parity, Besu 등이 있습니다.

두 클라이언트는 Engine API를 통해 통신하며, P2P 네트워크로 연결되어 있습니다. P2P 네트워크는 블록체인의 노드들이 서로 정보를 교환하고 블록을 전파하는데 사용되는 네트워크입니다.

 

  1. 데이터베이스: 이더리움의 데이터베이스는 현재 LevelDB를 사용하고 있습니다. 이 데이터베이스는 키-값 구조를 사용하며, 이더리움 블록체인에 저장된 모든 트랜잭션과 상태를 저장합니다.
  2. 스토리지: 이더리움의 스토리지는 현재 머클 패트리샤(Merkle Patricia) 트리를 사용합니다. 이 스토리지는 이더리움 블록체인에 저장된 모든 계정 및 계정 상태를 저장합니다.
  3. 네트워크 인터페이스: 이더리움은 P2P 네트워크를 사용하여 블록체인 데이터를 공유합니다. 네트워크 인터페이스는 이더리움 노드 간의 통신을 위한 프로토콜을 정의하고, 블록체인 데이터의 무결성을 보장하는 기능을 제공합니다.
  4. RPC 서버: 이더리움 RPC 서버는 JSON-RPC를 사용하여 이더리움 노드와 상호작용할 수 있는 인터페이스를 제공합니다. 이 인터페이스를 사용하여 블록체인 데이터를 쿼리하고, 트랜잭션을 생성하거나 처리할 수 있습니다. 이를 통해 블록체인 애플리케이션을 개발할 수 있습니다.

 


 

이더리움 네트워크를 구성하는 2개의 클라이언트
(실행 클라이언트와 컨센서스 클라이언트)

 

1. 실행 클라이언트 (이전 ETH1 클라이언트) 

이더리움 실행 클라이언트는 트랜잭션을 생성하고 전파하며, 이를 실행해서 블록체인의 상태를 변경합니다. 또한 실행 클라이언트는 블록체인에 기록된 트랜잭션 정보를 제공하고, 블록체인을 탐색할 수 있는 인터페이스를 제공합니다. 실행 클라이언트는 컨센서스 클라이언트와 함께 동작하여 이더리움 노드가 블록체인과 동기화되고, 새로운 블록이 생성될 때 실행할 트랜잭션 정보를 제공합니다.


1-1 트랜잭션 핸들링(이더리움 네트워크에서의 거래 핸들링) 
1-2 트랜잭션 가십 : 클러스터에 있는 노드간에 트랜잭션 정보를 공유하는 행위

1-3 EVM : 이더리움 가상 환경을 지원한다. 

1-4 State management : 상태관리, 이더리움은 상태관리머신이다. 

 

이더리움 커뮤니티는 이전에 Eth1 클라이언트로 알려진 오픈소스 실행 클라이언트를 유지관리한다. 

Client
Language     
Operating System Network    
Geth Go Linux, Windows, macOS Mainnet, Sepolia, Goerli Snap, Full Archive, Pruned
Nethermind C#, .NET Linux, Windows, macOS Mainnet, Sepolia, Goerli, and more Snap (without serving), Fast, Full Archive, Pruned
Besu Java Linux, Windows, macOS Mainnet, Sepolia, Goerli, and more Snap, Fast, Full Archive, Pruned
Erigon Go Linux, Windows, macOS Mainnet, Sepolia, Goerli, and more Full Archive, Pruned
Akula Rust Linux Mainnet, Sepolia, Goerli Full Archive, Pruned

Geth - Geth의 대략적인 개요는 다음과 같다.
이더리움 프로토콜의 현재 구현 중 하나이고 가장 큰 사용자기반과 개발자를 위한 툴을 갖춘 광범위한 클라이언트 go로 작성되었으며 GNU LGP v3 라이센스가 부여됨

그럼 더 구체적인 부분으로 넘어가자

Geth가 하는 일은 무엇인가?


실행 클라이언트로서, Geth는 컨센서스 클라이언트가 블록에 포함시킬 실행 페이로드(트랜잭션 목록, 업데이트된 State trie 등의 실행 관련 데이터)를 생성하는 역할을 합니다. Geth는 또한 새 블록에 도착하는 트랜잭션을 재실행하여 유효한지 확인합니다. 트랜잭션 실행은 이더리움 가상 머신(Ethereum Virtual Machine, EVM)이라고 불리는 Geth의 내장 컴퓨터에서 수행됩니다.

Geth는 또한 Ethereum에 대한 사용자 인터페이스를 제공하여 사용자가 Ethereum 블록체인을 쿼리하고 트랜잭션을 제출하고 스마트 계약을 배포할 수 있는 일련의 RPC 메서드를 노출합니다. 종종 RPC 호출은 Web3js나 Web3py와 같은 라이브러리에 의해 추상화되며, 예를 들어 Geth의 내장 JavaScript 콘솔, 개발 프레임워크 또는 웹 앱에서 사용됩니다. (web3.eth api를 사용하는 것을 생각하시면 됩니다.)

 

 

Nethmind - Nethmind는 C#으로 작성된 이더리움 클라이언트다. LGPL-3.0으로 라이센스가 부여됬으며 NET 기술스택은 ARM을 포함한 모든 주요플랫폼에서 실행됨 

Besu - Hyperledge besu는 엔터프라이즈급 Ethereum 클라이언트다. 모든 이더리움 메인넷 기능을 실행하며 광범위한 모니터링을 수행하고 개방형 커뮤니티 채널과 기업용 SLA를 지원한다.  컨센시스에서 지원하는 클라이언트고 Java로 작성되었음

 

Erigon - Erigon은 이전에 Turbo-Geth라고 불리었으며, 속도와 디스크 공간 효율성을 위해 Go Ethereum의 분기점(fork)으로 시작되었습니다. Erigon은 이더리움(Ethereum)을 완전히 다시 설계한 구현체이며 현재는 Go로 작성되어 있지만 Akula와 같은 다른 언어의 구현체도 개발 중입니다. Erigon의 목표는 이더리움의 더 빠르고 더 모듈화되며 최적화된 구현을 제공하는 것입니다. Erigon은 전체 아카이브 노드 동기화를 2TB의 디스크 공간을 사용하여 3일 이내에 수행할 수 있습니다.

 

 


 

2. 컨센서스 클라이언트 

컨센서스 클라이언트는 이더리움 네트워크와 동기화하기 위한 로직을 처리하는 클라이언트입니다. 이는 동료 노드로부터 블록을 수신하고 포크 선택 알고리즘을 실행하여 노드가 언제나 인증(validator)의 효과적인 잔액으로 가중치를 매겨 가장 많은 인증을 축적한 체인을 따르도록 합니다.(POS 알고리즘) 컨센서스 클라이언트는 실행 클라이언트를 서로 연결하는 네트워크와는 별도의 P2P(peer-to-peer) 네트워크를 가지며, 해당 클라이언트끼리 블록과 인증서를 공유합니다. 컨센서스 클라이언트 자체는 블록 제안이나 인증에 참여하지 않습니다. 대신, 옵션으로 제공되는 검증자(validator)를 통해 이 작업을 수행합니다. 검증자 없이도 컨센서스 클라이언트는 체인의 최신 상태를 유지하여 사용자가 실행 클라이언트를 사용하여 올바른 체인에서 거래할 수 있도록 합니다.

 

2-1 컨센서스 로직 : 블록체인 네트워크의 모든 참가자가 합의를 이루어야 하는 블록 생성과 트랜잭션 검증을 수행하는 알고리즘

2-2 포크 선택 : 분기를 어떻게 할지 선택하는 로직 

2-3 블록 가십 : 클러스터에 있는 블록정보를 퍼트리는 로직 

 


 

Client Language Operating systems Networks
Lighthouse Rust Linux, Windows, macOS Beacon Chain, Goerli, Pyrmont, Sepolia, Ropsten, and more
Lodestar TypeScript Linux, Windows, macOS Beacon Chain, Goerli, Sepolia, Ropsten, and more
Nimbus Nim Linux, Windows, macOS Beacon Chain, Goerli, Sepolia, Ropsten, and more
Prysm Go Linux, Windows, macOS Beacon Chain, Gnosis, Goerli, Pyrmont, Sepolia, Ropsten, and more
Teku Java Linux, Windows, macOS Beacon Chain, Gnosis, Goerli, Sepolia, Ropsten, and more

 

Lighthouse 

 

Lighthouse는 아파치 2.0 라이선스로 작성된 Rust 언어로 구현된 컨센서스 클라이언트입니다. Sigma Prime에서 유지 보수하며, 비컨 체인 제네시스 이후 안정적이고 프로덕션 레디 상태입니다. 다양한 기업, 스테이킹 풀 및 개인들이 의존하고 있으며, 데스크톱 PC에서부터 복잡한 자동화 배포까지 다양한 환경에서 안전하고 높은 성능 및 상호 운용성을 목표로 합니다. 라이트하우스의 문서는 라이트하우스 북에서 확인할 수 있습니다.

Loadstar

Loadstar는 LGPL-3.0 라이선스로 작성된 Typescript 언어로 구현된 프로덕션 레디 컨센서스 클라이언트입니다. ChainSafe Systems에서 유지 보수하며, 독립된 스테이커(이더리움 스테이킹을 하는 사람들), 개발자 및 연구자를 위한 최신 컨센서스 클라이언트 중 하나입니다. 로드스타는 이더리움 프로토콜의 자바스크립트 구현을 사용하는 비컨 노드 및 검증기 클라이언트로 구성됩니다. 로드스타는 경량 클라이언트로 이더리움의 사용성을 개선하고, 더 많은 개발자들에게 접근성을 넓히며, 생태계 다양성에 기여하는 것을 목표로 합니다. Loadstar 웹사이트에서 자세한 정보를 확인할 수 있습니다.

 

 

Nimbus


Nimbus는 아파치 2.0 라이선스로 작성된 Nim 언어로 구현된 컨센서스 클라이언트입니다. 솔로 스테이커와 스테이킹 풀에서 사용되는 프로덕션 레디 클라이언트입니다. 님버스는 자원 효율성을 고려하여 설계되었고 자원 제한된 기기 및 기업 인프라에서도 안정성이나 보상 성능 등에 영향을 미치지 않는 쉬운 실행을 제공합니다. 더 가볍고 적은 자원을 차지하기 때문에, 네트워크가 스트레스 상황일 때 클라이언트가 더 안전한 여유 공간을 가지게 됩니다.

 

Nimbus는 Trinity에서 구현되었습니다. 빠른 동기화(fast sync)와 같이 작동하지만, 최신 블록 실행에 필요한 데이터도 다운로드합니다. 이렇게 하면 시작 후 처음 몇 분 안에 체인을 쿼리할 수 있습니다.

 

  • 상태를 먼저 동기화하고 몇 분 안에 RPC를 쿼리할 수 있습니다.
  • 아직 개발 중이며 완전히 신뢰할 수 없으며 백그라운드 동기화가 느려지고 RPC 응답이 실패할 수 있습니다.

Nimbus docs에서 자세한 정보를 확인하세요. 

 

Prysm

 

Prysm은 GPL-3.0 라이센스 하에 Go로 작성된 완전 기능을 갖춘 오픈 소스 컨센서스 클라이언트입니다. 선택적으로 웹앱 UI를 갖추고 있으며 스테이크-앳-홈 및 기관 사용자 모두를 위한 사용자 경험, 문서 및 구성 가능성을 우선시합니다. Prysm docs에서 자세한 정보를 확인하세요.


Teku

 

Teku는 원래 Beacon Chain Genesis 클라이언트 중 하나입니다. 일반적인 목표 (보안, 견고성, 안정성, 사용성, 성능)와 함께, Teku는 모든 다양한 합의 클라이언트 표준을 완전히 준수하도록 명시적으로 목표를 설정합니다.

Teku는 매우 유연한 배포 옵션을 제공합니다. Beacon 노드와 검증자 클라이언트를 단일 프로세스로 실행할 수 있으며, 솔로 스테이커에게는 매우 편리하며, 복잡한 스테이킹 작업을 위해 노드를 별도로 실행할 수 있습니다. 또한 Teku는 Web3Signer와 완전히 상호 운용 가능하여 서명 키 보안과 슬래싱 보호를 제공합니다.


Teku는 Java로 작성되었으며 Apache 2.0 라이선스로 사용 가능합니다. Teku는 Besu와 Web3Signer를 책임지는 ConsenSys의 Protocol 팀에 의해 개발되었습니다. Teku docs에서 자세히 알아보세요.

 


검증자(Validators)는 무엇인가 ?

검증자는 32 ETH가 예치(스테이킹) 계약으로 보내졌을 때 컨센서스 클라이언트에 추가할 수 있습니다. 검증자(Validators) 클라이언트는 컨센서스 클라이언트와 함께 제공되며 언제든지 노드에 추가할 수 있습니다. 검증자(Validators)는 인증 및 블록 제안을 처리하며, 노드가 보상을 축적하거나 벌금 또는 슬래시를 통해 ETH를 잃을 수 있도록 합니다. 검증자(Validators) 소프트웨어를 실행하면 노드가 새로운 블록을 제안할 수 있는 자격이 부여됩니다.

 

 

 


 

이더리움 슬래시란 무엇인가?

이더리움에서 슬래시(Slashing)는 비례적 패널티(proportional penalty)를 적용하여 벌칙을 내리는 작업 증명(Proof-of-Work) 및 작업 참여(Proof-of-Stake) 프로토콜의 일부입니다.

슬래시는 이더리움 네트워크 안전성을 유지하기 위해 특정 유형의 잘못된 행동에 대한 벌칙으로 작용합니다. 예를 들어, 이중으로 출시된 블록을 제출하거나, 불법적으로 수정된 투표를 제출하는 등의 행위는 슬래시의 대상이 될 수 있습니다. 슬래시는 벌칙으로 보증금의 일부 또는 전부를 잃게 하거나, 향후 참여 불가능으로 만들 수 있습니다.

'Blockchain > Ethereum' 카테고리의 다른 글

Ethereum Improvement Proposal - EIP8  (0) 2023.03.02
go-ethereum/p2p/discover/v4wire  (0) 2023.03.01
EVM(Ethereum Virtual Machine)의 내부 동작 구조  (0) 2023.02.08
EVM (Ethereum Virtual Machine)  (0) 2023.02.06
Ethereum(이더리움)  (0) 2023.02.06

관련글 더보기