Passa al contenuto principale

Rete P2P

Savitri Network utilizza libp2p 0.55 per tutte le comunicazioni peer-to-peer.

Stack di Trasporto

LivelloTecnologia
TrasportoTCP
CifraturaProtocollo Noise
MultiplexingYamux
ScopertaKademlia DHT
Pub/SubGossipsub
IdentitàChiavi peer Ed25519

Topic Gossipsub

TopicPubblicatoreSottoscrittoreScopo
/savitri/tx/1LightnodesLightnodes, MasternodesBroadcast transazioni
/savitri/block/1LightnodesTutti i nodiBroadcast blocchi
/savitri/consensus/cert/1LightnodesMasternodes, ObserverCertificati di accettazione blocco
/savitri/peer_registry/1Tutti i nodiMasternodesKeepalive peer / registrazione
/savitri/lightnode/group/announce/1MasternodesLightnodesAssegnazioni di gruppo
/savitri/group/{id}/electionMembri del gruppoMembri del gruppoElezioni per gruppo

Configurazione Gossipsub

ParametroLightnodeMasternode
mesh_n88
mesh_n_high1212
mesh_n_low44
mesh_outbound_min33
connection_handler_queue_len50.00050.000
max_transmit_size256 KB256 KB
flood_publishfalsetrue (tutti i sottoscrittori)

Compressione dei Messaggi

FormatoStatoCaso d'uso
snapAbilitatoMessaggi P2P generali
lz4AbilitatoPercorsi ad alto throughput
zstdDisabilitato su MSVCNon utilizzato su Windows

Liveness dei Peer

Lightnode

  • Condivisione punteggio PoU: Pubblica tramite gossipsub ogni 60 secondi
  • Sonde di latenza: Ogni 30 secondi tramite P2P diretto
  • Heartbeat: Pubblicazione gossipsub su /savitri/peer_registry/1

Masternode

  • Aggiornamento last_seen: Aggiornato ad OGNI messaggio gossipsub da un peer
  • Timeout inattività: 600 secondi (configurabile nella configurazione MN)
  • cleanup_inactive(): Rimuove i nodi che superano il timeout
  • Gestore SlowPeer: Disconnette i peer con code di invio saturate

Observer

  • Heartbeat ogni 30 secondi: Pubblica su /savitri/peer_registry/1
  • Si iscrive a: /savitri/consensus/cert/1 e /savitri/block/1

Bootstrap

I peer di bootstrap sono configurati in config/bootstrap_nodes.json:

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

I nodi si connettono ai peer di bootstrap all'avvio e scoprono ulteriori peer tramite Kademlia DHT.

P2P Diretto (Richiesta-Risposta)

Alcune operazioni utilizzano la comunicazione peer-to-peer diretta invece di gossipsub:

OperazioneProtocollo
Sonde di latenzaRichiesta-risposta diretta
ACK PoURisposta punto a punto
Candidati all'elezioneP2P diretto

Questo evita il costo O(N^2) del broadcast per operazioni che devono raggiungere solo peer specifici.

Porte di Rete

PortaProtocolloServizio
4001TCPP2P (libp2p) predefinito
8333TCPP2P (alternativo)
8545HTTPRPC (JSON-RPC 2.0)
8546WSWebSocket
9090HTTPMetriche Prometheus

Configurazione

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

Filtraggio dei Log

Per ridurre i log gossipsub prolissi:

RUST_LOG=info,libp2p_gossipsub::behaviour=error

Questo sopprime gli avvisi della coda di invio che includono i payload completi dei messaggi (1-2 KB ciascuno, causando log da 120MB+).