DanS a0ccb4be1d wallet: repair a truncated hdchain record instead of refusing the wallet
A build predating VERSION_HD_TRANSPARENT rewrites the hdchain record with only
its four base fields while leaving nVersion at whatever it read. Our version-gated
reads then run off the end of the stream, ReadKeyValue turns the throw into
fHDChainRead=false, and LoadWallet escalates that to DB_CORRUPT. Verified against
the real v1.0.2-2b011d6ee release binary: a dev wallet, opened once by v1.0.2 and
given a single new sapling address, came back to

  Error reading wallet database: hdchain record is corrupt
  Error loading wallet.dat: HD seed present but the hdchain record is missing or corrupt
  Error loading wallet.dat: Wallet corrupted

Nothing is actually lost there -- the same test showed the seed phrase restoring
the full balance, the autoshield destination, and even the address v1.0.2 had
generated -- but the user is shown "Wallet corrupted" with no hint of that.

Recover instead, for a v1 or v2 record. Everything derivation depends on is either
in the four-field prefix or in the separate hdseed record, and the trailing
counters are self-healing: DeriveNewChildKey and GenerateNewSaplingZKey both skip
indices whose key the wallet already holds, so restarting a counter at 0 re-walks
past existing keys rather than reissuing them. Read the prefix from an untouched
copy of the stream, default the missing tail, log it, and rewrite the record in
full form so the next load is clean.

A record claiming nVersion >= VERSION_HD_MNEMONIC still fails loud: that flag
selects the derivation input, so guessing it wrong yields a different key tree in
silence. No wallet this code has written can be in that state -- every
InstallHDSeed call site passes fMnemonic=false -- so the branch is defensive only.

Also say what to do about it. Both the log line and the init error now name the
remedy (move wallet.dat aside, restart with -mnemonic and -rescan) rather than
stopping at "Wallet corrupted".

Verified on regtest against the real v1.0.2 binary, 14/14: the round-trip that
previously ended in "Wallet corrupted" now loads, logs the repair and the rewrite,
keeps the balance, the autoshield destination and v1.0.2's own address, still
issues distinct fresh t-addresses after the counter reset, needs no repair on the
second load, and remains fully recoverable from the seed phrase.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-25 18:18:38 +02:00
2021-01-26 08:56:08 -05:00
2026-08-21 19:15:56 -05:00
2024-02-27 23:59:59 +01:00
2026-06-28 16:04:51 -05:00
2026-08-21 19:15:56 -05:00
2024-03-15 15:14:26 -04:00
2024-03-31 23:54:32 +02:00
2019-08-07 04:56:24 -07:00
2019-08-07 04:56:24 -07:00
2026-01-01 15:24:57 -05:00
2017-10-22 04:08:53 +02:00

DragonX

DragonX

A fully-private, RandomX CPU-mineable cryptocurrency.

Introduction Build Run Mine
What is DragonX? Build from source Run a node CPU mining
Key facts Install a release Fastest sync Wallets

What is DragonX?

DragonX implements extreme privacy via blockchain technology. It is private from genesis: every ordinary transaction is shielded (z2z), so your transaction metadata stays private. DragonX is based on Bitcoin code with Zcash's zero-knowledge Sapling cryptography, and its defining feature is RandomX Proof-of-Work — it is mined with a CPU, not ASICs or GPUs.

DragonX has its own genesis block. Its lineage is Bitcoin → Zcash → Komodo → Hush → DragonX; it is a fork of the Hush full node, with the Proof-of-Work changed from Equihash to RandomX and privacy enforced from the very first block.

This software is the DragonX full node and command-line client. It downloads and stores the entire history of DragonX transactions; depending on your computer and network connection this can take a while, so most users start from the bootstrap snapshot.

DragonX is experimental software. Use at your own risk, just like Bitcoin.

Key facts

Ticker DRAGONX
Proof-of-Work RandomX (CPU-mineable)
Privacy fully private from genesis (ac_private=1, Sapling active at height 1)
Block time 36 seconds
Block reward 3 DRAGONX, halving every 3,500,000 blocks
Max block size 4 MB
RPC port 21769
P2P port 18030
Data directory ~/.hush/DRAGONX (Linux)
Config file DRAGONX.conf
Binaries dragonxd, dragonx-cli, dragonx-tx

