Bootstrap
Chapter 26: Node Bootstrap & Static Peers
Section titled “Chapter 26: Node Bootstrap & Static Peers”Overview
Section titled “Overview”Bootstrap nodes help new nodes join the network, while static peers provide guaranteed connections. This chapter covers bootnodes, seeds, persistent peers, and how to pin your node to a trusted peer set — plus how that differs across ecosystems.
26.1 Bootnodes
Section titled “26.1 Bootnodes”What are Bootnodes?
Section titled “What are Bootnodes?”Bootnodes are well-known, long-running nodes that help new nodes discover peers. They are the “phone book” of a P2P network: a new node knows a few bootnodes’ addresses out-of-band (hardcoded or configured), asks them for peers, and then leaves.
NEW NODE BOOTNODE PEER NETWORK │ │ │ │ 1. "Who do you know?" │ │ ├───────────────────────────▶│ │ │ │ 2. share peer table │ │◀───────────────────────────┤ │ │ 3. connect directly │ │ ├──────────────────────────────────────────────────────────▶│ │ 4. discovery continues via 5. bootnode drops out │ │ DiscV5 / gossip (connection no longer needed)Ethereum Bootnodes
Section titled “Ethereum Bootnodes”# geth: pass one or more bootnode ENRsgeth --bootnodes "enr:-KG4QOtcL...@bootnode.mainnet.ethdisco.net:30303"
# Multiple bootnodesgeth --bootnodes \ "enr:...@node1:30303,enr:...@node2:30303,enr:...@node3:30303"Bootnodes vs Seeds (Different Ecosystems)
Section titled “Bootnodes vs Seeds (Different Ecosystems)”| Term | Ecosystem | Meaning |
|---|---|---|
| Bootnode | Ethereum | Known ENRs for initial DiscV5 bootstrap |
| Seed | Cosmos/CometBFT, Bitcoin | Known node addresses in config.toml / -seednode that provide peer lists |
| Entrypoint | Solana | Hardcoded gossip addresses (--entrypoint entrypoint.mainnet-beta.solana.com:8001) |
| Well-known peers | Polkadot | Nodes shipped in chain_spec for bootstrapping |
26.2 Static Peers (Ethereum)
Section titled “26.2 Static Peers (Ethereum)”Why Static Peers?
Section titled “Why Static Peers?”- Guaranteed connectivity (independent of discovery)
- Useful for private networks and sentry→validator links
- Backup peers when discovery is unreliable
Configure Static Peers
Section titled “Configure Static Peers”Geth loads static peers from static-nodes.json in the data directory (there is no config.toml for this — and --staticnodes is not a geth flag):
# <datadir>/geth/static-nodes.json# (plain JSON array of enode:// or enr:// URLs)echo '["enode://abc123...@peer1:30303","enode://def456...@peer2:30303"]' \ > /data/ethereum/geth/static-nodes.json
# For older geth versions the file is <datadir>/static-nodes.jsonAdd Dynamically
Section titled “Add Dynamically”geth attach http://localhost:8545> admin.addPeer("enode://abc123...@peer1:30303")# → true> admin.peers26.3 Persistent Peers in Other Ecosystems
Section titled “26.3 Persistent Peers in Other Ecosystems”Cosmos / CometBFT
Section titled “Cosmos / CometBFT”config.toml — persistent_peers are kept regardless of discovery; the sentry architecture depends on them:
[p2p]seeds = "id@seed1:26656,id@seed2:26656"persistent_peers = "id@sentry1:26656,id@sentry2:26656"pex = true # false on a validator behind sentriesBitcoin
Section titled “Bitcoin”bitcoin.conf — -addnode forces a connection even if the peer isn’t useful; -connect restricts to ONLY those peers:
# bitcoin.conf# Add a trusted peer (will try to keep both directions)addnode=1.2.3.4:8333# Restrict all connections to these (private/regtest style):# connect=1.2.3.4:8333Solana
Section titled “Solana”Solana nodes “trust” --known-validator addresses for snapshot + gossip bootstrap instead of persistent peers:
solana-validator --entrypoint entrypoint.mainnet-beta.solana.com:8001 \ --known-validator <KNOWN_VALIDATOR_PUBKEY>26.4 Best Practices
Section titled “26.4 Best Practices”- Always configure multiple bootnodes/seeds — a single hardcoded address is a single point of failure (and a trust risk if compromised).
- Verify the address format before pasting:
enode://<pubkey>@ip:port/enr:for Ethereum,id@host:26656for Cosmos. - Private networks & sentries: use static/persistent peers + disable discovery (
--nodiscover,pex = false) so only your controlled peers join. - After changing peer config, verify with
admin.peers(geth) orcurl localhost:26657/net_info(Cosmos) before declaring the node healthy.
Summary
Section titled “Summary”- Bootnodes for initial peer discovery
- Static peers for guaranteed connections
- Use multiple for redundancy
- Ethereum:
static-nodes.jsonoradmin.addPeer(no--staticnodesflag) - Cosmos:
seeds+persistent_peersin config.toml - Bitcoin:
addnode/connect; Solana:--entrypoint+--known-validator
Last Updated: 2026-09-28