Compliant rebrand: legal compliance, code audit, and documentation (Phases 0-3)

Phase 0 - Legal Compliance:
- COPYING: Add DragonX copyright, preserve all upstream attributions
- AUTHORS: Add DragonX developers section
- LICENSE: Restore standard FSF GPLv3 text (fix GNU→GENERAL error)
- Add DragonX copyright headers to all 21 modified source files
- contrib/debian/copyright: Add DragonX attribution
- README.md: Add GPLv3 Section 5(a) attribution section

Phase 1 - init.cpp Cleanup:
- PID file: hushd.pid → dragonxd.pid
- Shutdown thread: hush-shutoff → dragonx-shutoff
- Debug message: stopping HUSH → stopping DragonX

Phase 2 - HUSH3/ishush3 Code Audit:
- Rename ishush3 → isdragonx across ~15 source files
- Update "HUSH3" chain-identity checks to "DRAGONX" in consensus,
  difficulty, notarization, devtax, and RPC code
- Intentionally preserve cross-chain "HUSH3" refs (gateway, notary dest)
- Build verified: all three binaries compile cleanly

Phase 3 - Documentation:
- README.md: Full rewrite with DragonX chain params, build instructions
- Man pages: Create dragonxd.1, dragonx-cli.1, dragonx-tx.1 (v1.0.0)
- Doc files: Add beefy-DRAGONX.conf, dragonxd-systemd.md, dragonxd.service
- Init scripts: Create dragonxd.{conf,init,openrc,openrcconf,service}
- Debian packaging: Update control, changelog, install, manpages, examples
- Update doc/init.md and contrib/init/README.md
This commit is contained in:
2026-03-03 19:01:24 -06:00
parent 4cb5a86056
commit c05134e77e
59 changed files with 1746 additions and 290 deletions

View File

@@ -1,3 +1,7 @@
# The DragonX Developers
Dan S https://git.dragonx.is/dan
# The Hush Developers
Duke Leto https://git.hush.is/duke https://github.com/leto

View File

@@ -1,3 +1,4 @@
Copyright (c) 2024-2026 The DragonX developers
Copyright (c) 2018-2025 The Hush developers
Copyright (c) 2009-2017 The Bitcoin Core developers
Copyright (c) 2009-2018 Bitcoin Developers

26
LICENSE
View File

@@ -1,4 +1,4 @@
GENERAL GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
@@ -7,15 +7,15 @@
Preamble
The GENERAL General Public License is a free, copyleft license for
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GENERAL General Public License is intended to guarantee your freedom to
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GENERAL General Public License for most of our software; it applies also to
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
@@ -37,7 +37,7 @@ freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GENERAL GPL protect your rights with two steps:
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
@@ -72,7 +72,7 @@ modification follow.
0. Definitions.
"This License" refers to version 3 of the GENERAL General Public License.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
@@ -549,35 +549,35 @@ to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GENERAL Affero General Public License.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GENERAL Affero General Public License into a single
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GENERAL Affero General Public License,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GENERAL General Public License from time to time. Such new versions will
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GENERAL General
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GENERAL General Public License, you may choose any version ever published
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GENERAL General Public License can be used, that proxy's
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

209
README.md
View File