Fastest way to sync (bootstrap)

The quickest way to get a fully-synced node is the signed bootstrap snapshot, which installs a pre-built blockchain so you skip re-validating the whole chain from genesis:

# Stop dragonxd first if it is running, then:
./util/bootstrap-dragonx.sh

The script preserves your wallet.dat and DRAGONX.conf, verifies the download's checksums and (once a release key is published) its cryptographic signature, then starts you near the chain tip. If you prefer to sync from the network instead, a larger -dbcache (e.g. -dbcache=2048) noticeably speeds up the initial block download.

Build from source

Building uses 3 build processes by default; you need ~2GB of RAM for each.

Debian or Ubuntu

sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib \
      autoconf libtool ncurses-dev unzip git zlib1g-dev wget \
      bsdmainutils automake curl unzip nano libsodium-dev cmake
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
./build.sh -j3

Arch

sudo pacman -S gcc libsodium lib32-zlib unzip wget git python rust curl autoconf cmake
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
./build.sh -j3

Fedora

sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libtool ncurses-devel patch -y
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
./build.sh -j3

macOS

Install Xcode Command Line Tools and Homebrew, then:

xcode-select --install
brew install gcc autoconf automake pkgconf libtool cmake curl

# Install Rust (needed for librustzcash on macOS Sequoia+)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"

git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
# Make sure libtool gnubin and cargo are on PATH
export PATH="$HOME/.cargo/bin:/usr/local/opt/libtool/libexec/gnubin:$PATH"
./build.sh -j3

For a release build:

export PATH="$HOME/.cargo/bin:/usr/local/opt/libtool/libexec/gnubin:$PATH"
./build.sh --mac-release -j$(sysctl -n hw.ncpu)

Windows (cross-compiled on Linux)

sudo apt-get install \
      build-essential pkg-config libc6-dev m4 g++-multilib libdb++-dev \
      autoconf libtool ncurses-dev unzip git zip \
      zlib1g-dev wget bsdmainutils automake mingw-w64 cmake libsodium-dev
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
./util/build-win.sh -j$(nproc)

ARM (Raspberry Pi)

Any ARMv7 machine cannot build this repo because the underlying zk-SNARK library does not support that instruction set. You need an ARMv8-based board (Raspberry Pi 4 or newer). Either install an aarch64 release package (see below) or cross-compile from amd64.

Installing DragonX binaries

  1. Download a release with a .deb extension.
  2. Install it, substituting the version you downloaded: sudo dpkg -i dragonx-VERSION-amd64.deb (or -aarch64.deb on ARM).
  3. Run with: dragonxd.

Running a node

Start the daemon:

./src/dragonxd

It stores data in ~/.hush/DRAGONX and reads ~/.hush/DRAGONX/DRAGONX.conf. Query it with ./src/dragonx-cli, for example:

./src/dragonx-cli getinfo

To run DragonX as a background service, see doc/dragonxd-systemd.md.

CPU mining (RandomX)

DragonX is CPU-mineable via RandomX (the same algorithm family as Monero); ASICs and GPUs do not apply. To mine with your node, enable generation and choose how many threads to use:

# mine with 4 CPU threads
./src/dragonxd -gen=1 -genproclimit=4

or add to DRAGONX.conf:

gen=1
genproclimit=4

Mining rewards arrive as transparent coinbase, which is directly spendable; you can optionally move it into the shielded pool with z_shieldcoinbase (see doc/shield-coinbase.md). For more on the algorithm and its tuning options, see doc/randomx.md.

Wallets

The DragonX full node includes a built-in wallet, managed via dragonx-cli (see doc/wallet-backup.md and doc/seed-phrase.md).

Graphical and mobile wallets:

DragonX light and mobile wallets use BIP39 seed phrases that are compatible with the full node — see doc/seed-phrase.md.

Support and links

License

For license information see the file COPYING.

Description
No description provided
Readme 185 MiB
2026-07-23 20:06:47 -05:00
Languages
C++ 66.2%
C 21.4%
Python 6.5%
M4 1.4%
Shell 1.2%
Other 3.1%