Saltar al contenido principal

Red P2P

Savitri Network utiliza libp2p 0.55 para toda la comunicación entre pares.

Pila de Transporte

CapaTecnología
TransporteTCP
CifradoProtocolo Noise
MultiplexaciónYamux
DescubrimientoKademlia DHT
Pub/SubGossipsub
IdentidadClaves de par Ed25519

Temas de Gossipsub

TemaPublicadorSuscriptorPropósito
/savitri/tx/1LightnodesLightnodes, MasternodesDifusión de transacciones
/savitri/block/1LightnodesTodos los nodosDifusión de bloques
/savitri/consensus/cert/1LightnodesMasternodes, ObserverCertificados de aceptación de bloque
/savitri/peer_registry/1Todos los nodosMasternodesKeepalive / registro de pares
/savitri/lightnode/group/announce/1MasternodesLightnodesAsignaciones de grupo
/savitri/group/{id}/electionMiembros del grupoMiembros del grupoElecciones por grupo

Configuración de Gossipsub

ParámetroLightnodeMasternode
mesh_n88
mesh_n_high1212
mesh_n_low44
mesh_outbound_min33
connection_handler_queue_len50,00050,000
max_transmit_size256 KB256 KB
flood_publishfalsetrue (todos los suscriptores)

Compresión de Mensajes

FormatoEstadoCaso de Uso
snapActivadoMensajes P2P generales
lz4ActivadoRutas de alto rendimiento
zstdDesactivado en MSVCNo utilizado en Windows

Disponibilidad de Pares

Lightnode

  • Compartición de puntuación PoU: Publica vía gossipsub cada 60 segundos
  • Sondeos de latencia: Cada 30 segundos vía P2P directo
  • Heartbeat: Publicación gossipsub en /savitri/peer_registry/1

Masternode

  • Actualización de last_seen: Se actualiza con CUALQUIER mensaje gossipsub de un par
  • Tiempo de espera por inactividad: 600 segundos (configurable por la configuración de MN)
  • cleanup_inactive(): Elimina nodos que superan el tiempo de espera
  • Manejador SlowPeer: Desconecta pares con colas de envío saturadas

Observer

  • Heartbeat de 30 segundos: Publica en /savitri/peer_registry/1
  • Se suscribe a: /savitri/consensus/cert/1 y /savitri/block/1

Bootstrap

Los pares de arranque se configuran en config/bootstrap_nodes.json:

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

Los nodos se conectan a los pares de arranque al iniciarse y descubren pares adicionales mediante Kademlia DHT.

P2P Directo (Solicitud-Respuesta)

Algunas operaciones utilizan comunicación punto a punto directa en lugar de gossipsub:

OperaciónProtocolo
Sondeos de latenciaSolicitud-respuesta directa
ACK de PoURespuesta punto a punto
Candidatos de elecciónP2P directo

Esto evita la sobrecarga O(N^2) de difusión para operaciones que solo necesitan alcanzar pares específicos.

Puertos de Red

PuertoProtocoloServicio
4001TCPP2P (libp2p) por defecto
8333TCPP2P (alternativo)
8545HTTPRPC (JSON-RPC 2.0)
8546WSWebSocket
9090HTTPMétricas Prometheus

Configuración

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

Filtrado de Registros

Para reducir los registros verbosos de gossipsub:

RUST_LOG=info,libp2p_gossipsub::behaviour=error

Esto suprime las advertencias de Cola de Envío que incluyen cargas de mensaje completas (1-2KB cada una, causando registros de más de 120MB).