Files
bitcoin/contrib/seeds
merge-script 9890058b37 Merge bitcoin/bitcoin#33723: chainparams: remove dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us
b0c706795c Remove unreliable seed from chainparams.cpp, and the associated README (SatsAndSports)

Pull request description:

  The DNS seed `dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us.` is not returning a representative sample of bitcoin nodes. It currently returns nothing later than 28.1.0, breaching the policy.

  This PR removes that seed from the list of DNS seeds

  ### Rationale

  The [policy for seeds](https://github.com/bitcoin/bitcoin/blob/master/doc/dnsseed-policy.md) includes this:

  > The DNS seed results must consist exclusively of fairly selected and functioning Bitcoin nodes from the public network

  A number of comments below, in response to this PR, include apparent breaches of this policy: [1](https://github.com/bitcoin/bitcoin/pull/33723#issuecomment-3458071231) [2](https://github.com/bitcoin/bitcoin/pull/33723#issuecomment-3457655364), [3](https://github.com/bitcoin/bitcoin/pull/33723#issuecomment-3457712557), in particular the first linked comment ([1](https://github.com/bitcoin/bitcoin/pull/33723#issuecomment-3458071231)) comparing the distribution at this seed to other seeds. This seed is not including anything later than 28.2.0, breaching this policy.

  To ensure the policy is followed, and the seeds include a representative sample of Bitcoin nodes, this PR removes this seed from the list

  ### Data

  I ran this:
  ```
  # Get some ip address from that seed:
  # Repeated multiple times, to get many different IPs:
  dig +short dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us >> dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us
  # For each distinct ip gathered from the seed, get basic info about the node, including it's User Agent string:
  cat dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us | sort -u | while read ip; do echo ===; echo $ip; nmap -p 8333 --script bitcoin-info "$ip"; done > seed_versions.txt
  ```

  and then summarized the agents with `egrep 'User Agent' seed_versions.txt  | sort | uniq -c` and got:
  ```
        1   User Agent: /Satoshi:22.0.0/
        1   User Agent: /Satoshi:22.1.0/
        5   User Agent: /Satoshi:24.0.1/
        1   User Agent: /Satoshi:25.1.0/
       30  User Agent: /Satoshi:27.0.0/
        1   User Agent: /Satoshi:27.1.0/
        1   User Agent: /Satoshi:27.1.0/Knots:20240801/
        1   User Agent: /Satoshi:28.0.0/
        7   User Agent: /Satoshi:28.1.0/
        2   User Agent: /Satoshi:28.1.0/Knots:20250305/

  ```

ACKs for top commit:
  l0rinc:
    reACK b0c706795c
  delta1:
    reACK b0c706795c
  Crypt-iQ:
    crACK b0c706795c
  laanwj:
    ACK b0c706795c
  murchandamus:
    ACK b0c706795c
  RandyMcMillan:
    ACK b0c7067
  wiz:
    ACK b0c706795c
  dergoegge:
    ACK b0c706795c
  stickies-v:
    re-ACK b0c706795c
  mzumsande:
    ACK b0c706795c
  instagibbs:
    ACK b0c706795c

Tree-SHA512: 7230b8dd24560ce6f8247e2e82ae7846ded8b91e230c59cc3643da3f5b9c12b5f025c1bb14490c19ca55f3794e81ce08106b31b3bf883d5c2dced05017123ac4
2025-12-04 16:44:20 +00:00
..
2025-09-03 11:23:30 +01:00
2025-09-03 11:23:30 +01:00
2025-09-03 11:23:30 +01:00
2025-09-03 11:23:30 +01:00

Seeds

Utility to generate the seeds.txt list that is compiled into the client (see src/chainparamsseeds.h and other utilities in contrib/seeds).

Be sure to update PATTERN_AGENT in makeseeds.py to include the current version, and remove old versions as necessary (at a minimum when SeedsServiceFlags() changes its default return value, as those are the services which seeds are added to addrman with).

Update MIN_BLOCKS in makeseeds.py and the -m/--minblocks arguments below, as needed.

The seeds compiled into the release are created from sipa's and achow101's DNS seed, virtu's crawler, and asmap community AS map data. Run the following commands from the /contrib/seeds directory:

curl https://bitcoin.sipa.be/seeds.txt.gz | gzip -dc > seeds_main.txt
curl https://21.ninja/seeds.txt.gz | gzip -dc >> seeds_main.txt
curl https://mainnet.achownodes.xyz/seeds.txt.gz | gzip -dc >> seeds_main.txt
curl https://signet.achownodes.xyz/seeds.txt.gz | gzip -dc > seeds_signet.txt
curl https://testnet.achownodes.xyz/seeds.txt.gz | gzip -dc > seeds_test.txt
curl https://testnet4.achownodes.xyz/seeds.txt.gz | gzip -dc > seeds_testnet4.txt
curl https://raw.githubusercontent.com/asmap/asmap-data/main/latest_asmap.dat > asmap-filled.dat
python3 makeseeds.py -a asmap-filled.dat -s seeds_main.txt > nodes_main.txt
python3 makeseeds.py -a asmap-filled.dat -s seeds_signet.txt -m 266000 > nodes_signet.txt
python3 makeseeds.py -a asmap-filled.dat -s seeds_test.txt -m 4650000 > nodes_test.txt
python3 makeseeds.py -a asmap-filled.dat -s seeds_testnet4.txt -m 100000 > nodes_testnet4.txt
python3 generate-seeds.py . > ../../src/chainparamsseeds.h