Tipi di Nodo
Savitri Network supporta tre tipi di nodo, ognuno ottimizzato per ruoli differenti.
Masternode
Ruolo: Coordinatore di rete, formazione dei gruppi, certificazione dell'accettazione dei blocchi.
./target/release/savitri-masternode config/masternode.toml
| Funzionalità | Dettagli |
|---|---|
| Consenso | BFT completo + PoU |
| Archiviazione | RocksDB (obbligatoria) |
| P2P | Mesh gossipsub completo |
| Gruppi | Forma e gestisce i gruppi di lightnode |
| Produzione blocchi | No (coordina i lightnode) |
| RPC | Opzionale (funzionalità rpc) |
| ZKP | Opzionale (zkp-plonk, zkp-arkworks) |
Configurazione
# 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"
Responsabilità Principali
- Formazione dei gruppi: Assegna i lightnode ai gruppi in base ai punteggi PoU
- Accettazione dei blocchi: Verifica i Certificati di Accettazione dei Blocchi (BAC) dai gruppi
- Gestione dei peer: Monitora l'attività tramite messaggi gossipsub, rimuove i nodi inattivi dopo il timeout
- Annunci di gruppo: Pubblica le assegnazioni di gruppo ogni ~30 secondi
Lightnode
Ruolo: Produttore di blocchi, elaboratore di transazioni, partecipante 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
| Funzionalità | Dettagli |
|---|---|
| Consenso | Punteggio PoU + elezione intra-gruppo |
| Archiviazione | RocksDB (opzionale su mobile) |
| P2P | Gossipsub + richiesta-risposta diretta |
| Gruppi | Partecipa ai gruppi assegnati dal masternode |
| Produzione blocchi | Sì (quando eletto come propositore) |
| RPC | Sì (porta 8545) |
| Mempool | Pipeline SIMD-ottimizzata completa |
Argomenti CLI
| Argomento | Predefinito | Descrizione |
|---|---|---|
--listen-port | 4001 | Porta di ascolto P2P |
--tx-interval-secs | 2 | Intervallo di generazione transazioni (0 = velocità massima) |
--block-interval-secs | 10 | Intervallo di produzione blocchi |
--max-block-txs | 32 | Numero massimo di transazioni per blocco |
--db | lightnode.db | Percorso del database |
--network-key-path | lightnode-network.key | Chiave di identità P2P |
--producer-key-path | lightnode-producer.key | Chiave di firma blocchi |
--bootstrap | Nessuno | Peer di bootstrap (PEER_ID@/ip4/IP/tcp/PORT) |
Flag di Funzionalità
| Flag | Descrizione |
|---|---|
desktop | Ottimizzazioni per desktop (predefinito) |
mobile | Ottimizzazioni per mobile (archiviazione ridotta) |
rocksdb | Archiviazione RocksDB (predefinita) |
lightweight-p2p | P2P minimale (meno topic) |
Guardian
Ruolo: Nodo archivio/backup, modalità osservatore (nessuna partecipazione al consenso).
./target/release/savitri-guardian
| Funzionalità | Dettagli |
|---|---|
| Consenso | Nessuno (solo osservatore) |
| Archiviazione | RocksDB (archivio completo) |
| P2P | Solo sottoscrizione (nessuna pubblicazione) |
| Produzione blocchi | No |
| Monitoraggio | Sì (funzionalità di archivio e monitoraggio) |
Casi d'Uso
- Archivio completo della catena
- Backup e ripristino dei dati
- Fonte dati per block explorer
- Analisi e monitoraggio
Avviare una Rete Locale
2 Masternode + 10 Lightnode
# Windows
scripts/run_all.bat
# Oppure 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
Porte (Test Locale)
| Nodo | Porta P2P | Note |
|---|---|---|
| MN 1-5 | 5021-5025 | Masternode |
| LN 1-10 | 5001-5010 | Lightnode |
| Generatore TX | 5029 | Generatore di transazioni |
Monitoraggio
# Verifica i nodi in esecuzione
scripts/check_status.bat
# Ferma tutti
scripts/stop_all.bat
# Metriche Prometheus
curl http://localhost:9090/metrics
Docker
# Singolo masternode
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