Saltar al contenido principal

Tipos de Nodo

Savitri Network soporta tres tipos de nodo, cada uno optimizado para diferentes roles.

Masternode

Rol: Coordinador de red, formación de grupos, certificación de aceptación de bloques.

./target/release/savitri-masternode config/masternode.toml
CaracterísticaDetalles
ConsensoBFT completo + PoU
AlmacenamientoRocksDB (requerido)
P2PMalla gossipsub completa
GruposForma y gestiona grupos de lightnodes
Producción de bloquesNo (coordina lightnodes)
RPCOpcional (característica rpc)
ZKPOpcional (zkp-plonk, zkp-arkworks)

Configuración

# config/masternode/mn-1.toml
[network]
listen_port = 5021
max_peers = 50
group_size = 7
group_node_timeout_secs = 600

[consensus]
block_time_secs = 5
slashing_enabled = true

[storage]
db_path = "data/mn1"

Responsabilidades Principales

  • Formación de grupos: Asigna lightnodes a grupos según las puntuaciones PoU
  • Aceptación de bloques: Verifica los Certificados de Aceptación de Bloque (BAC) de los grupos
  • Gestión de pares: Rastrea la actividad mediante mensajes gossipsub, elimina nodos inactivos tras el tiempo de espera
  • Anuncios de grupos: Publica asignaciones de grupos cada ~30 segundos

Lightnode

Rol: Productor de bloques, procesador de transacciones, participante en PoU.

cargo run -p savitri-lightnode --bin lightnode -- \
--listen-port 4001 \
--tx-interval-secs 2 \
--block-interval-secs 10 \
--max-block-txs 32 \
--bootstrap PEER_ID@/ip4/127.0.0.1/tcp/5021
CaracterísticaDetalles
ConsensoPuntuación PoU + elección intra-grupo
AlmacenamientoRocksDB (opcional en móvil)
P2PGossipsub + solicitud-respuesta directa
GruposParticipa en grupos asignados por el masternode
Producción de bloquesSí (cuando es elegido como proponente)
RPCSí (puerto 8545)
MempoolPipeline completo optimizado con SIMD

Argumentos de CLI

ArgumentoPredeterminadoDescripción
--listen-port4001Puerto de escucha P2P
--tx-interval-secs2Intervalo de generación de transacciones (0 = velocidad máxima)
--block-interval-secs10Intervalo de producción de bloques
--max-block-txs32Máximo de transacciones por bloque
--dblightnode.dbRuta de la base de datos
--network-key-pathlightnode-network.keyClave de identidad P2P
--producer-key-pathlightnode-producer.keyClave de firma de bloques
--bootstrapNingunoPar de arranque (PEER_ID@/ip4/IP/tcp/PUERTO)

Banderas de Características

BanderaDescripción
desktopOptimizaciones para escritorio (predeterminado)
mobileOptimizaciones para móvil (almacenamiento más ligero)
rocksdbAlmacenamiento RocksDB (predeterminado)
lightweight-p2pP2P mínimo (menos temas)

Guardian

Rol: Nodo de archivo/respaldo, modo observador (sin participación en consenso).

./target/release/savitri-guardian
CaracterísticaDetalles
ConsensoNinguno (solo observador)
AlmacenamientoRocksDB (archivo completo)
P2PSolo suscripción (sin publicación)
Producción de bloquesNo
MonitoreoSí (características de archivo y monitoreo)

Casos de Uso

  • Archivo completo de la cadena
  • Copia de seguridad y recuperación de datos
  • Fuente de datos para explorador de bloques
  • Análisis y monitoreo

Ejecutar una Red Local

2 Masternodes + 10 Lightnodes

# Windows
scripts/run_all.bat

# O manualmente
./target/release/savitri-masternode exucutables/configs/masternode/mn-1.toml &
./target/release/savitri-masternode exucutables/configs/masternode/mn-2.toml &

for i in $(seq 1 10); do
cargo run -p savitri-lightnode --bin lightnode -- \
--listen-port $((5000 + i)) \
--db "lightnode${i}.db" \
--bootstrap PEER_ID@/ip4/127.0.0.1/tcp/5021 &
done

Puertos (Prueba Local)

NodoPuerto P2PNotas
MN 1-55021-5025Masternodes
LN 1-105001-5010Lightnodes
Generador de TX5029Generador de transacciones

Monitoreo

# Verificar nodos en ejecución
scripts/check_status.bat

# Detener todos
scripts/stop_all.bat

# Métricas de Prometheus
curl http://localhost:9090/metrics

Docker

# Masternode único
cd savitri-masternode
docker build -t savitri-masternode .
docker run -p 4021:4021 -p 9090:9090 savitri-masternode

# Testnet completo
cd savitri-testnet
docker-compose up -d
# Grafana: http://localhost:3000