go-ethereum/p2p/discover
Csaba Kiraly b026ef6bb7
p2p/discover: drop discv4 prefix-bit grind from CrawlIterator
The original CrawlIterator on the discv4 path generated FINDNODE targets
by grinding random pubkeys until their Keccak256 had a specific top-N-bit
prefix matching a per-call rotation index, then sending them. The aim was
to anchor each peer's response to a different /16 region of the global
keyspace.

Empirically (3 x 5-minute runs against mainnet bootnodes):

    mode          total mean ± std    mainnet mean ± std
    fast (grind)  5714 ± 117          549 ±  33
    fast-random   5306 ± 366          521 ± 124

Means are within 1σ of each other. The grind's only measurable benefit
is reduced run-to-run variance, not higher yield. For long-running
curated crawls (the production use case for cmd/devp2p) the variance
amortises away, so the simplification is worth taking.

Replace the grind with a plain crand.Read on the v4 target, drop the
randomTargetWithPrefix helper, log2Pow2 helper, and the v4-side
prefix-bit math from withDefaults. Drange becomes a v5-only knob and
its doc is updated to say so; the power-of-two requirement is gone.

discv5 is unchanged: it uses native distance rotation, not target
hashes, and was never affected by the grind.
2026-05-07 14:41:58 +02:00
..
v4wire p2p/discover: refactor node and endpoint representation (#29844) 2024-05-29 15:02:26 +02:00
v5wire p2p/discover/v5wire: use Whoareyou.ChallengeData instead of storing encoded packet (#31547) 2026-02-22 21:58:47 +01:00
common.go p2p/discover: fix timeout loop early exit when removing expired matchers (#34743) 2026-04-28 10:57:58 +02:00
crawliter.go p2p/discover: drop discv4 prefix-bit grind from CrawlIterator 2026-05-07 14:41:58 +02:00
crawliter_test.go p2p/discover: add CrawlIterator for breadth-first FINDNODE walks 2026-05-07 14:41:58 +02:00
lookup.go p2p/discover: remove hot-spin in table refresh trigger (#32912) 2025-10-15 11:51:33 +02:00
metrics.go metrics, cmd/geth: change init-process of metrics (#30814) 2024-12-10 13:27:29 +01:00
node.go p2p/discover: remove type encPubkey (#30172) 2024-07-18 11:09:02 +02:00
ntp.go all: remove dependency on golang.org/exp (#29314) 2024-03-25 07:50:18 +01:00
table.go p2p/discover: resolve DNS hostnames for bootstrap nodes (#34101) 2026-03-28 11:37:39 +01:00
table_reval.go p2p/discover: remove unused parameter in revalidationList.get (#31155) 2025-02-11 13:45:44 +01:00
table_reval_test.go p2p/discover: refactor node and endpoint representation (#29844) 2024-05-29 15:02:26 +02:00
table_test.go p2p/discover: resolve DNS hostnames for bootstrap nodes (#34101) 2026-03-28 11:37:39 +01:00
table_util_test.go p2p/discover: remove type encPubkey (#30172) 2024-07-18 11:09:02 +02:00
v4_lookup_test.go Revert "p2p/discover: add test for lookup returning immediately" 2025-09-12 11:29:43 +02:00
v4_udp.go p2p/discover: restore nextTimeout update in UDPv4 resetTimeout loop (#34878) 2026-05-05 15:28:28 +02:00
v4_udp_test.go p2p/discover: wait for bootstrap to be done (#32881) 2025-10-13 19:58:50 +02:00
v5_talk.go p2p/discover: pass node instead of node ID to TALKREQ handler (#31075) 2025-04-02 14:56:21 +02:00
v5_udp.go p2p/discover: remove delay from discv5 RandomNodes (#32517) 2025-09-10 19:51:04 +02:00
v5_udp_test.go p2p/discover: fix flaky TestUDPv5_findnodeHandling (#34109) 2026-04-14 09:43:44 +02:00