목적 및 범위
이 문서는 go-stablenet에서 메시지 라우팅, 피어 프로토콜 라이프사이클, 데이터 전파를 관리하는 Ethereum 프로토콜 핸들러를 설명합니다. 프로토콜 핸들러는 P2P 네트워크 레이어와 다운로더, 블록 페처, 트랜잭션 풀과 같은 상위 수준 블록체인 구성 요소 간의 다리 역할을 합니다. 기본 P2P 서버 및 피어 연결 관리에 대한 정보는 P2P 서버 및 피어 관리을 참조하세요. 체인 동기화 메커니즘에 대한 세부사항은 체인 동기화을 참조하세요.핸들러 아키텍처
프로토콜 핸들러 시스템은 여러 레이어로 구성됩니다.핵심 핸들러 구조
메인handler 구조체는 모든 프로토콜 관련 활동을 조정합니다.
handler 구조체는 다음을 포함합니다.
- networkID: 네트워크 식별자(mainnet, testnet 등)
- forkFilter: 포크 ID 검증 필터
- downloader: 전체 체인 동기화 구성 요소
- blockFetcher: 단거리 블록 알림 핸들러
- txFetcher: 트랜잭션 전파 핸들러
- peers: 활성 피어 세트
- chainSync: 체인 동기화 코디네이터
프로토콜 등록 및 라이프사이클
핸들러 초기화
핸들러 초기화 과정에서 다음이 수행됩니다.- 포크 ID 필터 생성
- downloader, fetcher, peerSet 초기화
- 지원 프로토콜(
eth,snap) 등록 - 브로드캐스트 루프 및 이벤트 구독 설정
피어 프로토콜 라이프사이클
피어가 연결되면 핸들러는 다음 순서로 동작합니다.- P2P 핸드셰이크 완료
eth프로토콜 핸드셰이크 수행- 필요 시
snap프로토콜 추가 핸드셰이크 - peerSet에 원자적으로 등록
- 메시지 처리 루프 시작
runEthPeer 함수에서 관리됩니다.
Snap 프로토콜 확장
snap 프로토콜은 eth 프로토콜 위에서 확장 형태로 동작합니다.
eth핸드셰이크 성공이 선행 조건- 상태 스냅샷 및 trie 데이터 요청 전용 메시지 처리
- downloader의 SnapSync 경로와 직접 연동
메시지 라우팅
프로토콜 메시지 디스패치
프로토콜 핸들러는 수신된 메시지를 유형에 따라 적절한 하위 시스템으로 전달합니다.- 동기화 관련 메시지 → downloader
- 블록 알림 → blockFetcher
- 트랜잭션 → txFetcher / txpool
- 상태 스냅샷 요청 → SnapSyncer
-
트랜잭션 브로드캐스트 루프
새 트랜잭션 이벤트를 수신해 피어로 전파합니다. -
마이닝 블록 브로드캐스트 루프
새 블록 이벤트를 수신해 블록 전파를 수행합니다.
피어 메시지 핸들러
각 프로토콜은 전용 Run 함수에서 메시지를 처리합니다.| Protocol | Handler Function | Message Types |
|---|---|---|
eth/68 | eth.MakeProtocols()[0].Run | 헤더, 본문, 영수증, 트랜잭션, 블록 알림 |
snap/1 | snap.MakeProtocols()[0].Run | 계정 범위, 저장소 범위, 코드, trie 노드 |
블록 및 트랜잭션 브로드캐스팅
블록 브로드캐스팅 전략
블록 전파는 두 단계로 수행됩니다.- √n 개의 피어에게 전체 블록 전송
- 나머지 모든 피어에게 블록 해시 알림 전송
트랜잭션 브로드캐스팅 전략
트랜잭션 유형에 따라 전파 방식이 달라집니다.- 큰 트랜잭션(> 4096 bytes): 해시 알림만 전송
- 일반 트랜잭션: √n 피어에 직접 전송, 나머지에 알림
프로토콜 버전 관리 및 기능
지원 프로토콜
| Protocol | Version | Purpose |
|---|---|---|
eth | 68 | 블록·트랜잭션 동기화 및 전파 |
snap | 1 | 상태 스냅샷 및 trie 데이터 동기화 |
포크 ID 검증
EIP-2124 기반 포크 ID 검증을 통해 체인 호환성을 보장합니다.- 제네시스 해시
- 포크 블록 정보
- 다음 예정 포크
피어 세트 관리
peerSet 역할
peerSet은 활성 피어를 중앙에서 관리합니다.
- eth / snap 프로토콜을 원자적으로 등록
- 피어별 블록·트랜잭션 수신 여부 추적
- 동기화 및 브로드캐스트 대상 선정에 사용
핸들러 라이프사이클
시작 및 중지
Start()
브로드캐스트 루프 및 이벤트 구독 시작Stop()
모든 고루틴 종료 및 피어 정리
하위 시스템과의 통합
Downloader 통합
핸들러는 downloader에 다음을 제공합니다.- 피어 등록 및 제거 알림
- 동기화 시작 트리거
- snap / full 동기화 전환 제어
Fetcher 통합
- blockFetcher: 빠른 블록 알림 처리
- txFetcher: 트랜잭션 중복 방지 및 전파 최적화
오류 처리 및 피어 제거
피어 제거 흐름
다음 경우 피어가 제거됩니다.- 프로토콜 위반
- 포크 ID 불일치
- 반복된 잘못된 응답
- 타임아웃 또는 리소스 남용
요약
go-stablenet의 프로토콜 핸들러는 다음을 담당합니다.- 다중 프로토콜(
eth,snap) 협상 및 관리 - 메시지 라우팅과 하위 시스템 연결
- 효율적인 블록·트랜잭션 브로드캐스팅
- 피어 라이프사이클 및 오류 처리
- P2P 네트워킹과 블록체인 코어의 결합

