메인 콘텐츠로 건너뛰기

P2P 네트워킹

Savitri Network는 모든 피어 간 통신에 libp2p 0.55를 사용합니다.

전송 스택

레이어기술
전송TCP
암호화Noise 프로토콜
멀티플렉싱Yamux
탐색Kademlia DHT
Pub/SubGossipsub
신원Ed25519 피어 키

Gossipsub 토픽

토픽발행자구독자목적
/savitri/tx/1LightnodeLightnode, Masternode트랜잭션 브로드캐스트
/savitri/block/1Lightnode모든 노드블록 브로드캐스트
/savitri/consensus/cert/1LightnodeMasternode, Observer블록 수락 인증서
/savitri/peer_registry/1모든 노드Masternode피어 킵얼라이브 / 등록
/savitri/lightnode/group/announce/1MasternodeLightnode그룹 배정
/savitri/group/{id}/election그룹 구성원그룹 구성원그룹별 선거

Gossipsub 설정

매개변수LightnodeMasternode
mesh_n88
mesh_n_high1212
mesh_n_low44
mesh_outbound_min33
connection_handler_queue_len50,00050,000
max_transmit_size256 KB256 KB
flood_publishfalsetrue (모든 구독자)

메시지 압축

형식상태사용 사례
snap활성화일반 P2P 메시지
lz4활성화고처리량 경로
zstdMSVC에서 비활성화Windows에서 미사용

피어 활성 상태

Lightnode

  • PoU 점수 공유: 60초마다 gossipsub을 통해 발행
  • 지연 프로브: 직접 P2P로 30초마다
  • 하트비트: /savitri/peer_registry/1에 gossipsub 발행

Masternode

  • last_seen 업데이트: 피어로부터 gossipsub 메시지를 받을 때마다 업데이트
  • 비활성 타임아웃: 600초 (MN 설정에서 구성 가능)
  • cleanup_inactive(): 타임아웃을 초과한 노드 제거
  • SlowPeer 핸들러: 전송 큐가 포화된 피어 연결 해제

Observer

  • 30초마다 하트비트: /savitri/peer_registry/1에 발행
  • 구독: /savitri/consensus/cert/1/savitri/block/1

부트스트랩

부트스트랩 피어는 config/bootstrap_nodes.json에서 설정합니다:

[
{
"peer_id": "12D3KooW...",
"address": "/ip4/3.120.x.x/tcp/4001"
}
]

노드는 시작 시 부트스트랩 피어에 연결하고 Kademlia DHT를 통해 추가 피어를 발견합니다.

직접 P2P (요청-응답)

일부 작업은 gossipsub 대신 직접 피어 간 통신을 사용합니다:

작업프로토콜
지연 프로브직접 요청-응답
PoU ACK점대점 응답
선거 후보자직접 P2P

이를 통해 특정 피어에만 도달하면 되는 작업에서 브로드캐스트의 O(N^2) 비용을 피할 수 있습니다.

네트워크 포트

포트프로토콜서비스
4001TCPP2P (libp2p) 기본값
8333TCPP2P (대안)
8545HTTPRPC (JSON-RPC 2.0)
8546WSWebSocket
9090HTTPPrometheus 메트릭

설정

config/development.toml

[network]
max_peers = 10
block_time_secs = 2
max_tps = 100
group_size = 3

config/production.toml

[network]
max_peers = 50
block_time_secs = 5
max_tps = 1000
group_size = 7
slashing_enabled = true

로그 필터링

gossipsub의 장황한 로그를 줄이려면:

RUST_LOG=info,libp2p_gossipsub::behaviour=error

이렇게 하면 전체 메시지 페이로드를 포함하는 전송 큐 경고(각 1-2 KB, 120MB+ 로그 유발)가 억제됩니다.