요약
Plasma는 검증자 노드(블록 제안 및 확정)와 비검증 노드(합의에 영향을 미치지 않고 RPC를 제공하고 체인을 따라감)를 분리합니다. 이를 통해 Plasma는 검증자 세트를 작고 안전하게 유지하고, RPC 공급자가 독립적으로 확장할 수 있게 하며, 합의나 네트워킹 위험을 추가하지 않습니다.고수준 아키텍처
| 계층 | 역할 | 신뢰 모델 |
|---|---|---|
| 합의 계층 (CL) | 블록 제안 및 확정 | PlasmaBFT |
| 실행 계층 (EL) | 트랜잭션 처리, 상태 관리, RPC 제공 | 페어링된 CL을 완전히 신뢰 |
확장 과제
사용량이 증가함에 따라 더 많은 앱과 사용자가 체인 데이터를 조회하거나 트랜잭션을 전송하기 위해 RPC 접근이 필요합니다. 하지만 각 새 실행 노드가 반드시 새 합의 노드와 페어링되어야 한다면 확장이 비효율적이 되고 검증자 세트가 비대해질 위험이 있습니다. 읽기 수요를 충족하기 위해 RPC 공급자가 추가 검증자를 운영하도록 하는 것은 실용적이지 않으며 Plasma의 성능 목표와 일치하지 않습니다.해결책: 비검증 노드
비검증 노드는 합의 노드처럼 작동하지만 합의에 참여하지 않습니다. 대신 확정된 블록과 fork-choice 업데이트를 위해 신뢰할 수 있는 검증자를 ‘따라’갑니다. 주요 동작:- 검증자의 합의 노드를 구독하여 동기화 상태를 유지합니다.
- 실제 검증자가 가질 수 있는 동일한 fork-choice 뷰를 노출합니다.
- 읽기만 수행하므로 부하를 추가하거나 보안 위험을 도입하지 않습니다.
이 설계의 이점
| 목표 | 비검증 노드가 도움이 되는 방법 |
|---|---|
| 검증자 세트를 작게 유지 | 비검증 노드는 투표하지 않고 검증자만 투표합니다. |
| 무제한 수평 확장 | RPC 공급자는 새 검증자 자리를 요구하지 않고도 각각 자체 비검증 노드와 함께 수백 개의 읽기/쓰기 RPC 노드를 실행할 수 있습니다. |
| 합의 정확성 유지 | 각 실행 노드는 여전히 정확히 하나의 CL을 따릅니다. 상태 분기의 위험이 없습니다. |
| 위험 감소 | 비검증 노드는 읽기 전용이며 합의 메시지에 영향을 미칠 수 없습니다. |
| 페일오버 단순화 | 여러 검증자를 따름으로써 하나가 오프라인이 되면 자동으로 새 검증자로 전환할 수 있습니다. |
요약 비교
| 기능 | 검증자 | 비검증 노드 |
|---|---|---|
| 합의 참여 | 전체 (제안, 투표, 확정) | 없음 (수신만) |
| 메시지 유형 | 모든 합의 메시지 | 블록 메시지만 |
| 네트워크 역할 | 적극적 참여자 | 수동적 추적자 |
| 리소스 요구 사항 | 더 높음 (전체 합의) | 더 낮음 (메시징만) |
점진적 탈중앙화
Plasma는 점진적 탈중앙화 모델을 따르고 있습니다. 첫날부터 검증자 세트를 개방하기보다, 초기 초점은 안정성, 성능 및 개발자 사용성에 있습니다. 이 접근 방식은 핵심 프로토콜 구성 요소가 아직 진화하는 동안 네트워크 신뢰성을 우선시합니다. 탈중앙화는 장기 목표로 남아 있지만 점진적으로 단계별로 도입될 것입니다. 검증자 세트는 세 단계를 통해 확장됩니다:
이 단계적 출시는 탈중앙화와 네트워크 무결성의 균형을 맞춥니다. 이를 통해 광범위한 검증자 세트에 중요한 인프라 책임을 넘기기 전에 프로토콜을 강화할 수 있습니다.
피어 디스커버리
Plasma 노드는 스택의 각 계층에 대해 하나씩 두 가지 독립적인 메커니즘을 통해 피어를 발견하고 연결합니다.실행 계층 (Reth)
실행 클라이언트는 피어 디스커버리를 위해 Ethereum의 표준 devp2p 프로토콜을 사용합니다. 시작 시 Reth 노드는enodes.txt에 정의된 신뢰할 수 있는 실행 피어 세트에 연결합니다. 이는 각 피어의 공개 키, IP 주소 및 포트를 인코딩하는 enode URL입니다.
각 네트워크의 enodes.txt는 non-validator-templates 저장소에 미리 구성되어 있습니다. 초기 세트에 연결한 후 Reth의 내장 디스커버리 프로토콜(discv4/discv5)이 자동으로 추가 피어를 찾습니다.
실행 P2P 계층은 포트 30303(TCP/UDP)에서 작동합니다.
합의 계층 (PlasmaBFT)
합의 옵저버 클라이언트는non-validator.toml에 정의된 부트스트랩 노드를 통해 피어를 발견합니다. 각 부트스트랩 노드 항목에는 API 호스트, P2P 포트 및 libp2p 피어 ID가 포함됩니다:
discovery.enabled = true) 네트워크에서 추가 피어를 자동으로 찾습니다.
합의 P2P 계층은 포트 34070(TCP)에서 작동합니다.
NAT 뒤의 노드
노드가 NAT 게이트웨이나 방화벽 뒤에 있는 경우 다른 피어가 내부 주소를 사용하여 도달할 수 없을 수 있습니다. 피어가 노드를 발견하고 연결할 수 있도록 외부 주소를 구성할 수 있습니다:p2p_port의 값으로 기본 설정됩니다. 외부 주소가 도달 가능하고 관련 포트가 방화벽을 통해 포워딩되는지 확인하세요.
요약
| 계층 | 프로토콜 | 포트 | 디스커버리 방법 |
|---|---|---|---|
| 실행 | devp2p | 30303 | 신뢰할 수 있는 enode + 자동 디스커버리 |
| 합의 | libp2p | 34070 | non-validator.toml의 부트스트랩 노드 |
빠른 시작
노드 유형
검증자, 비검증 및 RPC 공급자 역할 이해
비검증 노드 설정
Docker Compose로 노드 배포
하드웨어 요구 사항
노드를 위한 최소 및 권장 사양
운영자 온보딩
무허가 노드 운영 시작하기