P2P Service Settings¶
Related Topic: P2P Service
Configuration Settings¶
| Setting | Type | Default | Environment Variable | Usage |
|---|---|---|---|---|
| BootstrapPeers | []string | [] (settings.conf ships with /dnsaddr/${network}.bootstrap.teranode.bsvb.tech) |
p2p_bootstrap_peers | Peer discovery entry points (required for dht_mode "off" and "client") |
| GRPCAddress | string | "" | p2p_grpcAddress | gRPC client connections |
| GRPCListenAddress | string | ":9906" (Go default; overridden to :9904 by settings.conf via P2P_GRPC_PORT) |
p2p_grpcListenAddress | CRITICAL - gRPC server binding |
| HTTPAddress | string | "localhost:9906" | p2p_httpAddress | HTTP client connections |
| HTTPListenAddress | string | "" | p2p_httpListenAddress | HTTP server binding |
| ListenAddresses | []string | [] | p2p_listen_addresses | P2P network interfaces |
| AdvertiseAddresses | []string | [] | p2p_advertise_addresses | Address advertisement to peers |
| ListenMode | string | "full" | listen_mode | Node operation mode ("full" or "listen_only") |
| PeerID | string | "" | p2p_peer_id | Peer network identifier |
| Port | int | 9905 | p2p_port | Default P2P communication port (multiaddrs in ListenAddresses/AdvertiseAddresses are the source of truth) |
| PrivateKey | string | "" | p2p_private_key | CRITICAL - Cryptographic peer identity |
| BlockTopic | string | "" | p2p_block_topic | Block propagation topic |
| NodeStatusTopic | string | "" | p2p_node_status_topic | Node status communication topic |
| RejectedTxTopic | string | "" | p2p_rejected_tx_topic | Rejected transaction topic |
| SubtreeTopic | string | "" | p2p_subtree_topic | Subtree propagation topic |
| StaticPeers | []string | [] | p2p_static_peers | Forced peer connections |
| PeerCacheDir | string | "" | p2p_peer_cache_dir | Peer cache directory |
| BanThreshold | int | 100 | p2p_ban_threshold | Peer banning threshold |
| BanDuration | time.Duration | 24h | p2p_ban_duration | Ban duration |
| ForceSyncPeer | string | "" | p2p_force_sync_peer | CRITICAL - Forced sync peer override |
| SharePrivateAddresses | bool | true | p2p_share_private_addresses | Private address advertisement |
| AllowPrunedNodeFallback | bool | true | p2p_allow_pruned_node_fallback | CRITICAL - Pruned node fallback behavior |
| DHTMode | string | "server" (Code default; settings.conf ships with "off") | p2p_dht_mode | DHT operation mode ("server", "client", or "off") |
| DHTCleanupInterval | time.Duration | 24h | p2p_dht_cleanup_interval | DHT provider record cleanup interval |
| EnableNAT | bool | false | p2p_enable_nat | CRITICAL - UPnP/NAT-PMP port mapping (triggers network scanning) |
| EnableMDNS | bool | false | p2p_enable_mdns | CRITICAL - mDNS peer discovery (triggers network scanning) |
| AllowPrivateIPs | bool | false | p2p_allow_private_ips | CRITICAL - Allow RFC1918 private IP connections |
| SyncCoordinatorPeriodicEvaluationInterval | time.Duration | 30s | p2p_sync_coordinator_periodic_evaluation_interval | Sync coordinator evaluation interval |
| HealthCheckEnabled | bool | true | p2p_health_check_enabled | Enable HTTP availability checking during peer selection |
| PeerMapMaxSize | int | 100000 | p2p_peer_map_max_size | Maximum entries in peer maps |
| PeerMapTTL | time.Duration | 30m | p2p_peer_map_ttl | Peer map entry time-to-live |
| PeerMapCleanupInterval | time.Duration | 5m | p2p_peer_map_cleanup_interval | Peer map cleanup frequency |
Configuration Dependencies¶
Forced Sync Peer Selection¶
ForceSyncPeeroverrides automatic peer selectionAllowPrunedNodeFallbackaffects fallback behavior when forced peer unavailable
Network Address Management¶
ListenAddressesandAdvertiseAddressescontrol network presencePortused as fallback when addresses don't specify portSharePrivateAddressescontrols address advertisement behavior
Peer Connection Management¶
StaticPeersensures persistent connectionsPeerCacheDirfor peer persistence
Peer Map Management¶
PeerMapMaxSizelimits memory usage for block/subtree peer trackingPeerMapTTLcontrols peer map entry expiration (30 minutes)PeerMapCleanupIntervalsets cleanup frequency (5 minutes)- These settings have sensible defaults but can be overridden via environment variables
Network Scanning Prevention¶
EnableNATtriggers UPnP gateway scans (disable on shared hosting)EnableMDNStriggers LAN broadcasts (disable on shared hosting)AllowPrivateIPsallows RFC1918 connections (disable for production)
Service Dependencies¶
| Dependency | Interface | Usage |
|---|---|---|
| BlockchainClient | blockchain.ClientI | CRITICAL - Blockchain operations and block retrieval |
| BlockAssemblyClient | blockassembly.ClientI | CRITICAL - Block assembly operations |
| RejectedTxKafkaConsumer | kafka.KafkaConsumerGroupI | CRITICAL - Consuming rejected transaction notifications |
| InvalidBlocksKafkaConsumer | kafka.KafkaConsumerGroupI | CRITICAL - Consuming invalid block notifications |
| InvalidSubtreeKafkaConsumer | kafka.KafkaConsumerGroupI | CRITICAL - Consuming invalid subtree notifications |
| BlocksKafkaProducer | kafka.KafkaAsyncProducerI | CRITICAL - Publishing block announcements |
| SubtreeKafkaProducer | kafka.KafkaAsyncProducerI | CRITICAL - Publishing subtree announcements |
Validation Rules¶
| Setting | Validation | Impact | When Checked |
|---|---|---|---|
| ListenMode | Must be "full" or "listen_only" | Service fails to start if invalid | During server initialization |
| GRPCListenAddress | Used for gRPC server binding | Service communication | During server start |
| ForceSyncPeer | Overrides automatic peer selection | Sync behavior | During sync coordinator initialization |
| EnableNAT | Triggers network scanning on shared hosting | Security alerts | During libp2p host initialization |
| EnableMDNS | Triggers network scanning on shared hosting | Security alerts | During libp2p host initialization |
Configuration Examples¶
Basic Configuration¶
# Note: settings.conf sets P2P_GRPC_PORT=9904, overriding the Go default of :9906
p2p_grpcListenAddress=:9904
p2p_port=9905
listen_mode=full
Forced Sync Configuration¶
p2p_force_sync_peer=peer-id-12345
p2p_allow_pruned_node_fallback=true
p2p_sync_coordinator_periodic_evaluation_interval=30s
DHT Configuration¶
The DHT (Distributed Hash Table) can operate in three modes:
# Server mode - full DHT participation: advertises on DHT, stores provider
# records, routes queries for other peers
p2p_dht_mode=server
p2p_dht_cleanup_interval=24h
# Client mode - query-only, no provider storage (reduces network overhead)
p2p_dht_mode=client
# Off - no DHT at all; topic-only network (settings.conf default)
p2p_dht_mode=off
When to use server mode:
- Publicly dialable nodes that should strengthen the network with direct connections
- Required for inclusion in the BSV Association DNS bootstrap pool (contact BSVA)
- Highest resource usage; pair with explicit
p2p_advertise_addresses— see How to Expose the P2P Service Publicly (Kubernetes)
When to use client mode:
- Nodes that don't need to be discoverable by others
- Reduced network overhead and storage requirements
- Behind restrictive NAT/firewall
When to use off:
- Most lightweight: no DHT crawling, no random connections; peer addresses come from bootstrap servers
- Recommended for abuse-sensitive hosting providers (e.g. Hetzner, OVH) —
serverandclientmodes connect to 100+ semi-random IPs, which these providers may flag as network scanning and answer with abuse warnings or suspension - The node still participates fully in block and transaction propagation via topics
Peer Registry Configuration¶
The peer registry persists peer reputation data across restarts:
# Directory for peer cache file (default: binary directory)
p2p_peer_cache_dir=/var/lib/teranode/p2p
Network Security Configuration¶
IMPORTANT: These settings can trigger network scanning alerts on shared hosting.
# Enable only on private/local networks
p2p_enable_nat=false # UPnP/NAT-PMP port mapping
p2p_enable_mdns=false # mDNS peer discovery
p2p_allow_private_ips=false # RFC1918 private networks
Peer Selection and Reputation¶
For details on how peer selection and reputation scoring work, see Peer Registry and Reputation System.
Key settings affecting peer selection:
p2p_force_sync_peer- Override automatic selection with specific peerp2p_allow_pruned_node_fallback- Whether to fall back to pruned nodesp2p_peer_cache_dir- Where peer reputation data is persisted