Types de Nœuds
Le réseau Savitri prend en charge trois types de nœuds, chacun optimisé pour des rôles différents.
Masternode
Rôle : Coordinateur réseau, formation des groupes, certification d'acceptation des blocs.
./target/release/savitri-masternode config/masternode.toml
| Fonctionnalité | Détails |
|---|---|
| Consensus | BFT complet + PoU |
| Stockage | RocksDB (requis) |
| P2P | Maillage gossipsub complet |
| Groupes | Forme et gère les groupes de lightnodes |
| Production de blocs | Non (coordonne les lightnodes) |
| RPC | Optionnel (fonctionnalité rpc) |
| ZKP | Optionnel (zkp-plonk, zkp-arkworks) |
Configuration
# 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és Principales
- Formation des groupes : Assigne les lightnodes aux groupes en fonction des scores PoU
- Acceptation des blocs : Vérifie les certificats d'acceptation de blocs (BAC) provenant des groupes
- Gestion des pairs : Surveille l'activité via les messages gossipsub, supprime les nœuds inactifs après expiration du délai
- Annonces de groupes : Publie les affectations de groupes toutes les ~30 secondes
Lightnode
Rôle : Producteur de blocs, processeur de transactions, participant 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
| Fonctionnalité | Détails |
|---|---|
| Consensus | Score PoU + élection intra-groupe |
| Stockage | RocksDB (optionnel sur mobile) |
| P2P | Gossipsub + requête-réponse directe |
| Groupes | Participe aux groupes assignés par le masternode |
| Production de blocs | Oui (lorsqu'élu proposant) |
| RPC | Oui (port 8545) |
| Mempool | Pipeline complet optimisé SIMD |
Arguments CLI
| Argument | Défaut | Description |
|---|---|---|
--listen-port | 4001 | Port d'écoute P2P |
--tx-interval-secs | 2 | Intervalle de génération de transactions (0 = vitesse maximale) |
--block-interval-secs | 10 | Intervalle de production de blocs |
--max-block-txs | 32 | Nombre maximal de transactions par bloc |
--db | lightnode.db | Chemin de la base de données |
--network-key-path | lightnode-network.key | Clé d'identité P2P |
--producer-key-path | lightnode-producer.key | Clé de signature des blocs |
--bootstrap | Aucun | Pair d'amorçage (PEER_ID@/ip4/IP/tcp/PORT) |
Indicateurs de Fonctionnalités
| Indicateur | Description |
|---|---|
desktop | Optimisations bureau (par défaut) |
mobile | Optimisations mobile (stockage allégé) |
rocksdb | Stockage RocksDB (par défaut) |
lightweight-p2p | P2P minimal (moins de sujets) |
Guardian
Rôle : Nœud d'archive/sauvegarde, mode observateur (sans participation au consensus).
./target/release/savitri-guardian
| Fonctionnalité | Détails |
|---|---|
| Consensus | Aucun (observateur uniquement) |
| Stockage | RocksDB (archive complète) |
| P2P | Abonnement uniquement (sans publication) |
| Production de blocs | Non |
| Surveillance | Oui (fonctionnalités d'archive et de monitoring) |
Cas d'Usage
- Archive complète de la chaîne
- Sauvegarde et récupération de données
- Source de données pour l'explorateur de blocs
- Analyse et surveillance
Exécuter un Réseau Local
2 Masternodes + 10 Lightnodes
# Windows
scripts/run_all.bat
# Ou manuellement
./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
Ports (Test Local)
| Nœud | Port P2P | Notes |
|---|---|---|
| MN 1-5 | 5021-5025 | Masternodes |
| LN 1-10 | 5001-5010 | Lightnodes |
| Générateur TX | 5029 | Générateur de transactions |
Surveillance
# Vérifier les nœuds actifs
scripts/check_status.bat
# Arrêter tout
scripts/stop_all.bat
# Métriques Prometheus
curl http://localhost:9090/metrics
Docker
# Masternode unique
cd savitri-masternode
docker build -t savitri-masternode .
docker run -p 4021:4021 -p 9090:9090 savitri-masternode
# Réseau de test complet
cd savitri-testnet
docker-compose up -d
# Grafana : http://localhost:3000