Bitcoin Cash Seeding
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
No comments yet