이더리움 네트워크는 실행 클라이언트, 컨센서스 클라이언트, 데이터베이스, 스토리지, 네트워크 인터페이스, RPC 서버 등으로 구성되어 있다. 자세한 내용은 다음과 같다.
두 클라이언트는 Engine API를 통해 통신하며, P2P 네트워크로 연결되어 있습니다. P2P 네트워크는 블록체인의 노드들이 서로 정보를 교환하고 블록을 전파하는데 사용되는 네트워크입니다.
이더리움 실행 클라이언트는 트랜잭션을 생성하고 전파하며, 이를 실행해서 블록체인의 상태를 변경합니다. 또한 실행 클라이언트는 블록체인에 기록된 트랜잭션 정보를 제공하고, 블록체인을 탐색할 수 있는 인터페이스를 제공합니다. 실행 클라이언트는 컨센서스 클라이언트와 함께 동작하여 이더리움 노드가 블록체인과 동기화되고, 새로운 블록이 생성될 때 실행할 트랜잭션 정보를 제공합니다.
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일 이내에 수행할 수 있습니다.
컨센서스 클라이언트는 이더리움 네트워크와 동기화하기 위한 로직을 처리하는 클라이언트입니다. 이는 동료 노드로부터 블록을 수신하고 포크 선택 알고리즘을 실행하여 노드가 언제나 인증(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는 아파치 2.0 라이선스로 작성된 Rust 언어로 구현된 컨센서스 클라이언트입니다. Sigma Prime에서 유지 보수하며, 비컨 체인 제네시스 이후 안정적이고 프로덕션 레디 상태입니다. 다양한 기업, 스테이킹 풀 및 개인들이 의존하고 있으며, 데스크톱 PC에서부터 복잡한 자동화 배포까지 다양한 환경에서 안전하고 높은 성능 및 상호 운용성을 목표로 합니다. 라이트하우스의 문서는 라이트하우스 북에서 확인할 수 있습니다.
Loadstar는 LGPL-3.0 라이선스로 작성된 Typescript 언어로 구현된 프로덕션 레디 컨센서스 클라이언트입니다. ChainSafe Systems에서 유지 보수하며, 독립된 스테이커(이더리움 스테이킹을 하는 사람들), 개발자 및 연구자를 위한 최신 컨센서스 클라이언트 중 하나입니다. 로드스타는 이더리움 프로토콜의 자바스크립트 구현을 사용하는 비컨 노드 및 검증기 클라이언트로 구성됩니다. 로드스타는 경량 클라이언트로 이더리움의 사용성을 개선하고, 더 많은 개발자들에게 접근성을 넓히며, 생태계 다양성에 기여하는 것을 목표로 합니다. Loadstar 웹사이트에서 자세한 정보를 확인할 수 있습니다.
Nimbus는 아파치 2.0 라이선스로 작성된 Nim 언어로 구현된 컨센서스 클라이언트입니다. 솔로 스테이커와 스테이킹 풀에서 사용되는 프로덕션 레디 클라이언트입니다. 님버스는 자원 효율성을 고려하여 설계되었고 자원 제한된 기기 및 기업 인프라에서도 안정성이나 보상 성능 등에 영향을 미치지 않는 쉬운 실행을 제공합니다. 더 가볍고 적은 자원을 차지하기 때문에, 네트워크가 스트레스 상황일 때 클라이언트가 더 안전한 여유 공간을 가지게 됩니다.
Nimbus는 Trinity에서 구현되었습니다. 빠른 동기화(fast sync)와 같이 작동하지만, 최신 블록 실행에 필요한 데이터도 다운로드합니다. 이렇게 하면 시작 후 처음 몇 분 안에 체인을 쿼리할 수 있습니다.
Nimbus docs에서 자세한 정보를 확인하세요.
Prysm은 GPL-3.0 라이센스 하에 Go로 작성된 완전 기능을 갖춘 오픈 소스 컨센서스 클라이언트입니다. 선택적으로 웹앱 UI를 갖추고 있으며 스테이크-앳-홈 및 기관 사용자 모두를 위한 사용자 경험, 문서 및 구성 가능성을 우선시합니다. Prysm docs에서 자세한 정보를 확인하세요.
Teku는 원래 Beacon Chain Genesis 클라이언트 중 하나입니다. 일반적인 목표 (보안, 견고성, 안정성, 사용성, 성능)와 함께, Teku는 모든 다양한 합의 클라이언트 표준을 완전히 준수하도록 명시적으로 목표를 설정합니다.
Teku는 매우 유연한 배포 옵션을 제공합니다. Beacon 노드와 검증자 클라이언트를 단일 프로세스로 실행할 수 있으며, 솔로 스테이커에게는 매우 편리하며, 복잡한 스테이킹 작업을 위해 노드를 별도로 실행할 수 있습니다. 또한 Teku는 Web3Signer와 완전히 상호 운용 가능하여 서명 키 보안과 슬래싱 보호를 제공합니다.
Teku는 Java로 작성되었으며 Apache 2.0 라이선스로 사용 가능합니다. Teku는 Besu와 Web3Signer를 책임지는 ConsenSys의 Protocol 팀에 의해 개발되었습니다. Teku docs에서 자세히 알아보세요.
검증자는 32 ETH가 예치(스테이킹) 계약으로 보내졌을 때 컨센서스 클라이언트에 추가할 수 있습니다. 검증자(Validators) 클라이언트는 컨센서스 클라이언트와 함께 제공되며 언제든지 노드에 추가할 수 있습니다. 검증자(Validators)는 인증 및 블록 제안을 처리하며, 노드가 보상을 축적하거나 벌금 또는 슬래시를 통해 ETH를 잃을 수 있도록 합니다. 검증자(Validators) 소프트웨어를 실행하면 노드가 새로운 블록을 제안할 수 있는 자격이 부여됩니다.
이더리움에서 슬래시(Slashing)는 비례적 패널티(proportional penalty)를 적용하여 벌칙을 내리는 작업 증명(Proof-of-Work) 및 작업 참여(Proof-of-Stake) 프로토콜의 일부입니다.
슬래시는 이더리움 네트워크 안전성을 유지하기 위해 특정 유형의 잘못된 행동에 대한 벌칙으로 작용합니다. 예를 들어, 이중으로 출시된 블록을 제출하거나, 불법적으로 수정된 투표를 제출하는 등의 행위는 슬래시의 대상이 될 수 있습니다. 슬래시는 벌칙으로 보증금의 일부 또는 전부를 잃게 하거나, 향후 참여 불가능으로 만들 수 있습니다.
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 |