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ística | Detalles |
|---|---|
| Consenso | BFT completo + PoU |
| Almacenamiento | RocksDB (requerido) |
| P2P | Malla gossipsub completa |
| Grupos | Forma y gestiona grupos de lightnodes |
| Producción de bloques | No (coordina lightnodes) |
| RPC | Opcional (característica rpc) |
| ZKP | Opcional (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ística | Detalles |
|---|---|
| Consenso | Puntuación PoU + elección intra-grupo |
| Almacenamiento | RocksDB (opcional en móvil) |
| P2P | Gossipsub + solicitud-respuesta directa |
| Grupos | Participa en grupos asignados por el masternode |
| Producción de bloques | Sí (cuando es elegido como proponente) |
| RPC | Sí (puerto 8545) |
| Mempool | Pipeline completo optimizado con SIMD |
Argumentos de CLI
| Argumento | Predeterminado | Descripción |
|---|---|---|
--listen-port | 4001 | Puerto de escucha P2P |
--tx-interval-secs | 2 | Intervalo de generación de transacciones (0 = velocidad máxima) |
--block-interval-secs | 10 | Intervalo de producción de bloques |
--max-block-txs | 32 | Máximo de transacciones por bloque |
--db | lightnode.db | Ruta de la base de datos |
--network-key-path | lightnode-network.key | Clave de identidad P2P |
--producer-key-path | lightnode-producer.key | Clave de firma de bloques |
--bootstrap | Ninguno | Par de arranque (PEER_ID@/ip4/IP/tcp/PUERTO) |
Banderas de Características
| Bandera | Descripción |
|---|---|
desktop | Optimizaciones para escritorio (predeterminado) |
mobile | Optimizaciones para móvil (almacenamiento más ligero) |
rocksdb | Almacenamiento RocksDB (predeterminado) |
lightweight-p2p | P2P mínimo (menos temas) |
Guardian
Rol: Nodo de archivo/respaldo, modo observador (sin participación en consenso).
./target/release/savitri-guardian
| Característica | Detalles |
|---|---|
| Consenso | Ninguno (solo observador) |
| Almacenamiento | RocksDB (archivo completo) |
| P2P | Solo suscripción (sin publicación) |
| Producción de bloques | No |
| Monitoreo | Sí (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)
| Nodo | Puerto P2P | Notas |
|---|---|---|
| MN 1-5 | 5021-5025 | Masternodes |
| LN 1-10 | 5001-5010 | Lightnodes |
| Generador de TX | 5029 | Generador 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