Bitcoin Cash Seeding

0 73
Avatar for phil.wilson
4 years ago

To connect into the Bitcoin Cash network you need to first obtain at least one working IP address to a node that's already up and running.

The original Bitcoin client code used the IRC ( Internet Relay Chat ) channel #Bitcoin to make the client add its IP address into the channel and collect everyone else's IP addresses from there.

Over time additional channels were needed.

Once there were long-established members some developers added in DNS ( Domain Name System ) seeding and removed the IRC code.

These seeding domains would vend a list of IP addresses which were current the last time their node checked them.

A program which can be installed onto macOS and Ubuntu is called dig.

You can use it like so:

dig <domain name>

It will return information about that domain.

Example:

>$ dig reddit.com

; <<>> DiG 9.10.6 <<>> reddit.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52932
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;reddit.com.			IN	A

;; ANSWER SECTION:
reddit.com.		245	IN	A	151.101.1.140
reddit.com.		245	IN	A	151.101.65.140
reddit.com.		245	IN	A	151.101.129.140
reddit.com.		245	IN	A	151.101.193.140

;; Query time: 44 msec
;; SERVER: 61.9.194.49#53(61.9.194.49)
;; WHEN: Fri Feb 21 22:04:12 AEDT 2020
;; MSG SIZE  rcvd: 103

Within the ANSWER SECTION you'll see the domain names and their associated IP addresses

reddit.com. 245 IN A 151.101.65.140

To be able to use this dig program from within your own program you can fire off a process which launches this program with any command-line parameters you'd like.

dig has a special command line flag called +short.

This will cull out everything except the IP address answers.

The following Swift language code snippet works on both macOS and Linux programs ( tested only on Ubuntu 19 and macOS Mojave )

        let task = Process()
        task.launchPath = "/usr/bin/env"
        task.arguments = ["dig",
                          "+short",
                          "seed.bitcoinabc.org",
                          "seed-abc.bitcoinforks.org",
                          "btccash-seeder.bitcoinunlimited.info",
                          "seed.bchd.cash"]
        let pipe = Pipe()
        task.standardOutput = pipe
        task.launch()
        let data = pipe.fileHandleForReading.readDataToEndOfFile()
        if let addresses = String(data: data, encoding: .utf8) {
            print(addresses)
        }

This will print out a list of the IP addresses vended by those seeding domains

Example:

47.254.132.156
138.197.209.186
95.217.91.182
96.61.84.171
136.244.71.247
35.195.113.76
45.32.244.156
198.199.125.113
159.89.230.79
104.236.161.94
206.189.119.159

Give it a try and see if it helps you with whatever project you're coding up.

Keep on hacking

1
$ 0.00
Avatar for phil.wilson
4 years ago

Comments