3 Commits

Author SHA1 Message Date
5d3f7e520c packaging: correct the debian changelog and the manpage file list
- dragonx.manpages listed DEBIAN/manpages/*.1, a path nothing creates,
  so dh_installman would fail on it. Point it at doc/man/*.1, which is
  where util/gen-manpages.sh writes and what doc/man/Makefile.am ships.
- Restore the 1.0.1 and 1.0.2 stanzas, reconstructed from the commits
  each tag actually contains. The file jumped 1.0.3 -> 1.0.0.
- The 1.1.0 and 1.0.0 trailers named weekdays that do not match their
  dates ("Thu, 21 Aug 2026" is a Friday; "Mon, 03 Mar 2026" is a
  Tuesday). Replace both with the real v1.1.0 and v1.0.0 tag dates,
  which fixes the weekday and the disagreement with the tag at once.
- Record the 1.2.0 peer-discovery work in its stanza.
- Drop doc/man/hushd.html and doc/man/hush-cli.html: stale Hush-branded
  pages for binaries this tree no longer builds, referenced by nothing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU87LdsJZiZkfq1eXubpeo
2026-08-25 18:36:03 -05:00
092a608fd9 chainparams: do not let other smart chains inherit DragonX's seeds
A smart chain builds its params by copying a base network and
overriding pieces, but nothing ever touched vSeeds/vFixedSeeds. That is
how DRAGONX ran on Hush's seeds -- seed1.hush.is and friends, long
since gone from DNS -- for as long as it did, and it means any other
assetchain started from this binary now inherits DragonX's.

Seeds are per-chain by nature: an address serving one chain is useless
to another, and dialling it is at best wasted effort and at worst a
peer speaking a different protocol. DRAGONX keeps the seeds configured
in CMainParams, which are its own; every other chain starts empty and
relies on -addnode/-connect, which an assetchain operator has to
configure regardless.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU87LdsJZiZkfq1eXubpeo
2026-08-25 18:36:03 -05:00
3dd667b127 net: add two seed nodes and reserve names for three more
node6.dragonx.is (13.140.58.251) and node7.dragonx.is (5.104.83.100)
are new full nodes in regions the existing five did not cover. Both go
into the compiled-in fixed-seed list and into the DRAGONX -addnode set.

node8 through node10 are reserved names with no DNS records yet. A
hostname that does not resolve is harmless on this path --
ThreadOpenAddedConnections simply fails to open the connection and
retries on its normal cycle -- and reserving the names in the binary
means a future seed can be brought into the default addnode set by
creating a single DNS record, with no release and no waiting for users
to upgrade. seed.dragonx.is already gives the DNS-seed path that
property; this extends it to the addnode path.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU87LdsJZiZkfq1eXubpeo
2026-08-25 18:36:03 -05:00
9 changed files with 62 additions and 2983 deletions

View File

@@ -24,6 +24,11 @@ dragonx (1.2.0) stable; urgency=medium
* Clear a stale sweep flag that could otherwise leave sweeping, consolidation
and auto-shielding permanently disabled together, and stop the async queue
silently discarding operations at shutdown while reporting success.
* Peer discovery: seed from the round-robin DNS record seed.dragonx.is rather
than three hostnames that no longer resolve, count DNS-seeded addresses so
the fixed-seed fallback is no longer triggered spuriously, give every entry
in the compiled-in seed list its P2P port, and stop non-DRAGONX smart chains
inheriting DragonX's seeds. Adds two seed nodes in new regions.
* Derive the release version from configure.ac in build.sh instead of a
hardcoded literal, and document container-based release builds in
doc/build-containers.md.
@@ -49,7 +54,7 @@ dragonx (1.1.0) stable; urgency=medium
pre-verification, adaptive -dbcache, Sapling witness desync fix, BIP39
seed phrases, chain-level Sapling turnstile, and the audit fixes.
-- DragonX Developers <dev@dragonx.is> Thu, 21 Aug 2026 22:00:00 +0000
-- DragonX Developers <dev@dragonx.is> Sun, 23 Aug 2026 10:41:53 -0500
dragonx (1.0.3) stable; urgency=medium
@@ -61,6 +66,22 @@ dragonx (1.0.3) stable; urgency=medium
-- DragonX <dan-s-dev@proton.me> Tue, 07 Jul 2026 05:49:59 +0200
dragonx (1.0.2) stable; urgency=medium
* Fix Sapling pool persistence, and report the block subsidy and total fees
in the getblock RPC
* Fix the Windows bootstrap script and add a mirror fallback
* Fix the Windows build
* Fix the macOS Sequoia build with GCC 15
-- DragonX <dan-s-dev@proton.me> Thu, 19 Mar 2026 10:09:18 -0500
dragonx (1.0.1) stable; urgency=medium
* Fix a fresh-sync failure at the difficulty reset height 2838976
-- DragonX <dan-s-dev@proton.me> Thu, 12 Mar 2026 01:25:21 -0500
dragonx (1.0.0) stable; urgency=medium
* Initial release of DragonX, forked from Hush Full Node
@@ -68,7 +89,7 @@ dragonx (1.0.0) stable; urgency=medium
* RandomX proof-of-work, 36-second block time, fully shielded transactions
* New binary names: dragonxd, dragonx-cli, dragonx-tx
-- DragonX <dan-s-dev@proton.me> Mon, 03 Mar 2026 00:00:00 +0000
-- DragonX <dan-s-dev@proton.me> Tue, 10 Mar 2026 19:39:55 -0500
hush (3.10.5) stable; urgency=medium

View File

@@ -1,3 +1,3 @@
DEBIAN/manpages/dragonx-cli.1
DEBIAN/manpages/dragonx-tx.1
DEBIAN/manpages/dragonxd.1
doc/man/dragonxd.1
doc/man/dragonx-cli.1
doc/man/dragonx-tx.1

View File

@@ -15,3 +15,9 @@
# node5.dragonx.is
176.126.87.241:21768
# node6.dragonx.is
13.140.58.251:21768
# node7.dragonx.is
5.104.83.100:21768

View File

@@ -1,296 +0,0 @@
<!-- Creator : groff version 1.23.0 -->
<!-- CreationDate: Mon Jan 5 14:12:33 2026 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>HUSH-CLI</title>
</head>
<body>
<h1 align="center">HUSH-CLI</h1>
<a href="#NAME">NAME</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#Usage:">Usage:</a><br>
<a href="#OPTIONS">OPTIONS</a><br>
<a href="#COPYRIGHT">COPYRIGHT</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:9%; margin-top: 1em">hush-cli -
manual page for hush-cli v3.10.4</p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:9%; margin-top: 1em">Hush RPC client
version v3.10.4-7e63e2f01-dirty</p>
<p style="margin-left:9%; margin-top: 1em">In order to
ensure you are adequately protecting your privacy when using
Hush, please see &lt;https://hush.is/security/&gt;.</p>
<h3>Usage:
<a name="Usage:"></a>
</h3>
<p style="margin-left:9%; margin-top: 1em">hush-cli
[options] &lt;command&gt; [params]</p>
<p style="margin-left:18%;">Send command to Hush</p>
<p style="margin-left:9%;">hush-cli [options] help</p>
<p style="margin-left:18%;">List commands</p>
<p style="margin-left:9%;">hush-cli [options] help
&lt;command&gt;</p>
<p style="margin-left:18%;">Get help for a command</p>
<h2>OPTIONS
<a name="OPTIONS"></a>
</h2>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="3%">
<p style="margin-top: 1em">-?</p></td>
<td width="88%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">This help
message</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="15%">
<p style="margin-top: 1em"><b>-conf=</b>&lt;file&gt;</p></td>
<td width="76%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Specify
configuration file (default: HUSH3.conf)</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="18%">
<p style="margin-top: 1em"><b>-datadir=</b>&lt;dir&gt;</p></td>
<td width="73%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Specify data
directory (this path cannot use &rsquo;&#732;&rsquo;)</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="10%">
<p style="margin-top: 1em"><b>-testnet</b></p></td>
<td width="81%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Use the test
network</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="10%">
<p style="margin-top: 1em"><b>-regtest</b></p></td>
<td width="81%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Enter
regression test mode, which uses a special chain in which
blocks can be solved instantly. This is intended for
regression testing tools and app development.</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="20%">
<p style="margin-top: 1em"><b>-rpcconnect=</b>&lt;ip&gt;</p> </td>
<td width="71%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Send commands
to node running on &lt;ip&gt; (default: 127.0.0.1)</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="19%">
<p style="margin-top: 1em"><b>-rpcport=</b>&lt;port&gt;</p> </td>
<td width="72%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Connect to
JSON-RPC on &lt;port&gt; (default: 18030 )</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="10%">
<p style="margin-top: 1em"><b>-rpcwait</b></p></td>
<td width="81%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Wait for RPC
server to start</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="19%">
<p style="margin-top: 1em"><b>-rpcuser=</b>&lt;user&gt;</p> </td>
<td width="72%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Username for
JSON-RPC connections</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="22%">
<p style="margin-top: 1em"><b>-rpcpassword=</b>&lt;pw&gt;</p> </td>
<td width="69%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Password for
JSON-RPC connections</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="27%">
<p style="margin-top: 1em"><b>-rpcclienttimeout=</b>&lt;n&gt;</p> </td>
<td width="64%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Timeout in
seconds during HTTP requests, or 0 for no timeout. (default:
900)</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="9%"></td>
<td width="8%">
<p style="margin-top: 1em"><b>-stdin</b></p></td>
<td width="83%">
</td></tr>
</table>
<p style="margin-left:18%; margin-top: 1em">Read extra
arguments from standard input, one per line until EOF/Ctrl-D
(recommended for sensitive information such as
passphrases)</p>
<h2>COPYRIGHT
<a name="COPYRIGHT"></a>
</h2>
<p style="margin-left:9%; margin-top: 1em">In order to
ensure you are adequately protecting your privacy when using
Hush, please see &lt;https://hush.is/security/&gt;.</p>
<p style="margin-left:9%; margin-top: 1em">Copyright (C)
2016-2025 Duke Leto and The Hush Developers</p>
<p style="margin-left:9%; margin-top: 1em">Copyright (C)
2016-2020 jl777 and SuperNET developers</p>
<p style="margin-left:9%; margin-top: 1em">Copyright (C)
2016-2018 The Zcash developers</p>
<p style="margin-left:9%; margin-top: 1em">Copyright (C)
2009-2014 The Bitcoin Core developers</p>
<p style="margin-left:9%; margin-top: 1em">This is
experimental Free Software! Fuck Yeah!!!!!</p>
<p style="margin-left:9%; margin-top: 1em">Distributed
under the GPLv3 software license, see the accompanying file
COPYING or
&lt;https://www.gnu.org/licenses/gpl-3.0.en.html&gt;.</p>
<hr>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -538,10 +538,24 @@ void *chainparams_commandline() {
//}
if ( SMART_CHAIN_SYMBOL[0] != 0 )
{
// A smart chain inherits vSeeds/vFixedSeeds from the base network params,
// and nothing below ever touched them. That is how DRAGONX came to run on
// Hush's seeds -- seed1.hush.is and friends, long since removed from DNS --
// for as long as it did. Seeds are per-chain by nature: an address that
// serves one chain is useless to another, and dialling it is at best wasted
// effort and at worst a peer that speaks a different protocol.
//
// DRAGONX keeps the seeds configured in CMainParams (which are its own).
// Every other chain starts empty and relies on -addnode/-connect, which is
// what an assetchain operator has to configure anyway.
if (strcmp(SMART_CHAIN_SYMBOL,"HUSH3") == 0) {
ASSETCHAINS_P2PPORT = 18030;
}
if (strncmp(SMART_CHAIN_SYMBOL, "DRAGONX", 7) != 0) {
pCurrentParams->ClearSeeds();
}
if ( ASSETCHAINS_BLOCKTIME != 60 )
{
pCurrentParams->consensus.nMaxFutureBlockTime = 7 * ASSETCHAINS_BLOCKTIME; // 7 blocks

View File

@@ -117,6 +117,10 @@ public:
void SetNValue(uint64_t n) { nEquihashN = n; }
void SetKValue(uint64_t k) { nEquihashK = k; }
void SetMiningRequiresPeers(bool flag) { fMiningRequiresPeers = flag; }
//! Drop any inherited peer seeds. An assetchain gets its params by copying a
//! base network and overriding pieces; without this it silently keeps the base
//! chain's DNS and fixed seeds, which are wrong for it by definition.
void ClearSeeds() { vSeeds.clear(); vFixedSeeds.clear(); }
CMessageHeader::MessageStartChars pchMessageStart;
Consensus::Params consensus;

View File

@@ -16,6 +16,8 @@ static const uint8_t chainparams_seed_main[] = {
0x01,0x04,0xd4,0x38,0x29,0x2f,0x55,0x08, // 212.56.41.47:21768
0x01,0x04,0x90,0x7e,0x93,0xa5,0x55,0x08, // 144.126.147.165:21768
0x01,0x04,0xb0,0x7e,0x57,0xf1,0x55,0x08, // 176.126.87.241:21768
0x01,0x04,0x0d,0x8c,0x3a,0xfb,0x55,0x08, // 13.140.58.251:21768
0x01,0x04,0x05,0x68,0x53,0x64,0x55,0x08, // 5.104.83.100:21768
};
static const uint8_t chainparams_seed_test[] = {

View File

@@ -1799,8 +1799,17 @@ void hush_args(char *argv0)
LogPrint("net", "%s: isdragonx=%d\n", __func__, isdragonx);
if (isdragonx) {
// node8-node10 are PLACEHOLDERS with no DNS records yet. A hostname that
// does not resolve is harmless here: ThreadOpenAddedConnections just fails
// to open the connection and retries on its 2-minute cycle. Reserving the
// names in the binary means a future seed can be brought into the -addnode
// set by creating one DNS record, with no release and no waiting for users
// to upgrade. (seed.dragonx.is already provides that for the DNS-seed path;
// this extends the same property to the addnode path.)
DRAGONX_nodes = {"node1.dragonx.is","node2.dragonx.is","node3.dragonx.is",
"node4.dragonx.is","node5.dragonx.is"
"node4.dragonx.is","node5.dragonx.is","node6.dragonx.is",
"node7.dragonx.is","node8.dragonx.is","node9.dragonx.is",
"node10.dragonx.is"
};
}