Aller au contenu principal

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
ConsensusBFT complet + PoU
StockageRocksDB (requis)
P2PMaillage gossipsub complet
GroupesForme et gère les groupes de lightnodes
Production de blocsNon (coordonne les lightnodes)
RPCOptionnel (fonctionnalité rpc)
ZKPOptionnel (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
ConsensusScore PoU + élection intra-groupe
StockageRocksDB (optionnel sur mobile)
P2PGossipsub + requête-réponse directe
GroupesParticipe aux groupes assignés par le masternode
Production de blocsOui (lorsqu'élu proposant)
RPCOui (port 8545)
MempoolPipeline complet optimisé SIMD

Arguments CLI

ArgumentDéfautDescription
--listen-port4001Port d'écoute P2P
--tx-interval-secs2Intervalle de génération de transactions (0 = vitesse maximale)
--block-interval-secs10Intervalle de production de blocs
--max-block-txs32Nombre maximal de transactions par bloc
--dblightnode.dbChemin de la base de données
--network-key-pathlightnode-network.keyClé d'identité P2P
--producer-key-pathlightnode-producer.keyClé de signature des blocs
--bootstrapAucunPair d'amorçage (PEER_ID@/ip4/IP/tcp/PORT)

Indicateurs de Fonctionnalités

IndicateurDescription
desktopOptimisations bureau (par défaut)
mobileOptimisations mobile (stockage allégé)
rocksdbStockage RocksDB (par défaut)
lightweight-p2pP2P 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
ConsensusAucun (observateur uniquement)
StockageRocksDB (archive complète)
P2PAbonnement uniquement (sans publication)
Production de blocsNon
SurveillanceOui (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œudPort P2PNotes
MN 1-55021-5025Masternodes
LN 1-105001-5010Lightnodes
Générateur TX5029Gé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