A DRAGONX node had no working peer discovery. Both mechanisms were broken, and a third bug hid the fact. 1. DNS seeds were Hush's, and all three are dead. chainparams_commandline() sets an assetchain's port, magic, blocktime, upgrade heights and checkpoints but never touches vSeeds or vFixedSeeds, so DRAGONX silently inherited CMainParams': seed1.hush.is, seed2.hush.is and dns.leto.net. None of the three has an A record any more -- verified against 1.1.1.1 and 8.8.8.8, with google.com and node1..node5.dragonx.is resolving fine from the same host as a control. Replaced with the five DragonX node hostnames, which do resolve and do listen. 2. Every fixed seed carried port 0. contrib/seeds/generate-seeds.py documents its input as <ip>:<port>, but contrib/seeds/nodes_main.txt held bare IPs, so parse_spec() took the port as empty and emitted 0x00,0x00 for all five entries. The fixed-seed fallback -- which exists precisely for when DNS seeding yields nothing -- was therefore handing out unconnectable addresses. Added the port to nodes_main.txt and regenerated; entries now end 0x55,0x08 (21768). 3. ThreadDNSAddressSeed never incremented `found`, so "%d addresses found from DNS seeds" printed 0 unconditionally, whether seeding worked or not. That is almost certainly why nobody noticed the seeds had gone dead: the one diagnostic that would have shown it was hardcoded to say zero. Verified on a fresh datadir (empty addrman, separate ports, real node untouched): DNS seeding now reports "5 addresses found from DNS seeds" where it previously reported 0, and the fixed-seed path adds 5 entries carrying the correct port. Note on scope: the five hostnames are single-A-record hosts, so each contributes one address rather than the spread a real seeder returns. A dedicated DNS seeder, or simply a round-robin A record over the seed set, would be the proper fix and needs only a DNS change rather than a release. This restores a working discovery path; it does not make it a good one. Also corrected the generated header's #endif comment, which said HUSH_CHAINPARAMSSEEDS_H while the guard is DRAGONX_CHAINPARAMSSEEDS_H. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
DragonX Contrib
This directory contains various supporting tools and scripts. Much of this is old material inherited from the Bitcoin/Zcash/Komodo/Hush lineage, so not every script is guaranteed to work. Please fix bugs and report anything you find.
DragonX Tools
block_time.pl
Estimate when a DragonX block will happen.
Example:
./contrib/block_time.pl 123456 # Print out datetime of when block height 123456 happens
gen-zaddrs.pl
Generate zaddrs in bulk, by default 50 at a time. Prints out a zaddr one per line. Useful on a fully-private chain where shielded addresses are the norm.
Example:
./contrib/gen-zaddrs.pl # generate 50 zaddrs
./contrib/gen-zaddrs.pl 500 # generate 500 zaddrs
Repository Tools
Verify-Commits
Tool to verify that merge commits were signed by a developer.
Linearize
Construct a linear, no-fork, best version of the blockchain.
Qos
A Linux bash script that sets up traffic control (tc) to limit the outgoing bandwidth for connections to the DragonX network. This lets you run an always-on dragonxd instance and have another local dragonxd connect to it and receive blocks from it.
Seeds
Utility to generate the seed node array that is compiled into the client.
Build Tools and Keys
Debian
Contains files used to package dragonxd for Debian-based Linux systems.
Gitian-descriptors
Legacy notes on getting gitian builds running. Note that the real DragonX build
path is ./build.sh together with the depends/ system; gitian is legacy.
Gitian-downloader
Various PGP files of developers.
MacDeploy
Scripts and notes for Mac builds.
Test and Verify Tools
TestGen
Utilities to generate test vectors for the data-driven base58 tests.
Verify SF Binaries
Legacy SourceForge-era signature verification script (unused for DragonX).