Discovery
Chapter 24: Node Discovery Protocols
Section titled βChapter 24: Node Discovery ProtocolsβOverview
Section titled βOverviewβDiscovery protocols are essential for blockchain P2P networks as they enable nodes to find and connect to each other without needing pre-configured addresses. This chapter provides comprehensive coverage of how blockchain nodes discover peers, including Ethereumβs DiscV5, DNS discovery, and bootnode infrastructure.
24.1 Discovery Methods Overview
Section titled β24.1 Discovery Methods Overviewβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ DISCOVERY PROTOCOLS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β DISCV5 (Discovery V5) β ββ β β ββ β β’ Current Ethereum discovery protocol β ββ β β’ Kademlia-based DHT β ββ β β’ Supports topic advertisement β ββ β β’ ENR-based node records β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β DNS DISCOVERY β ββ β β ββ β β’ Domain name-based node lists β ββ β β’ Used by many blockchain networks β ββ β β’ Reliable and easy to maintain β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β BOOTNODES β ββ β β ββ β β’ Pre-configured trusted nodes β ββ β β’ Entry point for new nodes β ββ β β’ Fallback when DHT fails β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββComparison of Discovery Methods
Section titled βComparison of Discovery Methodsβ| Method | Type | Complexity | Reliability | Use Case |
|---|---|---|---|---|
| DiscV5 | DHT | High | High | Ethereum mainnet |
| DNS Discovery | Static | Low | Very High | All networks |
| Bootnodes | Static | Low | High | All networks |
| Static Peers | Manual | Very Low | Medium | Private networks |
24.2 DiscV5 Deep Dive
Section titled β24.2 DiscV5 Deep DiveβHow DiscV5 Works
Section titled βHow DiscV5 Worksβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ DISCV5 KADEMLIA DHT ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Each node has a unique node ID (256-bit random number) ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β KADEMLIA TABLE (k-buckets) β ββ β β ββ β Bucket 0: Nodes with very similar ID (distance 0-1) β ββ β Bucket 1: Nodes with distance 1-2 β ββ β Bucket 2: Nodes with distance 2-4 β ββ β ... β ββ β Bucket 255: Nodes with very different ID β ββ β β ββ β Each bucket holds up to k=16 nodes β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ FIND NODE Request: ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β 1. Calculate distance between my ID and target ID β ββ β 2. Query closest nodes in relevant buckets β ββ β 3. Repeat with closer nodes until can't find closer β ββ β 4. Return k closest nodes found β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββEnabling DiscV5
Section titled βEnabling DiscV5β# DiscV5 in geth is enabled with --v5disc (single flag; there are no# --discv5.listenaddr / --discv5.discoverylimit / --discv5.netrestrict flags)geth \ --mainnet \ --v5disc \ --discovery.dns "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7TDOHJ6WW2IRKABVWQXYZRS@nodes.ethereum.org"
# Check discovery status via RPC# eth.nodeInfo returns the ENR; admin.peers shows connected peers
# Lighthouse (Ethereum consensus client) β real flags:lighthouse beacon_node \ --network mainnet \ --discovery-port 9000 \ --enr-address 203.0.113.10 \ --enr-udp-port 9000 \ --enr-tcp-port 9000 \ --disable-upnpENR (Ethereum Node Record)
Section titled βENR (Ethereum Node Record)βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ENR STRUCTURE ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ ENR is a signed, self-certifying record containing: ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β REQUIRED FIELDS: β ββ β βββββββββββββββββββ β ββ β - seq: Sequence number (incremented on each update) β ββ β - id: Protocol identifier (e.g., "v4") β ββ β - secp256k1: Compressed public key β ββ β - ip: IPv4 address β ββ β - tcp: TCP port (optional) β ββ β - udp: UDP port (optional) β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β COMMON OPTIONAL FIELDS: β ββ β ββββββββββββββββββββββββ β ββ β - ip6: IPv6 address β ββ β - tcp6: IPv6 TCP port β ββ β - udp6: IPv6 UDP port β ββ β - eth: Ethereum chain data β ββ β - chainId: Chain identifier β ββ β - network: Network ID β ββ β - genesis: Genesis hash β ββ β - forkId: Current fork identifier β ββ β - attnets: Attestation subnet bits β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ Example ENR: ββ ββββββββββββ ββ enr:-KG4QOtcL...@bootnode.mainnet.ethdisco.net:30303 ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ24.3 DNS Discovery
Section titled β24.3 DNS DiscoveryβHow DNS Discovery Works
Section titled βHow DNS Discovery Worksβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ DNS DISCOVERY WORKFLOW ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ ββββββββββββ βββββββββββββ β New β β DNS ββ β Node β β Server ββ ββββββ¬ββββββ ββββββ¬βββββββ β ββ β 1. Query DNS for ethereum nodes ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββΆββ β ββ β 2. Return list of ENR records ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β 3. Connect to discovered nodes ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββΆββ β ββ DNS Records: ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β nodes.ethereum.org IN TXT "enr:-I..@1.2.3.4:30303" β ββ β nodes.ethereum.org IN TXT "enr:-I..@5.6.7.8:30303" β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββDNS Discovery Implementation
Section titled βDNS Discovery ImplementationβDNS discovery uses an enrtree β a DNS tree of ENR records rooted at a URL like enrtree://<pubkey>@nodes.ethereum.org. Gethβs flag is --discovery.dns (there is no --dns.anchors or --discovery.dnsseg flag):
# Geth with DNS discovery (mainnet tree β the official enrtree URL)geth \ --mainnet \ --discovery.dns "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7TDOHJ6WW2IRKABVWQXYZRS@nodes.ethereum.org"
# Multiple trees (comma-separated)geth \ --mainnet \ --discovery.dns "enrtree://...@nodes.ethereum.org,enrtree://...@all.mainnet.ethdisco.net"DNS Record Format
Section titled βDNS Record Formatβ# TXT record format for the root β points to subdomains (one per link tree)nodes.example.com IN TXT "enrtree-root:v1 e=<root-b64> l=<link-b64> seq=<n> sig=<sig-b64>"
# Deeper TXT records hold the actual ENR values:nodes.example.com IN TXT "enr:-KG4QOtcL..."Running your own DNS discovery tree requires the
devp2pCLI tool (devp2p dns to-cloudflare/devp2p dns sync) β see the Ethereum DevP2P docs.
24.4 Bootnodes
Section titled β24.4 BootnodesβPurpose and Function
Section titled βPurpose and Functionβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ BOOTNODE ARCHITECTURE ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Bootnodes serve as entry points to the P2P network: ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β NEW NODE β ββ β (has no peers) β ββ ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β BOOTNODE β ββ β (well-known, always online) β ββ β β ββ β Mainnet Bootnodes: β ββ β ββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β β enr:-KG4QO...@bootnode1.ethdisco.net:30303 β β ββ β β enr:-L4sU...@bootnode2.ethdisco.net:30303 β β ββ β β enr:-LK4UC...@bootnode3.ethdisco.net:30303 β β ββ β ββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β FULL P2P NETWORK β ββ β β ββ β New node now has peers and can continue discovering β ββ β more peers through the network β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββUsing Bootnodes
Section titled βUsing Bootnodesβ# Default bootnodes (built into client)geth --mainnet
# Custom bootnodesgeth \ --mainnet \ --bootnodes "enr:-KG4QO...@1.2.3.4:30303,enr:-LK4UC...@5.6.7.8:30303"
# Bootnodes for different networks# Goerligeth --goerli --bootnodes "enr:-K64Q..."
# Sepoliageth --sepolia --bootnodes "enr:-MS4L..."
# Run your own bootnodebootnode \ --nodekey /path/to/nodekey \ --addr 0.0.0.0:30303 \ --writeaddress # Print ENR to usePublic Bootnode Lists
Section titled βPublic Bootnode Listsβ| Network | DNS Discovery | ENR List |
|---|---|---|
| Ethereum Mainnet | nodes.ethereum.org | ethdisco.net |
| Goerli | nodes.goerli.ethdevops.io | - |
| Sepolia | nodes.sepolia.ethdevops.io | - |
24.5 Peer Discovery Best Practices
Section titled β24.5 Peer Discovery Best PracticesβTroubleshooting Discovery Issues
Section titled βTroubleshooting Discovery Issuesβ# Check if node is discoverablegeth attach http://localhost:8545# Then run:admin.nodeInfo.enr
# Check connected peers (net.peerCount β eth.peerCount does not exist)net.peerCount
# Check discovery service logsjournalctl -u geth | grep -i discv5journalctl -u geth | grep -i discovery
# Test DNS resolutiondig nodes.ethereum.orgnslookup bootnode.mainnet.ethdisco.netCommon Issues and Solutions
Section titled βCommon Issues and Solutionsβ| Issue | Cause | Solution |
|---|---|---|
| No peers found | Discovery disabled | Enable --v5disc or --discovery.dns |
| Firewall blocking | UDP blocked | Allow UDP 30303 |
| Wrong network | Using testnet bootnodes on mainnet | Use correct bootnode list |
| NAT issue | Port not forwarded | Configure port forwarding |
24.6 Interview Questions
Section titled β24.6 Interview Questionsβ| Question | Answer |
|---|---|
| What is DiscV5? | Ethereumβs Kademlia-based discovery protocol |
| What is an ENR? | Ethereum Node Record - self-certifying node metadata |
| How do bootnodes work? | Pre-configured nodes that new nodes connect to initially |
| What is DNS discovery? | Using DNS TXT records to find node ENR addresses |
| Why is peer discovery important? | Enables decentralized network without central servers |
Summary
Section titled βSummaryβ- DiscV5 is the primary Ethereum discovery protocol
- DNS discovery provides reliable fallback
- Bootnodes are essential for network entry
- ENR contains all node metadata
- Proper configuration ensures good network connectivity
Next Chapter
Section titled βNext ChapterβIn Chapter 25: Network Ports & Firewall Configuration, weβll explore port configuration and security.
Last Updated: 2026-02-20