Seeds and Peers
This guide explains how to configure seed nodes and persistent peers for your Monolythium node.
!!! info "Understanding Peer Roles" For a complete explanation of peer roles (seeds, bootstrap nodes, validators, sentries), see Peer Roles. This page covers configuration; that page explains the concepts.
Understanding Seeds vs Peers
| Type | Purpose | Behavior |
|---|---|---|
| Seeds | Bootstrap peer discovery | Node connects, gets peer list, then disconnects |
| Persistent Peers | Maintained connections | Node keeps connection open continuously |
| Bootstrap Peers | Genesis sync source | Archive nodes used for deterministic sync |
Seeds are used for initial peer discovery. Once your node has discovered peers, it maintains its own address book and no longer needs seeds.
!!! warning "Seeds Cannot Sync Your Node" Seed nodes disconnect immediately after exchanging addresses. They do not serve blocks. If your node is stuck at height 0 with only seeds configured, you need bootstrap or persistent peers. See Peer Roles for details.
Official Seed Nodes
Monolythium provides DNS-based seed nodes that resolve to current seed infrastructure:
Sprintnet
seed1.sprintnet.mononodes.xyz:26656
seed2.sprintnet.mononodes.xyz:26656
seed3.sprintnet.mononodes.xyz:26656
Testnet
seed1.testnet.mononodes.xyz:26656
seed2.testnet.mononodes.xyz:26656
seed3.testnet.mononodes.xyz:26656
Mainnet
seed1.mainnet.mononodes.xyz:26656
seed2.mainnet.mononodes.xyz:26656
seed3.mainnet.mononodes.xyz:26656
Configuring Seeds
Edit ~/.monod/config/config.toml:
[p2p]
# Comma-separated list of seed nodes
seeds = "seed1.sprintnet.mononodes.xyz:26656,seed2.sprintnet.mononodes.xyz:26656,seed3.sprintnet.mononodes.xyz:26656"
Configuring Persistent Peers
For nodes that should maintain constant connections (e.g., sentry nodes to validators):
[p2p]
# Format: node_id@host:port
persistent_peers = "abc123...@peer1.example.com:26656,def456...@peer2.example.com:26656"
!!! tip "Finding Node IDs"
Get a node's ID with: monod tendermint show-node-id
Peer Registry
The official peer registry is maintained at:
https://github.com/monolythium/networks/tree/main/<network>/peers.json
This file contains verified peer information submitted by the community.
Submitting Your Peer
To add your node to the peer registry:
- Ensure your node is stable and publicly accessible
- Get your node ID:
monod tendermint show-node-id - Submit a PR to the networks repository with your peer info
P2P Configuration Options
Key settings in config.toml:
[p2p]
# Listen address for P2P connections
laddr = "tcp://0.0.0.0:26656"
# Address to advertise to peers (if behind NAT)
external_address = "your-public-ip:26656"
# Maximum number of inbound peers
max_num_inbound_peers = 40
# Maximum number of outbound peers
max_num_outbound_peers = 10
# Seed mode (only for seed node operators)
seed_mode = false
# Unconditional peer IDs (always connect regardless of limits)
unconditional_peer_ids = ""
# Private peer IDs (never gossip to other peers)
private_peer_ids = ""
Sentry Node Architecture
For validators, the recommended architecture uses sentry nodes:
Internet
|
+-----------+-----------+
| | |
Sentry1 Sentry2 Sentry3
| | |
+-----------+-----------+
|
Validator
(private)
Validator Configuration
[p2p]
# Only connect to sentries
persistent_peers = "sentry1_id@sentry1:26656,sentry2_id@sentry2:26656"
# Do not expose to public
pex = false
# Keep sentry IDs private
private_peer_ids = "sentry1_id,sentry2_id,sentry3_id"
Sentry Configuration
[p2p]
# Connect to seeds for peer discovery
seeds = "seed1.mainnet.mononodes.xyz:26656,..."
# Always maintain connection to validator
persistent_peers = "validator_id@validator-private-ip:26656"
unconditional_peer_ids = "validator_id"
# Hide validator from other peers
private_peer_ids = "validator_id"
DNS Resolution
Seed hostnames use DNS for service discovery:
- A records point to current seed node IPs
- Updates are transparent - no node config changes needed
- Redundancy through multiple seed endpoints
This allows infrastructure changes without requiring node operators to update configuration.
Troubleshooting
No Peers Found
- Verify seed configuration syntax
- Check DNS resolution:
dig seed1.sprintnet.mononodes.xyz - Ensure port 26656 allows outbound connections
- Check for firewall blocking
Peer Connection Refused
- Verify the peer is online and accessible
- Check you're using the correct node ID
- Ensure the peer's port 26656 is open
Address Book Issues
Reset the address book if corrupted:
# Stop node first
sudo systemctl stop monod
# Remove address book
rm ~/.monod/config/addrbook.json
# Restart
sudo systemctl start monod
External Address Not Detected
If behind NAT, manually set your external address:
[p2p]
external_address = "your-public-ip:26656"
Best Practices
- Use DNS seeds - They're maintained and updated automatically
- Add persistent peers for critical connections (validator-sentry)
- Set external_address if behind NAT or load balancer
- Use private_peer_ids to hide sensitive connections
- Monitor peer count - Healthy nodes typically have 20-50 peers