§ 12

§ 12 · Networking

Peers and seeds

How a brand-new node finds its first friends

A node on its own is useless: it can’t hear about new blocks or share its own. It needs peers, other nodes it keeps a connection open with. But a brand-new node, just installed, doesn’t know the address of a single one.

The fix is the same as Bitcoin’s. A few well-known names, the DNS seeds, answer with a list of working nodes. After the first connections, the node learns more addresses from its peers and never needs the seeds again.

Try it

The live state of the network those peers keep in sync: tip height, difficulty and pace.

Pearl, right now

Snapshot from Oct 20, 2026 · asking PRLScan…

Block height
130,827
Difficulty
40.16M
Avg block time · 144
174.3s
Network rate
64.9EMAC/s

Time between the last 20 blocks — 194 s target

Blocks arrive at random: gaps of a few seconds and of ten minutes are both normal. The average is what difficulty steers toward 194 s.

Network rate counts multiply-accumulates per second, not hashes PRLScan · refreshes every minute while visible

Which DNS seeds does Pearl use?

Three, built into pearld for mainnet:

DNS seed
reef
reef.seeder.pearlnetwork.net
DNS seed
tide
tide.seeder.pearlnetwork.net
DNS seed
stream
stream.seeder.pearlnetwork.net

A node looks these names up like any website. Instead of one server’s address, the answer is a handful of IP addresses of Pearl nodes. The node then connects to some of them on port 44108.

Testnet and testnet2 have their own seeds, under seeder.testnet.pearlnetwork.net and seeder.testnet2.pearlnetwork.net.

Which nodes does a seed list?

Pearl’s seeder is a plugin for CoreDNS, a common DNS server, and it’s in Pearl’s repository. It crawls the network in the background and only lists a node that passes every check below. The rules are fixed in code, not configurable:

  1. It completes a handshake

    The seeder connects and swaps version messages, as a real peer would.

  2. It speaks a recent enough protocol

    At least the minimum protocol version, 2.

  3. It's a full node

    It advertises the full-node service bits.

  4. It's on the current chain

    It reports a height at or above the latest checkpoint, which, in the README’s words, “weeds out nodes stranded on a pre-fork chain”.

  5. It listens on the default port

    44108 on mainnet.

Each crawl re-checks the nodes it serves, asks live peers for more addresses with getaddr, and checks those too. A served node that fails two crawls in a row stops being listed and enters a three-hour cooldown.

A DNS answer holds a random sample of up to 25 addresses, and resolvers may cache it for 3,600 seconds, an hour.

What happens after the seeds?

Address gossip, inherited from Bitcoin via btcd:

  • A node asks its peers for addresses with getaddr.
  • Peers answer with addr messages, or addrv2 (BIP-155) once both sides have said sendaddrv2; addrv2 can carry newer address types.
  • The node keeps everything in an address book on disk and picks future peers from it.

So the seeds matter once, at first start. A node that has run for a while can rejoin the network from its address book alone.

What does a node say about itself?

When two nodes connect, after encrypting the connection, each sends a version message. Three fields matter here:

What a pearld node announces
Field Size Description
Protocol version 4 2. pearld refuses peers below 2. Pearl numbers its protocol from scratch; Bitcoin's is in the 70,000s.
Services 8 0xc4d by default: full blocks, bloom filters, witnesses, compact filters, recent blocks, encrypted transport. See nodes.
User agent varies /pearlwire:0.5.0/pearld:1.5.2/: the wire library's version, then the node's. Informational only.

The user agent is the same one Pearl’s public Blockbook reports for its own backend node, so you can see which software the explorer runs. The protocol version and services are what a peer actually relies on.

Make a guess

You run pearld behind a firewall and only open port 44107. Will DNS seeds ever list your node?

Think of your answer first, then check it.

Answer No.

44107 is pearld’s local RPC port. Peers connect on 44108, and the seeder only lists nodes that accept connections on that default P2P port. Your node can still make outgoing connections and stay in sync; it just won’t be handed out to newcomers.

Code: seeds and handshake values

The seeds, from params.go (node/chaincfg/params.go:344-349 at v1.5.2, on GitHub). The false means the seeder doesn’t support filtering by service bits in the DNS name:

node/chaincfg/params.go Go
DefaultPort: "44108",
DNSSeeds: []DNSSeed{
	{"reef.seeder.pearlnetwork.net", false},
	{"tide.seeder.pearlnetwork.net", false},
	{"stream.seeder.pearlnetwork.net", false},
},

The protocol version is set in protocol.go (node/wire/protocol.go:12-16 at v1.5.2, on GitHub) and the minimum in peer.go (node/peer/peer.go:34-44 at v1.5.2, on GitHub), whose comment explains why they move separately: raising both together “would disconnect not-yet-upgraded peers that still share our chain”.

The codex

Suggested

Up and down arrows move through the results, Enter opens one, Escape closes. Anywhere on the site, slash or Command K opens this search, and the square brackets [ and ] go to the previous and next page.