• v1.2.0 fad05d3ab4

    DragonX v1.2.0

    DanS released this 2026-08-25 18:42:48 -05:00 | 39 commits to master since this release

    Wallet 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