-
DragonX v1.2.0
released this
2026-08-25 18:42:48 -05:00 | 39 commits to master since this releaseWallet release: miner coinbase auto-shields itself, new wallets are born
from a BIP39 seed phrase, and peer discovery works again.Auto-shield coinbase
Matured coinbase is drained into a wallet-owned Sapling address on a
block interval. The destination is derived from the HD seed at
m/32'/coin'/i' and is the lowest index inside -mnemonicsaplinggap, so
a bare seed-phrase restore re-derives it. If it cannot prove the
destination is re-derivable it refuses to run rather than send funds
somewhere a restore would not find, and it stays opted out on
upgraded wallets whose seed provenance is unknown until the operator
says otherwise. z_autoshieldstatus reports what it decided and why.Each round is bounded to 400 inputs, the transaction size estimate
now accounts for all three Sapling output descriptions -- the old
constant was short by 937 bytes, measured against seven live mainnet
shield transactions -- and the selected coins are locked for the
duration of proof building so a concurrent z_shieldcoinbase or
z_sendmany cannot spend them out from under it.BIP39 seed phrases
New wallets are created from a mnemonic by default, byte-compatible
with SilentDragonXLite. z_exportmnemonic returns the phrase and
-mnemonic restores from it. A wallet written by a 1.1.0-or-older
binary that generated one address left a truncated hdchain record and
would not open at all ("Wallet corrupted"); that record is now
repaired and rewritten rather than rejected, and when a record
genuinely cannot be recovered the error names the seed-phrase remedy.A round trip to v1.0.2 and back was tested: the older binary reads
the wallet and the block index without loss.Scheduler and async queue
A stale sweep flag could leave sweeping, consolidation and
auto-shielding permanently disabled together. The async queue also
discarded operations at shutdown while reporting success; addOperation
now reports failure and the schedulers clear their own flags when it
does.Peer discovery
Three independent defects, each sufficient on its own to stop a fresh
node finding the network:
* the DNS seeds were seed1.hush.is, seed2.hush.is and dns.leto.net,
none of which resolve. Replaced with the round-robin record
seed.dragonx.is plus two host fallbacks.
* ThreadDNSAddressSeed never incremented its found counter, so the
fixed-seed fallback fired even when DNS had worked.
* every entry in the compiled-in fixed-seed list carried port 0,
because contrib/seeds/nodes_main.txt held bare IPs and
generate-seeds.py expects ip:port. All entries now carry :21768.A fresh node with an empty datadir now finds 7 addresses from DNS and
dials them on :21768.Adds node6 and node7 as seeds in regions the first five did not
cover, and reserves node8-node10 so a future seed can join the
default addnode set with one DNS record and no release. Other smart
chains no longer inherit DragonX's seeds, which are meaningless to
them.Build and packaging
build.sh derives the release version from configure.ac instead of a
hardcoded literal. doc/build-containers.md documents container-based
release builds against several glibc floors. The debian changelog
regained its missing 1.0.1 and 1.0.2 stanzas and lost two impossible
weekdays; dragonx.manpages pointed at a path nothing creates; the
manpages themselves are regenerated and had been describing v1.0.3.This is the first annotated tag since v1.1.0. genbuild.sh uses
git describe --abbrev=0, which does not see lightweight tags, so
v1.0.0 through v1.0.3 all reported themselves as v1.0.x-. This
one reports "v1.2.0".Downloads