@@ -1,196 +1,107 @@
<p align="center">
<img src="doc/hush/hush0.png">
</p>
# DragonX
<h3>
DragonX is a privacy-focused cryptocurrency full node using RandomX proof-of-work.
All transactions are shielded (z-to-z) by default, providing strong on-chain privacy.
| Introduction | Install | Compile | FAQ | Documentation |
| :---: | :---: | :---: | :---: | :---: |
| [What is Hush?](#what-is-hush) | [Windows 10 - Video Tutorial](#install-on-windows-10) | [Build on Debian or Ubuntu](#build-on-debian-or-ubuntu) | [Where can I buy Hush?](#where-can-i-buy-hush) | [Cross compiling Windows binaries](#windows-cross-compiled-on-linux)
| [Why not GitHub?](#banned-by-github) | [Build on Mac](#build-on-mac) | [Build on Arch](#build-on-arch) | [Can I mine with CPU or GPU?](#can-i-mine-with-cpu-or-gpu) | [Hush DevOps for pools and CEXs](https://git.hush.is/hush/docs/src/branch/master/advanced/devops.md)
| [What is HushChat?](#what-is-hushchat) | [Debian and Ubuntu](#installing-hush-binaries) | [Build on Fedora](#build-on-fedora) | [Claiming funds from old Hush wallets](https://git.hush.is/hush/hush3/src/branch/master/doc/OLD_WALLETS.md) | [Earn Hush bounty](#earn-hush-bounty)
| [What is SilentDagon?](#what-is-silentdagon) | [Raspberry Pi](#install-on-arm-architecture) | [Build on Ubuntu 16.04 or older](#building-on-ubuntu-16-04-and-older-systems) | [Where can I spend Hush?](#where-can-i-spend-hush) | [Cross compiling from amd64 to arm64](https://git.hush.is/hush/docs/src/branch/master/advanced/cross-compile-hush-full-node-to-aarch64-with-docker.md)
| | |
|---|---|
| **Algorithm** | RandomX (CPU-mineable) |
| **Block time** | 36 seconds |
| **Block reward** | 3 DRAGONX |
| **Halving** | Every 3,500,000 blocks |
| **Privacy** | All transactions shielded (`-ac_private=1`) |
| **P2P port** | 21768 |
| **RPC port** | 21769 |
</h3>
# What is Hush?
Hush implements Extreme Privacy via blockchain tech. We have our own
genesis block. We are not a chain fork (copy) of another coin. We are based on
Bitcoin code, with sophisticated zero-knowledge mathematics added for privacy.
This keeps your transaction metadata private!
# What is this repository?
This software is the Hush node and command-line client. It downloads and stores
the entire history of Hush transactions; depending on the speed of your
computer and network connection, it will likely take a few hours at least, but
some people report full nodes syncing in less than 1.5 hours.
# Banned by GitHub
In working on this release, Duke Leto was suspended from Github, which gave Hush developers
the impetus to completely leave that racist and censorship-loving platform. Hush now has it's own [git.hush.is](https://git.hush.is/hush) Gitea instance,
because we will not be silenced by Microsoft. All Hush software will be released from git.hush.is and hush.is, downloads from any other
domains should be assumed to be backdoored.
**Hush is unfinished and highly experimental.** Use at your own risk! Just like Bitcoin.
# Build on Debian or Ubuntu
## Build on Debian or Ubuntu
```sh
# install build dependencies
# Install build dependencies
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
# clone git repo
git clone https://git.hush.is/hush/hush3
cd hush3
# Build
# This uses 3 build processes, you need 2GB of RAM for each.
bsdmainutils automake curl unzip libsodium-dev cmake
# Clone the repo
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
# Build (uses ~2GB RAM per -j thread)
./build.sh -j3
```
Video Tutorial: https://videos.hush.is/videos/how-to-install-on-linux
# Build on Arch
## Build on Arch
```sh
# install build dependencies
sudo pacman -S gcc libsodium lib32-zlib unzip wget git python rust curl autoconf cmake
# clone git repo
git clone https://git.hush.is/hush/hush3
cd hush3
# Build
# This uses 3 build processes, you need 2GB of RAM for each.
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
./build.sh -j3
```
# Build on Fedora
## Build on Fedora
```sh
# install build dependencies
sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libtool ncurses-devel patch -y
# clone git repo
git clone https://git.hush.is/hush/hush3
cd hush3
# Build
# This uses 3 build processes, you need 2GB of RAM for each.
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
./build.sh -j3
```
# Install on Windows 10
## Build on macOS
Video Tutorial: https://videos.hush.is/videos/how-to-install-on-windows
# Install on ARM Architecture
Use this if you have a Raspberry Pi or similar computer. Currently, any ARMv7 machine will not be able to build this repo, because the underlying tech (zcash and the zksnark library) do not support that instruction set. This also means that old RaspberryPi devices will not work, unless they have a newer ARMv8-based Raspberry Pi. Raspberry Pi 4 and newer are known to work.
1. [Download the latest Debian package with the AARCH64 designation from the releases page](https://git.hush.is/hush/hush3/releases).
1. Install the Debian package, substituting "VERSION-NUMBER" for the version you have downloaded: `sudo dpkg -i hush-VERSION-NUMBER-aarch64.deb`.
1. Run with: `hushd`.
If you would like to compile this for ARM yourself, then please refer to the [Cross compiling a Hush full node daemon from AMD64 to ARM64(aarch64) CPU architecture with Docker](https://git.hush.is/jahway603/hush-docs/src/branch/master/advanced/cross-compile-hush-full-node-to-aarch64-with-docker.md) documentation to do that.
# Building On Ubuntu 16.04 and older systems
Some older compilers may not be able to compile modern code, such as gcc 5.4 which comes with Ubuntu 16.04 by default. Here is how to install gcc 7 on Ubuntu 16.04. Run these commands as root:
```
add-apt-repository ppa:ubuntu-toolchain-r/test && \
apt update && \
apt-get install -y gcc-7 g++-7 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 60 && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60
```
# Build on Mac
```
sudo port update
sudo port upgrade outdated
```sh
sudo port update && sudo port upgrade outdated
sudo port install qt5
# clone git repo
git clone https://git.hush.is/hush/hush3
cd hush3
# Build
# This uses 3 build processes, you need 2GB of RAM for each.
git clone https://git.dragonx.is/DragonX/dragonx
cd dragonx
./build.sh -j3
```
# Installing Hush binaries
## Cross-compile for Windows (on Linux)
1. [Download the release](https://git.hush.is/hush/hush3/releases) with a .deb file extension.
1. Install the Debian package, substituting "VERSION-NUMBER" for the version you have downloaded: `sudo dpkg -i hush-VERSION-NUMBER-amd64.deb`.
1. Run with: `hushd`.
# Windows (cross-compiled on Linux)
Get dependencies:
```ssh
```sh
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)
```
Downloading Git source repo, building and running Hush:
## Running
```sh
# pull
git clone https://git.hush.is/hush/hush3
cd hush3
# Build
./util/build-win.sh -j$(nproc)
# Run a HUSH node
./src/hushd
# Start the daemon
./src/dragonxd
# In another terminal, interact via CLI
./src/dragonx-cli getinfo
./src/dragonx-cli z_getnewaddress
```
# Official Explorers
Data directory: `~/.hush/DRAGONX/`
Config file: `~/.hush/DRAGONX/DRAGONX.conf`
The links for the Official Hush explorers:
* [explorer.hush.is](https://explorer.hush.is)
## Mining
# What is SilentDragon?
DragonX uses the RandomX algorithm and is CPU-mineable. Point any RandomX-compatible
miner (e.g. XMRig) at a DragonX stratum pool, or solo-mine with:
* [SilentDragon](https://git.hush.is/hush/SilentDragon) is a desktop wallet for HUSH full node.<br>
* [SilentDragonLite](https://git.hush.is/hush/SilentDragonLite) is a desktop wallet that does not require you to download the full blockchain.
* [SilentDragonAndroid](https://git.hush.is/hush/SilentDragonAndroid) is a wallet for Android devices.
* [SilentDragonPaper](https://git.hush.is/hush/SilentDragonPaper) is a paper wallet generator that can be run completely offline.
```sh
./src/dragonxd -gen -genproclimit=$(nproc) -mineraddress=<your_zaddr>
```
# What is HushChat?
## Attribution
HushChat is a protocol inspired by the design of Signal Protocol, it uses many of the same cryptography and ideas, but does not actually use any code from Signal. Signal requires phone numbers and is a centralized service. HushChat is completely anonymous and decentralized and requires absolutely no metadata be given to any centralized third parties.
DragonX is a fork of the [Hush Full Node](https://hush.is).
Based on code from Zcash, Komodo, and Bitcoin Core.
Licensed under GPLv3 — see [COPYING](COPYING) and [LICENSE](LICENSE).
# Can I mine with CPU or GPU?
Hush cannot be efficiently mined with CPU or GPU, only ASIC mining is recommended. HUSH uses Equihash (200,9) algo, as does Zcash, Horizen or Komodo.
# Where can I buy Hush?
1. https://nonkyc.io/market/HUSH_BTC
1. https://tradeogre.com/exchange/BTC-HUSH
# Where can I spend Hush?
AgoraX market: https://agorax.is
# Earn Hush bounty
Developers can earn bounty by fixing bugs or solving feature requests listed in `Issues->Label`:
- https://git.hush.is/hush/hush3/issues
- https://git.hush.is/hush/SilentDragon/issues
- https://git.hush.is/hush/SilentDragonLite/issues
![Logo](doc/hush/earnhush.png "Hush Bounty")
# Support and Socials
* Telegram: [https://hush.is/tg](https://hush.is/tg)
* Matrix: [https://hush.is/matrix](https://hush.is/matrix)
* Twitter: [https://hush.is/twitter](https://hush.is/twitter)
* PeerTube [https://hush.is/peertube](https://hush.is/peertube)
# License
## License
For license information see the file [COPYING](COPYING).

View File

@@ -1,3 +1,7 @@
dnl Copyright (c) 2024-2026 The DragonX developers
dnl Copyright (c) 2016-2024 The Hush developers
dnl Distributed under the GPLv3 software license, see the accompanying
dnl file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 1)

View File

@@ -1,3 +1,12 @@
dragonx (1.0.0) stable; urgency=medium
* Initial release of DragonX, forked from Hush Full Node
* Full legal-compliant rebrand: binaries, config, documentation
* 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
hush (3.10.5) stable; urgency=medium
* DragonX is no longer supported by this codebase

View File

@@ -1,18 +1,18 @@
Source: hush
Source: dragonx
Section: utils
Priority: optional
Maintainer: Hush <myhushteam@gmail.com>
Homepage: https://hush.is
Maintainer: DragonX <dan-s-dev@proton.me>
Homepage: https://dragonx.is
Build-Depends: autoconf, automake, bsdmainutils, build-essential,
cmake, curl, git, g++-multilib, libc6-dev, libsodium-dev,
libtool, m4, ncurses-dev, pkg-config, python,
unzip, wget, zlib1g-dev
Vcs-Git: https://git.hush.is/hush/hush3.git
Vcs-Browser: https://git.hush.is/hush/hush3
Vcs-Git: https://git.dragonx.is/DragonX/dragonx.git
Vcs-Browser: https://git.dragonx.is/DragonX/dragonx
Package: hush
Package: dragonx
Architecture: amd64 arm64
Depends: ${shlibs:Depends}
Description: Cryptocoin full node for Hush
Speak And Transact Freely with Hush, which inherits from Bitcoin Protocol and
Zcash Protocol and is focused on private communications.
Description: Privacy-focused cryptocurrency full node for DragonX
DragonX is a privacy-focused cryptocurrency using RandomX proof-of-work.
All transactions are shielded by default. Fork of the Hush Full Node.

View File

@@ -1,8 +1,9 @@
Files: *
Copyright: 2016-2026, The Hush developers
Copyright: 2024-2026, The DragonX developers
2016-2026, The Hush developers
2009-2016, Bitcoin Core developers
License: GPLv3
Comment: https://hush.is
Comment: https://dragonx.is
Files: depends/sources/libsodium-*.tar.gz
Copyright: 2013-2016 Frank Denis

View File

@@ -0,0 +1 @@
DEBIAN/examples/DRAGONX.conf

View File

@@ -0,0 +1,3 @@
usr/bin/dragonxd
usr/bin/dragonx-cli
usr/bin/dragonx-tx

View File

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

View File

@@ -0,0 +1,209 @@
## DRAGONX.conf configuration file. Lines beginning with # are comments.
# Network-related settings:
# Run a regression test network
#regtest=0
# Run a test node (which means you can mine with no peers)
#testnode=1
#set a custom client name/user agent
#clientName=GoldenSandtrout
# Rescan from block height
#rescan=123
# Connect via a SOCKS5 proxy
#proxy=127.0.0.1:9050
# Automatically create Tor hidden service
#listenonion=1
#Use separate SOCKS5 proxy to reach peers via Tor hidden services
#onion=1.2.3.4:9050
# Only connect to nodes in network <net> (ipv4, ipv6, onion or i2p)"));
#onlynet=<net>
#Tor control port to use if onion listening enabled
#torcontrol=127.0.0.1:9051
# Bind to given address and always listen on it. Use [host]:port notation for IPv6
#bind=<addr>
# Bind to given address and allowlist peers connecting to it. Use [host]:port notation for IPv6
#allowbind=<addr>
##############################################################
## Quick Primer on addnode vs connect ##
## Let's say for instance you use addnode=4.2.2.4 ##
## addnode will connect you to and tell you about the ##
## nodes connected to 4.2.2.4. In addition it will tell ##
## the other nodes connected to it that you exist so ##
## they can connect to you. ##
## connect will not do the above when you 'connect' to it. ##
## It will *only* connect you to 4.2.2.4 and no one else.##
## ##
## So if you're behind a firewall, or have other problems ##
## finding nodes, add some using 'addnode'. ##
## ##
## If you want to stay private, use 'connect' to only ##
## connect to "trusted" nodes. ##
## ##
## If you run multiple nodes on a LAN, there's no need for ##
## all of them to open lots of connections. Instead ##
## 'connect' them all to one node that is port forwarded ##
## and has lots of connections. ##
## Thanks goes to [Noodle] on Freenode. ##
##############################################################
# Use as many addnode= settings as you like to connect to specific peers
#addnode=69.164.218.197
#addnode=10.0.0.2:8233
# Alternatively use as many connect= settings as you like to connect ONLY to specific peers
#connect=69.164.218.197
#connect=10.0.0.1:8233
# Listening mode, enabled by default except when 'connect' is being used
#listen=1
# Maximum number of inbound+outbound connections.
#maxconnections=
#
# JSON-RPC options (for controlling a running dragonxd process)
#
# server=1 tells node to accept JSON-RPC commands (set as default if not specified)
#server=1
# Bind to given address to listen for JSON-RPC connections. Use [host]:port notation for IPv6.
# This option can be specified multiple times (default: bind to all interfaces)
#rpcbind=<addr>
# You must set rpcuser and rpcpassword to secure the JSON-RPC api
# These will automatically be created for you
#rpcuser=user
#rpcpassword=supersecretpassword
# How many seconds node will wait for a complete RPC HTTP request.
# after the HTTP connection is established.
#rpcclienttimeout=30
# By default, only RPC connections from localhost are allowed.
# Specify as many rpcallowip= settings as you like to allow connections from other hosts,
# either as a single IPv4/IPv6 or with a subnet specification.
# NOTE: opening up the RPC port to hosts outside your local trusted network is NOT RECOMMENDED,
# because the rpcpassword is transmitted over the network unencrypted and also because anyone
# that can authenticate on the RPC port can steal your keys + take over the account running dragonxd
#rpcallowip=10.1.1.34/255.255.255.0
#rpcallowip=1.2.3.4/24
#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96
# Listen for RPC connections on this TCP port:
#rpcport=1234
# You can use dragonxd to send commands to dragonxd
# running on another host using this option:
#rpcconnect=127.0.0.1
# Transaction Fee
# Send transactions as zero-fee transactions if possible (default: 0)
#sendfreetransactions=0
# Create transactions that have enough fees (or priority) so they are likely to # begin confirmation within n blocks (default: 1).
# This setting is overridden by the -paytxfee option.
#txconfirmtarget=n
# Miscellaneous options
# Enable mining at startup
#gen=1
# Set the number of threads to be used for mining (-1 = all cores).
#genproclimit=1
# Specify a different Equihash solver (e.g. "tromp") to try to mine
# faster when gen=1.
#equihashsolver=default
# Pre-generate this many public/private key pairs, so wallet backups will be valid for
# both prior transactions and several dozen future transactions.
#keypool=100
# Pay an optional transaction fee every time you send a tx. Transactions with fees
# are more likely than free transactions to be included in generated blocks, so may
# be validated sooner. This setting does not affect private transactions created with
# 'z_sendmany'.
#paytxfee=0.00
#Rewind the chain to specific block height. This is useful for creating snapshots at a given block height.
#rewind=555
#Stop the chain a specific block height. This is useful for creating snapshots at a given block height.
#stopat=1000000
#Set an address to use as change address for all transactions. This value must be set to a 33 byte pubkey. All mined coins will also be sent to this address.
#pubkey=027dc7b5cfb5efca96674b45e9fda18df069d040b9fd9ff32c35df56005e330392
# Disable clearnet (ipv4 and ipv6) connections to this node
#clearnet=0
# Disable ipv4
#disableipv4=1
# Disable ipv6
#disableipv6=1
# Enable transaction index
#txindex=1
# Enable address index
#addressindex=1
# Enable timestamp index
#timestampindex=1
# Enable spent index
#spentindex=1
# Enable shielded stats index
#zindex=1
# Attempt to salvage a corrupt wallet
# salvagewallet=1
# Mine all blocks to this address (not good for your privacy and not recommended!)
# Disallowed if clearnet=0
# mineraddress=XXX
# Disable wallet
#disablewallet=1
# Allow mining to an address that is not in the current wallet
#minetolocalwallet=0
# Delete all wallet transactions
#zapwallettxes=1
# Enable sapling consolidation
# consolidation=1
# Enable stratum server
# stratum=1
# Run a command each time a new block is seen
# %s in command is replaced by block hash
#blocknotify=/my/awesome/script.sh %s
# Run a command when wallet gets a new tx
# %s in command is replaced with txid
#walletnotify=/my/cool/script.sh %s
# Run a command when tx expires
# %s in command is replaced with txid
#txexpirynotify=/my/elite/script.sh %s
# Execute this commend to send a tx
# %s is replaced with tx hex
#txsend=/send/it.sh %s

View File

@@ -1 +1 @@
DEBIAN/examples/HUSH3.conf
DEBIAN/examples/DRAGONX.conf

View File

@@ -1,3 +1,3 @@
usr/bin/hushd
usr/bin/hush-cli
usr/bin/hush-tx
usr/bin/dragonxd
usr/bin/dragonx-cli
usr/bin/dragonx-tx

View File

@@ -1,3 +1,3 @@
DEBIAN/manpages/hush-cli.1
DEBIAN/manpages/hush-tx.1
DEBIAN/manpages/hushd.1
DEBIAN/manpages/dragonx-cli.1
DEBIAN/manpages/dragonx-tx.1
DEBIAN/manpages/dragonxd.1

View File

@@ -2,11 +2,11 @@
Sample configuration files for:
SystemD: hushd.service
Upstart: hushd.conf
OpenRC: hushd.openrc
hushd.openrcconf
CentOS: hushd.init
SystemD: dragonxd.service
Upstart: dragonxd.conf
OpenRC: dragonxd.openrc
dragonxd.openrcconf
CentOS: dragonxd.init
have been made available to assist packagers in creating node packages here.

View File

@@ -0,0 +1,59 @@
description "Hush Daemon"
start on runlevel [2345]
stop on starting rc RUNLEVEL=[016]
env HUSHD_BIN="/usr/bin/dragonxd"
env HUSHD_USER="hush"
env HUSHD_GROUP="hush"
env HUSHD_PIDDIR="/var/run/dragonxd"
# upstart can't handle variables constructed with other variables
env HUSHD_PIDFILE="/var/run/dragonxd/dragonxd.pid"
env HUSHD_CONFIGFILE="/etc/hush/hush.conf"
env HUSHD_DATADIR="/var/lib/dragonxd"
expect fork
respawn
respawn limit 5 120
kill timeout 60
pre-start script
# this will catch non-existent config files
# dragonxd will check and exit with this very warning, but it can do so
# long after forking, leaving upstart to think everything started fine.
# since this is a commonly encountered case on install, just check and
# warn here.
if ! grep -qs '^rpcpassword=' "$HUSHD_CONFIGFILE" ; then
echo "ERROR: You must set a secure rpcpassword to run dragonxd."
echo "The setting must appear in $HUSHD_CONFIGFILE"
echo
echo "This password is security critical to securing wallets "
echo "and must not be the same as the rpcuser setting."
echo "You can generate a suitable random password using the following"
echo "command from the shell:"
echo
echo "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'"
echo
exit 1
fi
mkdir -p "$HUSHD_PIDDIR"
chmod 0755 "$HUSHD_PIDDIR"
chown $HUSHD_USER:$HUSHD_GROUP "$HUSHD_PIDDIR"
chown $HUSHD_USER:$HUSHD_GROUP "$HUSHD_CONFIGFILE"
chmod 0660 "$HUSHD_CONFIGFILE"
end script
exec start-stop-daemon \
--start \
--pidfile "$HUSHD_PIDFILE" \
--chuid $HUSHD_USER:$HUSHD_GROUP \
--exec "$HUSHD_BIN" \
-- \
-pid="$HUSHD_PIDFILE" \
-conf="$HUSHD_CONFIGFILE" \
-datadir="$HUSHD_DATADIR" \
-disablewallet \
-daemon

View File

@@ -0,0 +1,67 @@
#!/usr/bin/env bash
#
# dragonxd The hush core server.
#
#
# chkconfig: 345 80 20
# description: dragonxd
# processname: dragonxd
#
# Source function library.
. /etc/init.d/functions
# you can override defaults in /etc/sysconfig/dragonxd, see below
if [ -f /etc/sysconfig/dragonxd ]; then
. /etc/sysconfig/dragonxd
fi
RETVAL=0
prog=dragonxd
# you can override the lockfile via HUSHD_LOCKFILE in /etc/sysconfig/dragonxd
lockfile=${HUSHD_LOCKFILE-/var/lock/subsys/dragonxd}
# dragonxd defaults to /usr/bin/dragonxd, override with HUSHD_BIN
dragonxd=${HUSHD_BIN-/usr/bin/dragonxd}
# dragonxd opts default to -disablewallet, override with HUSHD_OPTS
dragonxd_opts=${HUSHD_OPTS--disablewallet}
start() {
echo -n $"Starting $prog: "
daemon $DAEMONOPTS $dragonxd $dragonxd_opts
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $lockfile
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
stop
start
;;
*)
echo "Usage: service $prog {start|stop|status|restart}"
exit 1
;;
esac

View File

@@ -0,0 +1,87 @@
#!/sbin/runscript
# backward compatibility for existing gentoo layout
#
if [ -d "/var/lib/hush/.hush" ]; then
HUSHD_DEFAULT_DATADIR="/var/lib/hush/.hush"
else
HUSHD_DEFAULT_DATADIR="/var/lib/dragonxd"
fi
HUSHD_CONFIGFILE=${HUSHD_CONFIGFILE:-/etc/hush/hush.conf}
HUSHD_PIDDIR=${HUSHD_PIDDIR:-/var/run/dragonxd}
HUSHD_PIDFILE=${HUSHD_PIDFILE:-${HUSHD_PIDDIR}/dragonxd.pid}
HUSHD_DATADIR=${HUSHD_DATADIR:-${HUSHD_DEFAULT_DATADIR}}
HUSHD_USER=${HUSHD_USER:-${HUSH_USER:-hush}}
HUSHD_GROUP=${HUSHD_GROUP:-hush}
HUSHD_BIN=${HUSHD_BIN:-/usr/bin/dragonxd}
HUSHD_NICE=${HUSHD_NICE:-${NICELEVEL:-0}}
HUSHD_OPTS="${HUSHD_OPTS:-${HUSH_OPTS}}"
name="Hush Full Node Daemon"
description="Hush cryptocurrency P2P network daemon"
command="/usr/bin/dragonxd"
command_args="-pid=\"${HUSHD_PIDFILE}\" \
-conf=\"${HUSHD_CONFIGFILE}\" \
-datadir=\"${HUSHD_DATADIR}\" \
-daemon \
${HUSHD_OPTS}"
required_files="${HUSHD_CONFIGFILE}"
start_stop_daemon_args="-u ${HUSHD_USER} \
-N ${HUSHD_NICE} -w 2000"
pidfile="${HUSHD_PIDFILE}"
# The retry schedule to use when stopping the daemon. Could be either
# a timeout in seconds or multiple signal/timeout pairs (like
# "SIGKILL/180 SIGTERM/300")
retry="${HUSHD_SIGTERM_TIMEOUT}"
depend() {
need localmount net
}
# verify
# 1) that the datadir exists and is writable (or create it)
# 2) that a directory for the pid exists and is writable
# 3) ownership and permissions on the config file
start_pre() {
checkpath \
-d \
--mode 0750 \
--owner "${HUSHD_USER}:${HUSHD_GROUP}" \
"${HUSHD_DATADIR}"
checkpath \
-d \
--mode 0755 \
--owner "${HUSHD_USER}:${HUSHD_GROUP}" \
"${HUSHD_PIDDIR}"
checkpath -f \
-o ${HUSHD_USER}:${HUSHD_GROUP} \
-m 0660 \
${HUSHD_CONFIGFILE}
checkconfig || return 1
}
checkconfig()
{
if ! grep -qs '^rpcpassword=' "${HUSHD_CONFIGFILE}" ; then
eerror ""
eerror "ERROR: You must set a secure rpcpassword to run dragonxd."
eerror "The setting must appear in ${HUSHD_CONFIGFILE}"
eerror ""
eerror "This password is security critical to securing wallets "
eerror "and must not be the same as the rpcuser setting."
eerror "You can generate a suitable random password using the following"
eerror "command from the shell:"
eerror ""
eerror "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'"
eerror ""
eerror ""
return 1
fi
}

View File

@@ -0,0 +1,33 @@
# /etc/conf.d/dragonxd: config file for /etc/init.d/dragonxd
# Config file location
#HUSHD_CONFIGFILE="/etc/hush/hush.conf"
# What directory to write pidfile to? (created and owned by $HUSHD_USER)
#HUSHD_PIDDIR="/var/run/dragonxd"
# What filename to give the pidfile
#HUSHD_PIDFILE="${HUSHD_PIDDIR}/dragonxd.pid"
# Where to write dragonxd data (be mindful that the blockchain is large)
#HUSHD_DATADIR="/var/lib/dragonxd"
# User and group to own dragonxd process
#HUSHD_USER="hush"
#HUSHD_GROUP="hush"
# Path to dragonxd executable
#HUSHD_BIN="/usr/bin/dragonxd"
# Nice value to run dragonxd under
#HUSHD_NICE=0
# Additional options (avoid -conf and -datadir, use flags above)
HUSHD_OPTS="-disablewallet"
# The timeout in seconds OpenRC will wait for dragonxd to terminate
# after a SIGTERM has been raised.
# Note that this will be mapped as argument to start-stop-daemon's
# '--retry' option, which means you can specify a retry schedule
# here. For more information see man 8 start-stop-daemon.
HUSHD_SIGTERM_TIMEOUT=60

View File

@@ -0,0 +1,22 @@
[Unit]
Description=Hush: Speak And Transact Freely
After=network.target
[Service]
User=hush
Group=hush
Type=forking
PIDFile=/var/lib/dragonxd/dragonxd.pid
ExecStart=/usr/bin/dragonxd -daemon -pid=/var/lib/dragonxd/dragonxd.pid \
-conf=/etc/hush/hush.conf -datadir=/var/lib/dragonxd -disablewallet
Restart=always
PrivateTmp=true
TimeoutStopSec=60s
TimeoutStartSec=2s
StartLimitInterval=120s
StartLimitBurst=5
[Install]
WantedBy=multi-user.target

7
doc/beefy-DRAGONX.conf Normal file
View File

@@ -0,0 +1,7 @@
rpcuser=dontuseweakusernameoryougetrobbed
rpcpassword=dontuseweakpasswordoryougetrobbed
txindex=1
server=1
rpcworkqueue=64
addnode=1.2.3.4
addnode=5.6.7.8

29
doc/dragonxd-systemd.md Normal file
View File

@@ -0,0 +1,29 @@
# Systemd script for the DragonX daemon
## Set it up
First set it up as follows:
* Copy dragonxd.service to the systemd user directory, which is /usr/lib/systemd/user directory
## Basic Usage
How to start the script:
`systemctl start --user dragonxd.service`
How to stop the script:
`systemctl stop --user dragonxd.service`
How to restart the script:
`systemctl restart --user dragonxd.service`
## How to watch it as it starts
Use the following on most Linux distros:
`watch systemctl status --user dragonxd.service`
Or watch the log directly:
`tail -f ~/.hush/DRAGONX/debug.log`
## Troubleshooting
* Don't run it with sudo or root, or it won't work with the wallet.

9
doc/dragonxd.service Normal file
View File

@@ -0,0 +1,9 @@
[Unit]
Description=DragonX daemon
After=network.target
[Service]
ExecStart=/usr/bin/dragonxd
[Install]
WantedBy=default.target

View File

@@ -1,37 +1,37 @@
*** Warning: This document has not been updated for Hush and may be inaccurate. ***
Sample init scripts and service configuration for bitcoind
Sample init scripts and service configuration for dragonxd
==========================================================
Sample scripts and configuration files for systemd, Upstart and OpenRC
can be found in the contrib/init folder.
contrib/init/bitcoind.service: systemd service unit configuration
contrib/init/bitcoind.openrc: OpenRC compatible SysV style init script
contrib/init/bitcoind.openrcconf: OpenRC conf.d file
contrib/init/bitcoind.conf: Upstart service configuration file
contrib/init/bitcoind.init: CentOS compatible SysV style init script
contrib/init/dragonxd.service: systemd service unit configuration
contrib/init/dragonxd.openrc: OpenRC compatible SysV style init script
contrib/init/dragonxd.openrcconf: OpenRC conf.d file
contrib/init/dragonxd.conf: Upstart service configuration file
contrib/init/dragonxd.init: CentOS compatible SysV style init script
1. Service User
---------------------------------
All three startup configurations assume the existence of a "bitcoin" user
All three startup configurations assume the existence of a "dragonx" user
and group. They must be created before attempting to use these scripts.
2. Configuration
---------------------------------
At a bare minimum, bitcoind requires that the rpcpassword setting be set
At a bare minimum, dragonxd requires that the rpcpassword setting be set
when running as a daemon. If the configuration file does not exist or this
setting is not set, bitcoind will shutdown promptly after startup.
setting is not set, dragonxd will shutdown promptly after startup.
This password does not have to be remembered or typed as it is mostly used
as a fixed token that bitcoind and client programs read from the configuration
as a fixed token that dragonxd and client programs read from the configuration
file, however it is recommended that a strong and secure password be used
as this password is security critical to securing the wallet should the
wallet be enabled.
If bitcoind is run with "-daemon" flag, and no rpcpassword is set, it will
If dragonxd is run with "-daemon" flag, and no rpcpassword is set, it will
print a randomly generated suitable password to stderr. You can also
generate one from the shell yourself like this:
@@ -39,24 +39,24 @@ bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'
For an example configuration file that describes the configuration settings,
see contrib/debian/examples/bitcoin.conf.
see contrib/debian/examples/DRAGONX.conf.
3. Paths
---------------------------------
All three configurations assume several paths that might need to be adjusted.
Binary: /usr/bin/bitcoind
Configuration file: /etc/bitcoin/bitcoin.conf
Data directory: /var/lib/bitcoind
PID file: /var/run/bitcoind/bitcoind.pid (OpenRC and Upstart)
/var/lib/bitcoind/bitcoind.pid (systemd)
Lock file: /var/lock/subsys/bitcoind (CentOS)
Binary: /usr/bin/dragonxd
Configuration file: /etc/dragonx/DRAGONX.conf
Data directory: /var/lib/dragonxd
PID file: /var/run/dragonxd/dragonxd.pid (OpenRC and Upstart)
/var/lib/dragonxd/dragonxd.pid (systemd)
Lock file: /var/lock/subsys/dragonxd (CentOS)
The configuration file, PID directory (if applicable) and data directory
should all be owned by the bitcoin user and group. It is advised for security
should all be owned by the dragonx user and group. It is advised for security
reasons to make the configuration file and data directory only readable by the
bitcoin user and group. Access to bitcoin-cli and other bitcoind rpc clients
dragonx user and group. Access to dragonx-cli and other dragonxd rpc clients
can then be controlled by group membership.
4. Installing Service Configuration
@@ -68,19 +68,19 @@ Installing this .service file consists of just copying it to
/usr/lib/systemd/system directory, followed by the command
"systemctl daemon-reload" in order to update running systemd configuration.
To test, run "systemctl start bitcoind" and to enable for system startup run
"systemctl enable bitcoind"
To test, run "systemctl start dragonxd" and to enable for system startup run
"systemctl enable dragonxd"
4b) OpenRC
Rename bitcoind.openrc to bitcoind and drop it in /etc/init.d. Double
Rename dragonxd.openrc to dragonxd and drop it in /etc/init.d. Double
check ownership and permissions and make it executable. Test it with
"/etc/init.d/bitcoind start" and configure it to run on startup with
"rc-update add bitcoind"
"/etc/init.d/dragonxd start" and configure it to run on startup with
"rc-update add dragonxd"
4c) Upstart (for Debian/Ubuntu based distributions)
Drop bitcoind.conf in /etc/init. Test by running "service bitcoind start"
Drop dragonxd.conf in /etc/init. Test by running "service dragonxd start"
it will automatically start on reboot.
NOTE: This script is incompatible with CentOS 5 and Amazon Linux 2014 as they
@@ -88,11 +88,11 @@ use old versions of Upstart and do not supply the start-stop-daemon utility.
4d) CentOS
Copy bitcoind.init to /etc/init.d/bitcoind. Test by running "service bitcoind start".
Copy dragonxd.init to /etc/init.d/dragonxd. Test by running "service dragonxd start".
Using this script, you can adjust the path and flags to the bitcoind program by
setting the BITCOIND and FLAGS environment variables in the file
/etc/sysconfig/bitcoind. You can also use the DAEMONOPTS environment variable here.
Using this script, you can adjust the path and flags to the dragonxd program by
setting the DRAGONXD and FLAGS environment variables in the file
/etc/sysconfig/dragonxd. You can also use the DAEMONOPTS environment variable here.
5. Auto-respawn
-----------------------------------

View File

@@ -1 +1 @@
dist_man1_MANS=hushd.1 hush-cli.1 hush-tx.1
dist_man1_MANS=dragonxd.1 dragonx-cli.1 dragonx-tx.1

91
doc/man/dragonx-cli.1 Normal file
View File

@@ -0,0 +1,91 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DRAGONX-CLI "1" "March 2026" "dragonx-cli v1.0.0" "User Commands"
.SH NAME
dragonx-cli \- manual page for dragonx-cli v1.0.0
.SH DESCRIPTION
DragonX RPC client version v1.0.0\-04916cdf5
.PP
In order to ensure you are adequately protecting your privacy when using DragonX,
please see <https://dragonx.is>.
.SS "Usage:"
.TP
dragonx\-cli [options] <command> [params]
Send command to DragonX
.TP
dragonx\-cli [options] help
List commands
.TP
dragonx\-cli [options] help <command>
Get help for a command
.SH OPTIONS
.HP
\-?
.IP
This help message
.HP
\fB\-conf=\fR<file>
.IP
Specify configuration file (default: DRAGONX.conf)
.HP
\fB\-datadir=\fR<dir>
.IP
Specify data directory (this path cannot use '~')
.HP
\fB\-testnet\fR
.IP
Use the test network
.HP
\fB\-regtest\fR
.IP
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.
.HP
\fB\-rpcconnect=\fR<ip>
.IP
Send commands to node running on <ip> (default: 127.0.0.1)
.HP
\fB\-rpcport=\fR<port>
.IP
Connect to JSON\-RPC on <port> (default: 18030 )
.HP
\fB\-rpcwait\fR
.IP
Wait for RPC server to start
.HP
\fB\-rpcuser=\fR<user>
.IP
Username for JSON\-RPC connections
.HP
\fB\-rpcpassword=\fR<pw>
.IP
Password for JSON\-RPC connections
.HP
\fB\-rpcclienttimeout=\fR<n>
.IP
Timeout in seconds during HTTP requests, or 0 for no timeout. (default:
900)
.HP
\fB\-stdin\fR
.IP
Read extra arguments from standard input, one per line until EOF/Ctrl\-D
(recommended for sensitive information such as passphrases)
.SH COPYRIGHT
In order to ensure you are adequately protecting your privacy when using DragonX,
please see <https://dragonx.is>.
Copyright (C) 2024-2026 The DragonX Developers
Copyright (C) 2016-2026 Duke Leto and The Hush Developers
Copyright (C) 2016-2020 jl777 and SuperNET developers
Copyright (C) 2016-2018 The Zcash developers
Copyright (C) 2009-2014 The Bitcoin Core developers
This is experimental Free Software! Fuck Yeah!!!!!
Distributed under the GPLv3 software license, see the accompanying file COPYING
or <https://www.gnu.org/licenses/gpl-3.0.en.html>.

105
doc/man/dragonx-tx.1 Normal file
View File

@@ -0,0 +1,105 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DRAGONX-TX "1" "March 2026" "dragonx-tx v1.0.0" "User Commands"
.SH NAME
dragonx-tx \- manual page for dragonx-tx v1.0.0
.SH DESCRIPTION
DragonX TX utility version v1.0.0\-04916cdf5
.SS "Usage:"
.TP
dragonx\-tx [options] <hex\-tx> [commands]
Update hex\-encoded DragonX transaction
.TP
dragonx\-tx [options] \fB\-create\fR [commands]
Create hex\-encoded DragonX transaction
.SH OPTIONS
.HP
\-?
.IP
This help message
.HP
\fB\-create\fR
.IP
Create new, empty TX.
.HP
\fB\-json\fR
.IP
Select JSON output
.HP
\fB\-txid\fR
.IP
Output only the hex\-encoded transaction id of the resultant transaction.
.HP
\fB\-regtest\fR
.IP
Enter regression test mode, which uses a special chain in which blocks
can be solved instantly.
.HP
\fB\-testnet\fR
.IP
Use the test network
.PP
Commands:
.IP
delin=N
.IP
Delete input N from TX
.IP
delout=N
.IP
Delete output N from TX
.IP
in=TXID:VOUT(:SEQUENCE_NUMBER)
.IP
Add input to TX
.IP
locktime=N
.IP
Set TX lock time to N
.IP
nversion=N
.IP
Set TX version to N
.IP
outaddr=VALUE:ADDRESS
.IP
Add address\-based output to TX
.IP
outscript=VALUE:SCRIPT
.IP
Add raw script output to TX
.IP
sign=HEIGHT:SIGHASH\-FLAGS
.IP
Add zero or more signatures to transaction. This command requires JSON
registers:prevtxs=JSON object, privatekeys=JSON object. See
signrawtransaction docs for format of sighash flags, JSON
objects.
.PP
Register Commands:
.IP
load=NAME:FILENAME
.IP
Load JSON file FILENAME into register NAME
.IP
set=NAME:JSON\-STRING
.IP
Set register NAME to given JSON\-STRING
.SH COPYRIGHT
In order to ensure you are adequately protecting your privacy when using DragonX,
please see <https://dragonx.is>.
Copyright (C) 2024-2026 The DragonX Developers
Copyright (C) 2016-2026 Duke Leto and The Hush Developers
Copyright (C) 2016-2020 jl777 and SuperNET developers
Copyright (C) 2016-2018 The Zcash developers
Copyright (C) 2009-2014 The Bitcoin Core developers
This is experimental Free Software! Fuck Yeah!!!!!
Distributed under the GPLv3 software license, see the accompanying file COPYING
or <https://www.gnu.org/licenses/gpl-3.0.en.html>.

781
doc/man/dragonxd.1 Normal file
View File

@@ -0,0 +1,781 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH DRAGONXD "1" "March 2026" "dragonxd v1.0.0" "User Commands"
.SH NAME
dragonxd \- manual page for dragonxd v1.0.0
.SH DESCRIPTION
DragonX Daemon version v1.0.0\-04916cdf5
.PP
In order to ensure you are adequately protecting your privacy when using DragonX,
please see <https://dragonx.is>.
.SS "Usage:"
.TP
dragonxd [options]
Start a DragonX Daemon
.SH OPTIONS
.HP
\-?
.IP
This help message
.HP
\fB\-blocknotify=\fR<cmd>
.IP
Execute command when the best block changes (%s in cmd is replaced by
block hash)
.HP
\fB\-checkblocks=\fR<n>
.IP
How many blocks to check at startup (default: 288, 0 = all)
.HP
\fB\-checklevel=\fR<n>
.IP
How thorough the block verification of \fB\-checkblocks\fR is (0\-4, default: 3)
.HP
\fB\-clientname=\fR<SomeName>
.IP
Full node client name, default 'GoldenSandtrout'
.HP
\fB\-conf=\fR<file>
.IP
Specify configuration file (default: DRAGONX.conf)
.HP
\fB\-daemon\fR
.IP
Run in the background as a daemon and accept commands
.HP
\fB\-datadir=\fR<dir>
.IP
Specify data directory (this path cannot use '~')
.HP
\fB\-exportdir=\fR<dir>
.IP
Specify directory to be used when exporting data
.HP
\fB\-dbcache=\fR<n>
.IP
Set database cache size in megabytes (4 to 16384, default: 512)
.HP
\fB\-loadblock=\fR<file>
.IP
Imports blocks from external blk000??.dat file on startup
.HP
\fB\-maxdebugfilesize=\fR<n>
.IP
Set the max size of the debug.log file (default: 15)
.HP
\fB\-maxorphantx=\fR<n>
.IP
Keep at most <n> unconnectable transactions in memory (default: 100)
.HP
\fB\-maxreorg=\fR<n>
.IP
Specify the maximum length of a blockchain re\-organization
.HP
\fB\-mempooltxinputlimit=\fR<n>
.IP
[DEPRECATED/IGNORED] Set the maximum number of transparent inputs in a
transaction that the mempool will accept (default: 0 = no limit
applied)
.HP
\fB\-par=\fR<n>
.IP
Set the number of script verification threads (\fB\-32\fR to 16, 0 = auto, <0 =
leave that many cores free, default: 0)
.HP
\fB\-pid=\fR<file>
.IP
Specify pid file (default: dragonxd.pid)
.HP
\fB\-txexpirynotify=\fR<cmd>
.IP
Execute command when transaction expires (%s in cmd is replaced by
transaction id)
.HP
\fB\-prune=\fR<n>
.IP
Reduce storage requirements by pruning (deleting) old blocks. This mode
disables wallet support and is incompatible with \fB\-txindex\fR.
Warning: Reverting this setting requires re\-downloading the
entire blockchain. (default: 0 = disable pruning blocks, >550 =
target size in MiB to use for block files)
.HP
\fB\-reindex\fR
.IP
Rebuild block chain index from current blk000??.dat files on startup
.HP
\fB\-sysperms\fR
.IP
Create new files with system default permissions, instead of umask 077
(only effective with disabled wallet functionality)
.HP
\fB\-txindex\fR
.IP
Maintain a full transaction index, used by the getrawtransaction rpc
call (default: 0)
.HP
\fB\-txsend=\fR<cmd>
.IP
Execute command to send a transaction instead of broadcasting (%s in cmd
is replaced by transaction hex)
.HP
\fB\-addressindex\fR
.IP
Maintain a full address index, used to query for the balance, txids and
unspent outputs for addresses (default: 0)
.HP
\fB\-timestampindex\fR
.IP
Maintain a timestamp index for block hashes, used to query blocks hashes
by a range of timestamps (default: 0)
.HP
\fB\-spentindex\fR
.IP
Maintain a full spent index, used to query the spending txid and input
index for an outpoint (default: 0)
.HP
\fB\-zindex\fR
.IP
Maintain extra statistics about shielded transactions and payments
(default: 0)
.PP
Connection options:
.HP
\fB\-addnode=\fR<ip>
.IP
Add a node to connect to and attempt to keep the connection open
.HP
\fB\-asmap=\fR<file>
.IP
Specify ASN mapping used for bucketing of the peers (default:
asmap.dat). Relative paths will be prefixed by the net\-specific
datadir location.
.HP
\fB\-banscore=\fR<n>
.IP
Threshold for disconnecting misbehaving peers (default: 100)
.HP
\fB\-bantime=\fR<n>
.IP
Number of seconds to keep misbehaving peers from reconnecting (default:
86400)
.HP
\fB\-bind=\fR<addr>
.IP
Bind to given address and always listen on it. Use [host]:port notation
for IPv6
.HP
\fB\-connect=\fR<ip>
.IP
Connect only to the specified node(s)
.HP
\fB\-discover\fR
.IP
Discover own IP addresses (default: 1 when listening and no \fB\-externalip\fR
or \fB\-proxy\fR)
.HP
\fB\-dns\fR
.IP
Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (default: 1)
.HP
\fB\-dnsseed\fR
.IP
Query for peer addresses via DNS lookup, if low on addresses (default: 1
unless \fB\-connect\fR)
.HP
\fB\-externalip=\fR<ip>
.IP
Specify your own public address
.HP
\fB\-forcednsseed\fR
.IP
Always query for peer addresses via DNS lookup (default: 0)
.HP
\fB\-listen\fR
.IP
Accept connections from outside (default: 1 if no \fB\-proxy\fR or \fB\-connect\fR)
.HP
\fB\-listenonion\fR
.IP
Automatically create Tor hidden service (default: 1)
.HP
\fB\-maxconnections=\fR<n>
.IP
Maintain at most <n> connections to peers (default: 384)
.HP
\fB\-maxreceivebuffer=\fR<n>
.IP
Maximum per\-connection receive buffer, <n>*1000 bytes (default: 5000)
.HP
\fB\-maxsendbuffer=\fR<n>
.IP
Maximum per\-connection send buffer, <n>*1000 bytes (default: 1000)
.HP
\fB\-onion=\fR<ip:port>
.IP
Use separate SOCKS5 proxy to reach peers via Tor hidden services
(default: \fB\-proxy\fR)
.HP
\fB\-nspv_msg\fR
.IP
Enable NSPV messages processing (default: true when \fB\-ac_private\fR=\fI\,1\/\fR,
otherwise false)
.HP
\fB\-i2psam=\fR<ip:port>
.IP
I2P SAM proxy to reach I2P peers and accept I2P connections (default:
none)
.HP
\fB\-i2pacceptincoming\fR
.IP
If set and \fB\-i2psam\fR is also set then incoming I2P connections are
accepted via the SAM proxy. If this is not set but \fB\-i2psam\fR is set
then only outgoing connections will be made to the I2P network.
Ignored if \fB\-i2psam\fR is not set. Listening for incoming I2P
connections is done through the SAM proxy, not by binding to a
local address and port (default: 1)
.HP
\fB\-onlynet=\fR<net>
.IP
Only connect to nodes in network <net> (ipv4, ipv6, onion or i2p)
.HP
\fB\-disableipv4\fR
.IP
Disable Ipv4 network connections (default: 0)
.HP
\fB\-disableipv6\fR
.IP
Disable Ipv6 network connections (default: 0)
.HP
\fB\-clearnet\fR
.IP
Enable clearnet connections. Setting to 0 will disable clearnet and use
sane defaults for Tor/i2p (default: 1)
.HP
\fB\-permitbaremultisig\fR
.IP
Relay non\-P2SH multisig (default: 1)
.HP
\fB\-peerbloomfilters\fR
.IP
Support filtering of blocks and transaction with Bloom filters (default:
1)
.HP
\fB\-port=\fR<port>
.IP
Listen for connections on <port> (default: 55555 or testnet: 55420)
.HP
\fB\-proxy=\fR<ip:port>
.IP
Connect through SOCKS5 proxy
.HP
\fB\-proxyrandomize\fR
.IP
Randomize credentials for every proxy connection. This enables Tor
stream isolation (default: 1)
.HP
\fB\-seednode=\fR<ip>
.IP
Connect to a node to retrieve peer addresses, and disconnect
.HP
\fB\-timeout=\fR<n>
.IP
Specify connection timeout in milliseconds (minimum: 1, default: 60000)
.HP
\fB\-torcontrol=\fR<ip>:<port>
.IP
Tor control port to use if onion listening enabled (default:
127.0.0.1:9051)
.HP
\fB\-torpassword=\fR<pass>
.IP
Tor control port password (default: empty)
.HP
\fB\-tls=\fR<option>
.IP
Specify TLS usage (default: 1 => enabled and required); Cannot be turned
off.
.HP
\fB\-tlsvalidate=\fR<0 or 1>
.IP
Connect to peers only with valid certificates (default: 0)
.HP
\fB\-tlskeypath=\fR<path>
.IP
Full path to a private key
.HP
\fB\-tlskeypwd=\fR<password>
.IP
Password for a private key encryption (default: not set, i.e. private
key will be stored unencrypted)
.HP
\fB\-tlscertpath=\fR<path>
.IP
Full path to a certificate
.HP
\fB\-tlstrustdir=\fR<path>
.IP
Full path to a trusted certificates directory
.HP
\fB\-allowbind=\fR<addr>
.IP
Bind to given address and allowlist peers connecting to it. Use
[host]:port notation for IPv6
.HP
\fB\-allowlist=\fR<netmask>
.IP
Allowlist peers connecting from the given netmask or IP address. Can be
specified multiple times. Allowlisted peers cannot be DoS banned
and their transactions are always relayed, even if they are
already in the mempool, useful e.g. for a gateway
.PP
Wallet options:
.HP
\fB\-disablewallet\fR
.IP
Do not load the wallet and disable wallet RPC calls
.HP
\fB\-keypool=\fR<n>
.IP
Set key pool size to <n> (default: 100)
.HP
\fB\-consolidation\fR
.IP
Enable auto Sapling note consolidation (default: false)
.HP
\fB\-consolidationinterval\fR
.IP
Block interval between consolidations (default: 25)
.HP
\fB\-consolidatesaplingaddress=\fR<zaddr>
.IP
Specify Sapling Address to Consolidate. (default: all)
.HP
\fB\-consolidationtxfee\fR
.IP
Fee amount in Puposhis used send consolidation transactions. (default
10000)
.HP
\fB\-zsweep\fR
.IP
Enable zaddr sweeping, automatically move all shielded funds to a one
address once per X blocks
.HP
\fB\-zsweepaddress=\fR<zaddr>
.IP
Specify the shielded address where swept funds will be sent)
.HP
\fB\-zsweepfee\fR
.IP
Fee amount in puposhis used send sweep transactions. (default 10000)
.HP
\fB\-zsweepinterval\fR
.IP
Sweep shielded funds every X blocks (default 5)
.HP
\fB\-zsweepmaxinputs\fR
.IP
Maximum number of shielded inputs to sweep per transaction (default 8)
.HP
\fB\-zsweepexternal\fR
.IP
Enable sweeping to an external wallet (default false)
.HP
\fB\-zsweepexclude\fR
.IP
Addresses to exclude from sweeping (default none)
.HP
\fB\-deletetx\fR
.IP
Enable Old Transaction Deletion
.HP
\fB\-deleteinterval\fR
.IP
Delete transaction every <n> blocks during inital block download
(default: 1000)
.HP
\fB\-keeptxnum\fR
.IP
Keep the last <n> transactions (default: 200)
.HP
\fB\-keeptxfornblocks\fR
.IP
Keep transactions for at least <n> blocks (default: 10000)
.HP
\fB\-paytxfee=\fR<amt>
.IP
Fee (in HUSH/kB) to add to transactions you send (default: 0.00)
.HP
\fB\-keepnotewitnesscache\fR
.IP
Keep partial Sapling Note Witness cache. Must be used with \fB\-rescanheight\fR
to find missing cache items.
.HP
\fB\-rescan\fR
.IP
Rescan the block chain for missing wallet transactions on startup
.HP
\fB\-rescanheight\fR
.IP
Rescan from specified height when rescan=1 on startup
.HP
\fB\-salvagewallet\fR
.IP
Attempt to recover private keys from a corrupt wallet.dat on startup
.HP
\fB\-sendfreetransactions\fR
.IP
Send transactions as zero\-fee transactions if possible (default: 0)
.HP
\fB\-spendzeroconfchange\fR
.IP
Spend unconfirmed change when sending transactions (default: 1)
.HP
\fB\-txconfirmtarget=\fR<n>
.IP
If paytxfee is not set, include enough fee so transactions begin
confirmation on average within n blocks (default: 2)
.HP
\fB\-txexpirydelta\fR
.IP
Set the number of blocks after which a transaction that has not been
mined will become invalid (default: 200)
.HP
\fB\-maxtxfee=\fR<amt>
.IP
Maximum total fees (in HUSH) to use in a single wallet transaction;
setting this too low may abort large transactions (default: 0.10)
.HP
\fB\-upgradewallet\fR
.IP
Upgrade wallet to latest format on startup
.HP
\fB\-wallet=\fR<file>
.IP
Specify wallet file absolute path or a path relative to the data
directory (default: wallet.dat)
.HP
\fB\-walletbroadcast\fR
.IP
Make the wallet broadcast transactions (default: 1)
.HP
\fB\-walletnotify=\fR<cmd>
.IP
Execute command when a wallet transaction changes (%s in cmd is replaced
by TxID)
.HP
\fB\-allowlistaddress=\fR<Raddress>
.IP
Enable the wallet filter for notary nodes and add one Raddress to the
allowlist of the wallet filter. If \fB\-allowlistaddress=\fR is used,
then the wallet filter is automatically activated. Several
Raddresses can be defined using several \fB\-allowlistaddress=\fR
(similar to \fB\-addnode\fR). The wallet filter will filter the utxo to
only ones coming from my own Raddress (derived from pubkey) and
each Raddress defined using \fB\-allowlistaddress=\fR this option is
mostly for Notary Nodes).
.HP
\fB\-zapwallettxes=\fR<mode>
.IP
Delete all wallet transactions and only recover those parts of the
blockchain through \fB\-rescan\fR on startup (1 = keep tx meta data e.g.
account owner and payment request information, 2 = drop tx meta
data)
.PP
Debugging/Testing options:
.HP
\fB\-debug=\fR<category>
.IP
Output debugging information (default: 0, supplying <category> is
optional). If <category> is not supplied or if <category> = 1,
output all debugging information. <category> can be: addrman,
bench, coindb, db, deletetx, estimatefee, http, libevent, lock,
mempool, net, tls, partitioncheck, pow, proxy, prune, rand,
randomx, reindex, rpc, selectcoins, stratum, tor, zrpc,
zrpcunsafe (implies zrpc).
.HP
\fB\-experimentalfeatures\fR
.IP
Enable use of experimental features
.HP
\fB\-help\-debug\fR
.IP
Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR)
.HP
\fB\-logips\fR
.IP
Include IP addresses in debug output (default: 0)
.HP
\fB\-logtimestamps\fR
.IP
Prepend debug output with timestamp (default: 1)
.HP
\fB\-minrelaytxfee=\fR<amt>
.IP
Fees (in HUSH/kB) smaller than this are considered zero fee for relaying
(default: 0.000001)
.HP
\fB\-printtoconsole\fR
.IP
Send trace/debug info to console instead of debug.log file
.HP
\fB\-shrinkdebugfile\fR
.IP
Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR)
.HP
\fB\-testnet\fR
.IP
Use the test network
.PP
Node relay options:
.HP
\fB\-datacarrier\fR
.IP
Relay and mine data carrier transactions (default: 1)
.HP
\fB\-datacarriersize\fR
.IP
Maximum size of data in data carrier transactions we relay and mine
(default: 8192)
.PP
Block creation options:
.HP
\fB\-blockminsize=\fR<n>
.IP
Set minimum block size in bytes (default: 0)
.HP
\fB\-blockmaxsize=\fR<n>
.IP
Set maximum block size in bytes (default: 2000000)
.HP
\fB\-blockprioritysize=\fR<n>
.IP
Set maximum size of high\-priority/low\-fee transactions in bytes
(default: 1000000)
.PP
Mining options:
.HP
\fB\-gen\fR
.IP
Mine/generate coins (default: 0)
.HP
\fB\-genproclimit=\fR<n>
.IP
Set the number of threads for coin mining if enabled (\fB\-1\fR = all cores,
default: 0)
.HP
\fB\-equihashsolver=\fR<name>
.IP
Specify the Equihash solver to be used if enabled (default: "default")
.HP
\fB\-mineraddress=\fR<addr>
.IP
Send mined coins to a specific single address
.HP
\fB\-minetolocalwallet\fR
.IP
Require that mined blocks use a coinbase address in the local wallet
(default: 1)
.PP
RPC server options:
.HP
\fB\-server\fR
.IP
Accept command line and JSON\-RPC commands
.HP
\fB\-rest\fR
.IP
Accept public REST requests (default: 0)
.HP
\fB\-rpcbind=\fR<addr>
.IP
Bind to given address to listen for JSON\-RPC connections. Use
[host]:port notation for IPv6. This option can be specified
multiple times (default: bind to all interfaces)
.HP
\fB\-rpcuser=\fR<user>
.IP
Username for JSON\-RPC connections
.HP
\fB\-rpcpassword=\fR<pw>
.IP
Password for JSON\-RPC connections
.HP
\fB\-rpcport=\fR<port>
.IP
Listen for JSON\-RPC connections on <port> (default: 0 or testnet: 10000)
.HP
\fB\-rpcallowip=\fR<ip>
.IP
Allow JSON\-RPC connections from specified source. Valid for <ip> are a
single IP (e.g. 1.2.3.4), a network/netmask (e.g.
1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
option can be specified multiple times
.HP
\fB\-rpcthreads=\fR<n>
.IP
Set the number of threads to service RPC calls (default: 8)
.PP
Metrics Options (only if \fB\-daemon\fR and \fB\-printtoconsole\fR are not set):
.HP
\fB\-showmetrics\fR
.IP
Show metrics on stdout (default: 1 if running in a console, 0 otherwise)
.HP
\fB\-metricsui\fR
.IP
Set to 1 for a persistent metrics screen, 0 for sequential metrics
output (default: 1 if running in a console, 0 otherwise)
.HP
\fB\-metricsrefreshtime\fR
.IP
Number of seconds between metrics refreshes (default: 1 if running in a
console, 600 otherwise)
.PP
Stratum server options:
.HP
\fB\-stratum\fR
.IP
Enable stratum server (default: off)
.HP
\fB\-stratumaddress=\fR<address>
.IP
Mining address to use when special address of 'x' is sent by miner
(default: none)
.HP
\fB\-stratumbind=\fR<ipaddr>
.IP
Bind to given address to listen for Stratum work requests. Use
[host]:port notation for IPv6. This option can be specified
multiple times (default: bind to all interfaces)
.HP
\fB\-stratumport=\fR<port>
.IP
Listen for Stratum work requests on <port> (default: 19031 or testnet:
19031)
.HP
\fB\-stratumallowip=\fR<ip>
.IP
Allow Stratum work requests from specified source. Valid for <ip> are a
single IP (e.g. 1.2.3.4), a network/netmask (e.g.
1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This
option can be specified multiple times
.PP
DragonX Chain options:
.HP
\fB\-ac_algo\fR
.IP
Choose PoW mining algorithm, either 'equihash' or 'randomx'. default is
Equihash (200,9)
.HP
\fB\-ac_blocktime\fR
.IP
Block time in seconds, default is 60
.HP
\fB\-ac_beam\fR
.IP
BEAM integration
.HP
\fB\-ac_burn\fR
.IP
Allow sending funds to the transparent burn address when \fB\-ac_private\fR=\fI\,1\/\fR
.HP
\fB\-ac_minopreturnfee\fR
.IP
OP_RETURN minimum fee per tx, regardless of tx size, default is 1 coin
.HP
\fB\-ac_coda\fR
.IP
CODA integration
.HP
\fB\-ac_clearnet\fR
.IP
Enable or disable clearnet connections for the entire blockchain.
Setting to 0 will disable clearnet and use sane defaults for
Tor/i2p and require all nodes to do the same (default: 1)
.HP
\fB\-ac_decay\fR
.IP
Percentage of block reward decrease at each halving
.HP
\fB\-ac_end\fR
.IP
Block height at which block rewards will end
.HP
\fB\-ac_eras\fR
.IP
Block reward eras
.HP
\fB\-ac_founders\fR
.IP
Number of blocks between founders reward payouts
.HP
\fB\-ac_halving\fR
.IP
Number of blocks between each block reward halving
.HP
\fB\-ac_name\fR
.IP
Name of asset chain
.HP
\fB\-ac_notarypay\fR
.IP
Pay notaries, default 0
.HP
\fB\-ac_perc\fR
.IP
Percentage of block rewards paid to the founder
.HP
\fB\-ac_private\fR
.IP
Shielded transactions only (except coinbase + notaries), default is 0
.HP
\fB\-ac_pubkey\fR
.IP
Public key for receiving payments on the network
.HP
\fB\-ac_public\fR
.IP
Transparent transactions only, default 0
.HP
\fB\-ac_randomx_interval\fR
.IP
Controls how often the RandomX key block will change, default is 1024
.HP
\fB\-ac_randomx_lag\fR
.IP
Sets the number of RandomX blocks to wait before updating the key block,
default is 64
.HP
\fB\-ac_reward\fR
.IP
Block reward in satoshis, default is 0
.HP
\fB\-ac_script\fR
.IP
P2SH/multisig address to receive founders rewards
.HP
\fB\-ac_supply\fR
.IP
Starting supply, default is 10
.HP
\fB\-ac_txpow\fR
.IP
Enforce transaction\-rate limit, default 0
.SH COPYRIGHT
In order to ensure you are adequately protecting your privacy when using DragonX,
please see <https://dragonx.is>.
Copyright (C) 2024-2026 The DragonX Developers
Copyright (C) 2016-2026 Duke Leto and The Hush Developers
Copyright (C) 2016-2020 jl777 and SuperNET developers
Copyright (C) 2016-2018 The Zcash developers
Copyright (C) 2009-2014 The Bitcoin Core developers
This is experimental Free Software! Fuck Yeah!!!!!
Distributed under the GPLv3 software license, see the accompanying file COPYING
or <https://www.gnu.org/licenses/gpl-3.0.en.html>.

View File

@@ -1,4 +1,5 @@
# Copyright 2016-2024 The Hush developers
# Copyright (c) 2024-2026 The DragonX developers
# Distributed under the GPLv3 software license, see the accompanying
# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2013 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2013 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/////////////////////////////////////////////////////////////////////////////////
@@ -518,7 +519,7 @@ void *chainparams_commandline() {
//}
if ( SMART_CHAIN_SYMBOL[0] != 0 )
{
if (strcmp(SMART_CHAIN_SYMBOL,"HUSH3") == 0) {
if (strcmp(SMART_CHAIN_SYMBOL,"DRAGONX") == 0) {
ASSETCHAINS_P2PPORT = 18030;
}
@@ -550,8 +551,8 @@ void *chainparams_commandline() {
pCurrentParams->consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = ASSETCHAINS_SAPLING;
pCurrentParams->consensus.vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = ASSETCHAINS_OVERWINTER;
// Generated at 1575831755 via hush3 util/checkpoints.pl by Duke Leto
if (strcmp(SMART_CHAIN_SYMBOL,"HUSH3") == 0) {
// HUSH mainnet checkpoint data
if (strcmp(SMART_CHAIN_SYMBOL,"DRAGONX") == 0) {
// DRAGONX mainnet checkpoint data
checkpointData = //(Checkpoints::CCheckpointData)
{
boost::assign::map_list_of

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -1,5 +1,6 @@
// Copyright (c) 2012-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2017 The Zcash developers
// Copyright (c) 2016-2026 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
// What happened to the SuperNET developers, who cared about privacy?

View File

@@ -40,8 +40,8 @@
// XXX: There are potential crashes wherever we access chainActive without a lock,
// because it might be disconnecting blocks at the same time.
// TODO: this assumes a blocktime of 75 seconds for HUSH and 60 seconds for other chains
int NOTARISATION_SCAN_LIMIT_BLOCKS = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? 1152 : 1440;
// TODO: this assumes a blocktime of 75 seconds for DRAGONX and 60 seconds for other chains
int NOTARISATION_SCAN_LIMIT_BLOCKS = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? 1152 : 1440;
CBlockIndex *hush_getblockindex(uint256 hash);
/* On HUSH */

View File

@@ -1,4 +1,5 @@
// Copyright (c) 2016-2024 The Hush Developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************
@@ -488,7 +489,7 @@ int32_t hush_verifynotarization(char *symbol,char *dest,int32_t height,int32_t N
sprintf(&params[i*2 + 2],"%02x",((uint8_t *)&NOTARIZED_DESTTXID)[31-i]);
strcat(params,"\", 1]");*/
sprintf(params,"[\"%s\", 1]",NOTARIZED_DESTTXID.ToString().c_str());
if ( strcmp(symbol,SMART_CHAIN_SYMBOL[0]==0?(char *)"HUSH3":SMART_CHAIN_SYMBOL) != 0 )
if ( strcmp(symbol,SMART_CHAIN_SYMBOL[0]==0?(char *)"DRAGONX":SMART_CHAIN_SYMBOL) != 0 )
return(0);
if ( 0 && SMART_CHAIN_SYMBOL[0] != 0 )
printf("[%s] src.%s dest.%s params.[%s] ht.%d notarized.%d\n",SMART_CHAIN_SYMBOL,symbol,dest,params,height,NOTARIZED_HEIGHT);
@@ -940,7 +941,7 @@ int32_t hush_nextheight()
int32_t hush_isrealtime(int32_t *hushheightp)
{
struct hush_state *sp; CBlockIndex *pindex;
if ( (sp= hush_stateptrget((char *)"HUSH3")) != 0 )
if ( (sp= hush_stateptrget((char *)"DRAGONX")) != 0 )
*hushheightp = sp->CURRENT_HEIGHT;
else *hushheightp = 0;
if ( (pindex= chainActive.LastTip()) != 0 && pindex->GetHeight() >= (int32_t)hush_longestchain() )
@@ -1074,12 +1075,12 @@ uint64_t hush_commission(int height)
uint64_t the_commission(const CBlock *pblock,int32_t height)
{
//fprintf(stderr,"%s at height=%d\n",__func__,height);
static bool didinit = false, ishush3 = false;
static bool didinit = false, isdragonx = false;
if (!didinit) {
ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
didinit = true;
fprintf(stderr,"%s: didinit ishush3=%d\n", __func__, ishush3);
fprintf(stderr,"%s: didinit isdragonx=%d\n", __func__, isdragonx);
}
int32_t i,j,n=0,txn_count; int64_t nSubsidy; uint64_t commission,total = 0;
@@ -1090,7 +1091,7 @@ uint64_t the_commission(const CBlock *pblock,int32_t height)
fprintf(stderr,"ht.%d nSubsidy %.8f prod %llu\n",height,(double)nSubsidy/COIN,(long long)(nSubsidy * ASSETCHAINS_COMMISSION));
commission = ((nSubsidy * ASSETCHAINS_COMMISSION) / COIN);
if (ishush3) {
if (isdragonx) {
commission = hush_commission(height);
}

View File

@@ -43,7 +43,7 @@ struct hush_event *hush_eventadd(struct hush_state *sp,int32_t height,char *symb
void hush_eventadd_notarized(struct hush_state *sp,char *symbol,int32_t height,char *dest,uint256 notarized_hash,uint256 notarized_desttxid,int32_t notarizedheight,uint256 MoM,int32_t MoMdepth)
{
static uint32_t counter; int32_t verified=0; char *coin; struct hush_event_notarized N;
coin = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"HUSH3" : SMART_CHAIN_SYMBOL;
coin = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"DRAGONX" : SMART_CHAIN_SYMBOL;
if ( IS_HUSH_NOTARY != 0 && (verified= hush_verifynotarization(symbol,dest,height,notarizedheight,notarized_hash,notarized_desttxid)) < 0 )
{
if ( counter++ < 100 )

View File

@@ -1,4 +1,5 @@
// Copyright 2016-2024 The Hush Developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************
@@ -314,20 +315,20 @@ std::string DEVTAX_DATA[DEVTAX_NUM][2] = {
// this is a deterministic consensus-changing function. All miners must be able
// to predict the scriptpub for the next block
std::string devtax_scriptpub_for_height(uint32_t nHeight) {
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
bool istush3 = strncmp(SMART_CHAIN_SYMBOL, "TUSH3",5) == 0 ? true : false;
// Fork height for HUSH3 mainnet needs to be decided just before code is merged
// Fork height for DRAGONX mainnet needs to be decided just before code is merged
// Since it requires all full nodes on the network to have enough time to update.
// For testing, we choose an early blockheight so we can observe the value changing
// from the old fixed value to the new values which cycle
const int DEVTAX_FORK_HEIGHT = ishush3 ? nHushHardforkHeight4 : 5;
const int DEVTAX_FORK_HEIGHT = isdragonx ? nHushHardforkHeight4 : 5;
// Decentralized devtax is height-activated
if (nHeight >= DEVTAX_FORK_HEIGHT) {
if (ishush3 || istush3) {
if (isdragonx || istush3) {
return DEVTAX_DATA[ nHeight % DEVTAX_NUM ][1];
} else {
// if this is not HUSH3 or a testchain for HUSH3, return it unchanged
// if this is not DRAGONX or a testchain for DRAGONX, return it unchanged
return ASSETCHAINS_SCRIPTPUB;
}
}
@@ -339,20 +340,20 @@ std::string devtax_scriptpub_for_height(uint32_t nHeight) {
// blocks < DEVTAX_FORK_HEIGHT but it could affect consensus of later blocks
std::string devtax_address_for_height(uint32_t nHeight) {
const std::string legacy_devtax_address = "RHushEyeDm7XwtaTWtyCbjGQumYyV8vMjn";
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
bool istush3 = strncmp(SMART_CHAIN_SYMBOL, "TUSH3",5) == 0 ? true : false;
// Fork height for HUSH3 mainnet needs to be decided just before code is merged
// Fork height for DRAGONX mainnet needs to be decided just before code is merged
// Since it requires all full nodes on the network to have enough time to update.
// For testing, we choose an early blockheight so we can observe the value changing
// from the old fixed value to the new values which cycle
const int DEVTAX_FORK_HEIGHT = ishush3 ? nHushHardforkHeight4 : 5;
const int DEVTAX_FORK_HEIGHT = isdragonx ? nHushHardforkHeight4 : 5;
// Decentralized devtax is height-activated
if (nHeight >= DEVTAX_FORK_HEIGHT) {
if (ishush3 || istush3) {
if (isdragonx || istush3) {
return DEVTAX_DATA[ nHeight % DEVTAX_NUM ][0];
} else {
// if this is not HUSH3 or TUSH3, return legacy
// if this is not DRAGONX or TUSH3, return legacy
return legacy_devtax_address;
}
}

View File

@@ -578,7 +578,7 @@ int32_t NSPV_notarizationextract(int32_t verifyntz,int32_t *ntzheightp,uint256 *
int32_t numsigs=0; uint8_t elected[64][33]; char *symbol; std::vector<uint8_t> opret; uint32_t nTime;
if ( tx.vout.size() >= 2 )
{
symbol = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"HUSH3" : SMART_CHAIN_SYMBOL;
symbol = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"DRAGONX" : SMART_CHAIN_SYMBOL;
GetOpReturnData(tx.vout[1].scriptPubKey,opret);
if ( opret.size() >= 32*2+4 )
{

View File

@@ -38,7 +38,7 @@ struct NSPV_ntzargs
int32_t NSPV_notarization_find(struct NSPV_ntzargs *args,int32_t height,int32_t dir)
{
int32_t ntzheight = 0; uint256 hashBlock; CTransaction tx; Notarization nota; char *symbol; std::vector<uint8_t> opret;
symbol = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"HUSH3" : SMART_CHAIN_SYMBOL;
symbol = (SMART_CHAIN_SYMBOL[0] == 0) ? (char *)"DRAGONX" : SMART_CHAIN_SYMBOL;
memset(args,0,sizeof(*args));
if ( dir > 0 )
height += 10;

View File

@@ -110,13 +110,13 @@ int32_t hush_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp)
// Find the correct DPoW Notary pubkeys for this season
int32_t hush_season = 0;
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
bool istush = strncmp(SMART_CHAIN_SYMBOL, "TUSH",4) == 0 ? true : false;
// TUSH uses height activation like HUSH3, other HACs use timestamps
hush_season = (ishush3 || istush) ? gethushseason(height) : getacseason(timestamp);
// TUSH uses height activation like DRAGONX, other HACs use timestamps
hush_season = (isdragonx || istush) ? gethushseason(height) : getacseason(timestamp);
if(IS_HUSH_NOTARY) {
fprintf(stderr,"%s: [%s] season=%d height=%d time=%d\n", __func__, ishush3 ? "HUSH3" : SMART_CHAIN_SYMBOL, hush_season, height, timestamp);
fprintf(stderr,"%s: [%s] season=%d height=%d time=%d\n", __func__, isdragonx ? "DRAGONX" : SMART_CHAIN_SYMBOL, hush_season, height, timestamp);
}
if ( hush_season != 0 )

View File

@@ -1,4 +1,5 @@
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************
@@ -1473,8 +1474,8 @@ uint32_t hush_smartmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_t
}
//TODO: why is this needed?
const bool ishush3 = strncmp(symbol, "HUSH3",5) == 0 ? true : false;
if(ishush3) {
const bool isdragonx = strncmp(symbol, "DRAGONX",7) == 0 ? true : false;
if(isdragonx) {
return HUSH_MAGIC;
} else {
return(calc_crc32(crc0,buf,len));
@@ -1619,8 +1620,8 @@ uint64_t hush_sc_block_subsidy(int nHeight)
int64_t subsidyDifference;
int32_t numhalvings = 0, curEra = 0, sign = 1;
static uint64_t cached_subsidy; static int32_t cached_numhalvings; static int cached_era;
const bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
// fprintf(stderr,"%s: ht=%d ishush3=%d\n", __func__, nHeight, ishush3);
const bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
// fprintf(stderr,"%s: ht=%d isdragonx=%d\n", __func__, nHeight, isdragonx);
// check for backwards compat, older chains with no explicit rewards had 0.0001 block reward
if ( ASSETCHAINS_ENDSUBSIDY[0] == 0 && ASSETCHAINS_REWARD[0] == 0 ) {
@@ -1651,12 +1652,12 @@ uint64_t hush_sc_block_subsidy(int nHeight)
}
if ( ASSETCHAINS_HALVING[curEra] != 0 )
{
if (ishush3) {
if (isdragonx) {
subsidy = hush_block_subsidy(nHeight);
if(fDebug)
fprintf(stderr,"%s: HUSH3 subsidy=%ld at height=%d\n",__func__,subsidy,nHeight);
fprintf(stderr,"%s: DRAGONX subsidy=%ld at height=%d\n",__func__,subsidy,nHeight);
} else if ( (numhalvings = ((nHeight - nStart) / ASSETCHAINS_HALVING[curEra])) > 0 ) {
// The code below is not compatible with HUSH3 mainnet
// The code below is not compatible with DRAGONX mainnet
if ( ASSETCHAINS_DECAY[curEra] == 0 ) {
subsidy >>= numhalvings;
// fprintf(stderr,"%s: no decay, numhalvings.%d curEra.%d subsidy.%ld nStart.%ld\n",__func__, numhalvings, curEra, subsidy, nStart);
@@ -2351,8 +2352,8 @@ void hush_args(char *argv0)
if ( GetArg("-port",0) != 0 )
{
ASSETCHAINS_P2PPORT = GetArg("-port",0);
if(ishush3) {
fprintf(stderr,"set HUSH3 p2pport.%u\n",ASSETCHAINS_P2PPORT);
if(isdragonx) {
fprintf(stderr,"set DRAGONX p2pport.%u\n",ASSETCHAINS_P2PPORT);
ASSETCHAINS_P2PPORT = 18030;
}
if(fDebug)
@@ -2452,7 +2453,7 @@ void hush_args(char *argv0)
//fprintf(stderr,"(%s) port.%u chain params initialized\n",SMART_CHAIN_SYMBOL,BITCOIND_RPCPORT);
// Set custom cc rulse for chains here
if ( strcmp("HUSH3",SMART_CHAIN_SYMBOL) == 0 ) {
if ( strcmp("DRAGONX",SMART_CHAIN_SYMBOL) == 0 ) {
// Disable all CC's
if(GetArg("-ac_disable_cc",false)) {
CCDISABLEALL;

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
// What happened to the SuperNET devs, who were dedicated to privacy???
@@ -206,12 +207,12 @@ void Shutdown()
/// Be sure that anything that writes files or flushes caches only does this if the respective
/// module was initialized.
static char shutoffstr[128];
sprintf(shutoffstr,"%s-shutoff","hush");
sprintf(shutoffstr,"%s-shutoff","dragonx");
RenameThread(shutoffstr);
mempool.AddTransactionsUpdated(1);
if(fDebug) {
fprintf(stderr,"%s: stopping HUSH HTTP/REST/RPC\n", __FUNCTION__);
fprintf(stderr,"%s: stopping DragonX HTTP/REST/RPC\n", __FUNCTION__);
}
StopHTTPRPC();
StopREST();
@@ -396,7 +397,7 @@ std::string HelpMessage(HelpMessageMode mode)
strUsage += HelpMessageOpt("-par=<n>", strprintf(_("Set the number of script verification threads (%u to %d, 0 = auto, <0 = leave that many cores free, default: %d)"),
-(int)boost::thread::hardware_concurrency(), MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS));
#ifndef _WIN32
strUsage += HelpMessageOpt("-pid=<file>", strprintf(_("Specify pid file (default: %s)"), "hushd.pid"));
strUsage += HelpMessageOpt("-pid=<file>", strprintf(_("Specify pid file (default: %s)"), "dragonxd.pid"));
#endif
strUsage += HelpMessageOpt("-txexpirynotify=<cmd>", _("Execute command when transaction expires (%s in cmd is replaced by transaction id)"));
strUsage += HelpMessageOpt("-prune=<n>", strprintf(_("Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. "

View File

@@ -107,7 +107,7 @@ size_t nCoinCacheUsage = 5000 * 300;
uint64_t nPruneTarget = 0;
// If the tip is older than this (in seconds), the node is considered to be in initial block download.
int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE;
const bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
const bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
int32_t nFirstHalvingHeight = 340000;
unsigned int expiryDelta = DEFAULT_TX_EXPIRY_DELTA;
@@ -1414,10 +1414,10 @@ bool CheckTransaction(uint32_t tiptime,const CTransaction& tx, CValidationState
// This is and hush_notaries()/gethushseason/getacseason are all consensus code
int32_t hush_isnotaryvout(char *coinaddr,uint32_t tiptime) {
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
bool istush = strncmp(SMART_CHAIN_SYMBOL, "TUSH",4) == 0 ? true : false;
int32_t height = chainActive.LastTip()->GetHeight();
int32_t season = (ishush3 || istush) ? gethushseason(height) : getacseason(tiptime);
int32_t season = (isdragonx || istush) ? gethushseason(height) : getacseason(tiptime);
fprintf(stderr,"%s: coinaddr=%s season=%d, tiptime=%d\n", __func__, coinaddr, season,tiptime);
if ( NOTARY_ADDRESSES[season-1][0][0] == 0 ) {
uint8_t pubkeys[64][33];
@@ -1708,8 +1708,8 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
const uint32_t z2zTransitionStart = 340000 - z2zTransitionWindow;
const uint32_t nHeight = chainActive.Height();
// This only applies to HUSH3, other chains can start off z2z via ac_private=1
if(ishush3) {
// This only applies to DRAGONX, other chains can start off z2z via ac_private=1
if(isdragonx) {
if((nHeight >= z2zTransitionStart) || (nHeight <= 340000)) {
// During the z2z transition window, only coinbase tx's as part of blocks are allowed
// Theory: We want an empty mempool at our fork block height, and the only way to assure that
@@ -3066,7 +3066,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
// to our original blocktime so our DAA has the correct target for that height
int nHeight = pindex->pprev->GetHeight();
nFirstHalvingHeight = GetArg("-z2zheight",340000);
if (ishush3 && (ASSETCHAINS_BLOCKTIME != 150) && (nHeight < nFirstHalvingHeight)) {
if (isdragonx && (ASSETCHAINS_BLOCKTIME != 150) && (nHeight < nFirstHalvingHeight)) {
LogPrintf("%s: Setting blocktime to 150s at height %d!\n",__func__,nHeight);
ASSETCHAINS_BLOCKTIME = 150;
hush_changeblocktime();
@@ -3142,19 +3142,19 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
//fprintf(stderr,"connectblock ht.%d\n",(int32_t)pindex->GetHeight());
AssertLockHeld(cs_main);
const bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
const bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
// At startup, HUSH3 doesn't know a block height yet and so we must wait until
// At startup, DRAGONX doesn't know a block height yet and so we must wait until
// connecting a block to set our private/blocktime flags, which are height-dependent
nFirstHalvingHeight = GetArg("-z2zheight",340000);
if(!ASSETCHAINS_PRIVATE && ishush3) {
if(!ASSETCHAINS_PRIVATE && isdragonx) {
unsigned int nHeight = pindex->GetHeight();
if(nHeight >= nFirstHalvingHeight) {
fprintf(stderr, "%s: Going full z2z at height %d!\n",__func__,pindex->GetHeight());
ASSETCHAINS_PRIVATE = 1;
}
}
if (ishush3 && (ASSETCHAINS_BLOCKTIME != 75) && (chainActive.Height() >= nFirstHalvingHeight)) {
if (isdragonx && (ASSETCHAINS_BLOCKTIME != 75) && (chainActive.Height() >= nFirstHalvingHeight)) {
LogPrintf("%s: Blocktime halving to 75s at height %d!\n",__func__,pindex->GetHeight());
ASSETCHAINS_BLOCKTIME = 75;
hush_changeblocktime();
@@ -3754,7 +3754,7 @@ void static UpdateTip(CBlockIndex *pindexNew) {
mempool.AddTransactionsUpdated(1);
HUSH_NEWBLOCKS++;
double progress;
if ( ishush3 ) {
if ( isdragonx ) {
progress = Checkpoints::GuessVerificationProgress(chainParams.Checkpoints(), chainActive.LastTip());
} else {
int32_t longestchain = hush_longestchain();
@@ -3762,7 +3762,7 @@ void static UpdateTip(CBlockIndex *pindexNew) {
}
nFirstHalvingHeight = GetArg("-z2zheight",340000);
if(ishush3) {
if(isdragonx) {
if (ASSETCHAINS_BLOCKTIME != 75 && (chainActive.Height() >= nFirstHalvingHeight)) {
LogPrintf("%s: Blocktime halving to 75s at height %d!\n",__func__,chainActive.Height());
ASSETCHAINS_BLOCKTIME = 75;
@@ -5109,9 +5109,9 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
int daaForkHeight = GetArg("-daaforkheight", 450000);
int nHeight = pindexPrev->GetHeight()+1;
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
// Check Proof-of-Work difficulty
if (ishush3) {
if (isdragonx) {
// Difficulty (nBits) relies on the current blocktime of this block
if ((ASSETCHAINS_BLOCKTIME != 75) && (nHeight >= nFirstHalvingHeight)) {
@@ -5959,7 +5959,7 @@ bool static LoadBlockIndexDB()
// Try to detect if we are z2z based on height of blocks on disk
// This helps to set it correctly on startup before a new block is connected
if(ishush3 && chainActive.Height() >= 340000) {
if(isdragonx && chainActive.Height() >= 340000) {
LogPrintf("%s: enabled ac_private=1 at height=%d\n", __func__, chainActive.Height());
ASSETCHAINS_PRIVATE = 1;
}
@@ -5972,7 +5972,7 @@ bool static LoadBlockIndexDB()
PruneBlockIndexCandidates();
double progress;
if ( ishush3 ) {
if ( isdragonx ) {
progress = Checkpoints::GuessVerificationProgress(chainparams.Checkpoints(), chainActive.LastTip());
} else {
int32_t longestchain = hush_longestchain();
@@ -6900,7 +6900,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
CAddress addrFrom;
uint64_t nNonce = 1;
int nVersion; // use temporary for version, don't set version number until validated as connected
const int minVersion = ishush3 ? MIN_HUSH_PEER_PROTO_VERSION : MIN_PEER_PROTO_VERSION;
const int minVersion = isdragonx ? MIN_HUSH_PEER_PROTO_VERSION : MIN_PEER_PROTO_VERSION;
vRecv >> nVersion >> pfrom->nServices >> nTime >> addrMe;
if (nVersion < minVersion)

View File

@@ -1,4 +1,5 @@
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Copyright (c) 2016 The Zcash developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -16,11 +16,11 @@ NotarizationsInBlock ScanBlockNotarizations(const CBlock &block, int nHeight) {
EvalRef eval;
NotarizationsInBlock vNotarizations;
int timestamp = block.nTime;
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
// No valid ntz's before this height
int minheight = ishush3 ? 365420 : 1;
if(ishush3 && (nHeight <= GetArg("-dpow-start-height",minheight))) {
int minheight = isdragonx ? 365420 : 1;
if(isdragonx && (nHeight <= GetArg("-dpow-start-height",minheight))) {
return vNotarizations;
}

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************
@@ -532,9 +533,9 @@ unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg,
int64_t nActualTimespan = nLastBlockTime - nFirstBlockTime;
LogPrint("pow", " nActualTimespan = %d before dampening\n", nActualTimespan);
bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false;
// If this is HUSH3, use AWT function defined above, else use the one in params
int64_t AWT = ishush3 ? AveragingWindowTimespan() : params.AveragingWindowTimespan();
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
// If this is DRAGONX, use AWT function defined above, else use the one in params
int64_t AWT = isdragonx ? AveragingWindowTimespan() : params.AveragingWindowTimespan();
nActualTimespan = AWT + (nActualTimespan - AWT)/4;
LogPrint("pow", " nActualTimespan = %d before bounds\n", nActualTimespan);

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -253,12 +253,12 @@ UniValue getinfo(const UniValue& params, bool fHelp, const CPubKey& mypk)
obj.push_back(Pair("notarizedtxid", notarized_desttxid.ToString()));
if ( HUSH_NSPV_FULLNODE )
{
txid_height = notarizedtxid_height( (char *)"HUSH3" ,(char *)notarized_desttxid.ToString().c_str(),&hushnotarized_height);
txid_height = notarizedtxid_height( (char *)"DRAGONX" ,(char *)notarized_desttxid.ToString().c_str(),&hushnotarized_height);
if ( txid_height > 0 )
obj.push_back(Pair("notarizedtxid_height", txid_height));
else obj.push_back(Pair("notarizedtxid_height", "mempool"));
if ( SMART_CHAIN_SYMBOL[0] != 0 ) {
obj.push_back(Pair("HUSHnotarized_height", hushnotarized_height));
obj.push_back(Pair("DRAGONXnotarized_height", hushnotarized_height));
}
obj.push_back(Pair("notarized_confirms", txid_height < hushnotarized_height ? (hushnotarized_height - txid_height + 1) : 0));
//fprintf(stderr,"after notarized_confirms %u\n",(uint32_t)time(NULL));

View File

@@ -1,5 +1,6 @@
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -276,8 +276,8 @@ UniValue stop(const UniValue& params, bool fHelp, const CPubKey& mypk)
// Shutdown will take long enough that the response should get back
StartShutdown();
if ((strncmp(SMART_CHAIN_SYMBOL, "HUSH3", 5) == 0) ) {
sprintf(buf,"Hush server stopping, for now...");
if ((strncmp(SMART_CHAIN_SYMBOL, "DRAGONX", 7) == 0) ) {
sprintf(buf,"DragonX server stopping, for now...");
} else {
sprintf(buf,"%s server stopping...",SMART_CHAIN_SYMBOL);
}
@@ -694,10 +694,10 @@ UniValue CRPCTable::execute(const std::string &strMethod, const UniValue &params
std::string HelpExampleCli(const std::string& methodname, const std::string& args)
{
if ((strncmp(SMART_CHAIN_SYMBOL, "HUSH3", 5) == 0) ) {
return "> hush-cli " + methodname + " " + args + "\n";
if ((strncmp(SMART_CHAIN_SYMBOL, "DRAGONX", 7) == 0) ) {
return "> dragonx-cli " + methodname + " " + args + "\n";
} else {
return "> hush-cli -ac_name=" + strprintf("%s", SMART_CHAIN_SYMBOL) + " " + methodname + " " + args + "\n";
return "> dragonx-cli -ac_name=" + strprintf("%s", SMART_CHAIN_SYMBOL) + " " + methodname + " " + args + "\n";
}
}

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2014 The Bitcoin Core developers
// Copyright (c) 2016-2025 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
@@ -750,7 +751,7 @@ void ReadConfigFile(map<string, string>& mapSettingsRet,
#ifndef _WIN32
boost::filesystem::path GetPidFile()
{
boost::filesystem::path pathPidFile(GetArg("-pid", "hushd.pid"));
boost::filesystem::path pathPidFile(GetArg("-pid", "dragonxd.pid"));
if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile;
return pathPidFile;
}

View File

@@ -1,5 +1,6 @@
// Copyright (c) 2012-2014 The Bitcoin Core developers
// Copyright (c) 2016-2026 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
/******************************************************************************

View File

@@ -1,4 +1,5 @@
// Copyright (c) 2016-2024 The Hush developers
// Copyright (c) 2024-2026 The DragonX developers
// Distributed under the GPLv3 software license, see the accompanying
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
#include <iostream>

View File

@@ -712,7 +712,7 @@ UniValue kvupdate(const UniValue& params, bool fHelp, const CPubKey& mypk)
//for (i=0; i<32; i++)
// printf("%02x",((uint8_t *)&sig)[i]);
//printf(" sig for keylen.%d + valuesize.%d\n",keylen,refvaluesize);
ret.push_back(Pair("coin",(char *)(SMART_CHAIN_SYMBOL[0] == 0 ? "HUSH3" : SMART_CHAIN_SYMBOL)));
ret.push_back(Pair("coin",(char *)(SMART_CHAIN_SYMBOL[0] == 0 ? "DRAGONX" : SMART_CHAIN_SYMBOL)));
height = chainActive.LastTip()->GetHeight();
if ( memcmp(&zeroes,&refpubkey,sizeof(refpubkey)) != 0 )
ret.push_back(Pair("owner",refpubkey.GetHex()));

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env bash
# Copyright (c) 2016-2024 The Hush developers
# Copyright (c) 2024-2026 The DragonX developers
# Distributed under the GPLv3 software license, see the accompanying
# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
export HOST=x86_64-w64-mingw32