Skip to main content

Node Types

Savitri Network supports three node types, each optimized for different roles.

Masternode

Role: Network coordinator, group formation, block acceptance certification.

./target/release/savitri-masternode config/masternode.toml
FeatureDetails
ConsensusFull BFT + PoU
StorageRocksDB (required)
P2PFull gossipsub mesh
GroupsForms and manages lightnode groups
Block productionNo (coordinates lightnodes)
RPCOptional (rpc feature)
ZKPOptional (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"

Key Responsibilities

  • Group formation: Assigns lightnodes to groups based on PoU scores
  • Block acceptance: Verifies Block Acceptance Certificates (BAC) from groups
  • Peer management: Tracks liveness via gossipsub messages, removes inactive nodes after timeout
  • Group announcements: Publishes group assignments every ~30 seconds

Lightnode

Role: Block producer, transaction processor, PoU participant.

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
FeatureDetails
ConsensusPoU scoring + intra-group election
StorageRocksDB (optional on mobile)
P2PGossipsub + direct request-response
GroupsParticipates in masternode-assigned groups
Block productionYes (when elected as proposer)
RPCYes (port 8545)
MempoolFull SIMD-optimized pipeline

CLI Arguments

ArgumentDefaultDescription
--listen-port4001P2P listening port
--tx-interval-secs2Transaction generation interval (0 = max speed)
--block-interval-secs10Block production interval
--max-block-txs32Max transactions per block
--dblightnode.dbDatabase path
--network-key-pathlightnode-network.keyP2P identity key
--producer-key-pathlightnode-producer.keyBlock signing key
--bootstrapNoneBootstrap peer (PEER_ID@/ip4/IP/tcp/PORT)

Feature Flags

FlagDescription
desktopDesktop optimizations (default)
mobileMobile optimizations (lighter storage)
rocksdbRocksDB storage (default)
lightweight-p2pMinimal P2P (fewer topics)

Guardian

Role: Archive/backup node, observer mode (no consensus participation).

./target/release/savitri-guardian
FeatureDetails
ConsensusNone (observer only)
StorageRocksDB (full archive)
P2PSubscribe-only (no publishing)
Block productionNo
MonitoringYes (archive + monitoring features)

Use Cases

  • Full chain archive
  • Data backup and recovery
  • Block explorer data source
  • Analytics and monitoring

Running a Local Network

2 Masternodes + 10 Lightnodes

# Windows
scripts/run_all.bat

# Or manually
./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 (Local Test)

NodeP2P PortNotes
MN 1-55021-5025Masternodes
LN 1-105001-5010Lightnodes
TX Generator5029Transaction generator

Monitoring

# Check running nodes
scripts/check_status.bat

# Stop all
scripts/stop_all.bat

# Prometheus metrics
curl http://localhost:9090/metrics

Docker

# Single masternode
cd savitri-masternode
docker build -t savitri-masternode .
docker run -p 4021:4021 -p 9090:9090 savitri-masternode

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