Compare commits
8 Commits
f0cb958cac
...
dragonx
| Author | SHA1 | Date | |
|---|---|---|---|
| ddf6a35680 | |||
| 9cb6424799 | |||
| 1c6f64b87e | |||
| 2b011d6ee2 | |||
|
|
d77088c1f2 | ||
| faa3e925cd | |||
| ddd851dc11 | |||
| 752590348b |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -175,3 +175,4 @@ src/dragonx-tx
|
||||
src/dragonxd.exe
|
||||
src/dragonx-cli.exe
|
||||
src/dragonx-tx.exe
|
||||
doc/relnotes/
|
||||
4
AUTHORS
4
AUTHORS
@@ -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
|
||||
|
||||
1
COPYING
1
COPYING
@@ -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
26
LICENSE
@@ -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.
|
||||
|
||||
|
||||
25
README.md
25
README.md
@@ -106,19 +106,32 @@ apt-get install -y gcc-7 g++-7 && \
|
||||
|
||||
# Build on Mac
|
||||
|
||||
```
|
||||
sudo port update
|
||||
sudo port upgrade outdated
|
||||
sudo port install qt5
|
||||
Install Xcode Command Line Tools and [Homebrew](https://brew.sh/), then install dependencies:
|
||||
|
||||
```sh
|
||||
xcode-select --install
|
||||
brew install gcc autoconf automake pkgconf libtool cmake curl
|
||||
|
||||
# Install Rust (needed for librustzcash on macOS Sequoia+)
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
source "$HOME/.cargo/env"
|
||||
|
||||
# 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.
|
||||
# Build (uses 3 build processes, you need 2GB of RAM for each)
|
||||
# Make sure libtool gnubin and cargo are on PATH
|
||||
export PATH="$HOME/.cargo/bin:/usr/local/opt/libtool/libexec/gnubin:$PATH"
|
||||
./build.sh -j3
|
||||
```
|
||||
|
||||
For a release build:
|
||||
|
||||
```sh
|
||||
export PATH="$HOME/.cargo/bin:/usr/local/opt/libtool/libexec/gnubin:$PATH"
|
||||
./build.sh --mac-release -j$(sysctl -n hw.ncpu)
|
||||
```
|
||||
|
||||
# Installing Hush binaries
|
||||
|
||||
1. [Download the release](https://git.hush.is/hush/hush3/releases) with a .deb file extension.
|
||||
|
||||
22
build.sh
22
build.sh
@@ -6,7 +6,7 @@
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
VERSION="1.0.1"
|
||||
VERSION="1.0.2"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
RELEASE_DIR="$SCRIPT_DIR/release"
|
||||
|
||||
@@ -80,8 +80,12 @@ package_release() {
|
||||
echo "Packaging release for $platform..."
|
||||
mkdir -p "$release_subdir"
|
||||
|
||||
# Copy bootstrap script
|
||||
cp "$SCRIPT_DIR/util/bootstrap-dragonx.sh" "$release_subdir/"
|
||||
# Copy bootstrap script (platform-appropriate)
|
||||
if [ "$platform" = "win64" ]; then
|
||||
cp "$SCRIPT_DIR/util/bootstrap-dragonx.bat" "$release_subdir/"
|
||||
else
|
||||
cp "$SCRIPT_DIR/util/bootstrap-dragonx.sh" "$release_subdir/"
|
||||
fi
|
||||
|
||||
# Copy common files
|
||||
cp "$SCRIPT_DIR/contrib/asmap/asmap.dat" "$release_subdir/" 2>/dev/null || true
|
||||
@@ -171,21 +175,21 @@ if [ $BUILD_LINUX_COMPAT -eq 1 ] || [ $BUILD_LINUX_RELEASE -eq 1 ] || [ $BUILD_W
|
||||
if [ $BUILD_LINUX_RELEASE -eq 1 ]; then
|
||||
echo "=== Building Linux release ==="
|
||||
clean_for_platform linux
|
||||
./util/build.sh --disable-tests "${REMAINING_ARGS[@]}"
|
||||
./util/build.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"}
|
||||
package_release linux-amd64
|
||||
fi
|
||||
|
||||
if [ $BUILD_WIN_RELEASE -eq 1 ]; then
|
||||
echo "=== Building Windows release ==="
|
||||
clean_for_platform windows
|
||||
./util/build-win.sh --disable-tests "${REMAINING_ARGS[@]}"
|
||||
./util/build-win.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"}
|
||||
package_release win64
|
||||
fi
|
||||
|
||||
if [ $BUILD_MAC_RELEASE -eq 1 ]; then
|
||||
echo "=== Building macOS release ==="
|
||||
clean_for_platform macos
|
||||
./util/build-mac.sh --disable-tests "${REMAINING_ARGS[@]}"
|
||||
./util/build-mac.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"}
|
||||
package_release macos
|
||||
fi
|
||||
|
||||
@@ -197,11 +201,11 @@ fi
|
||||
|
||||
# Standard build (auto-detect OS)
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
./util/build.sh --disable-tests "${REMAINING_ARGS[@]}"
|
||||
./util/build.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"}
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
./util/build-mac.sh --disable-tests "${REMAINING_ARGS[@]}"
|
||||
./util/build-mac.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"}
|
||||
elif [[ "$OSTYPE" == "msys"* ]]; then
|
||||
./util/build-win.sh --disable-tests "${REMAINING_ARGS[@]}"
|
||||
./util/build-win.sh --disable-tests ${REMAINING_ARGS[@]+"${REMAINING_ARGS[@]}"}
|
||||
else
|
||||
echo "Unable to detect your OS. What are you using?"
|
||||
fi
|
||||
|
||||
@@ -3,7 +3,7 @@ AC_PREREQ([2.60])
|
||||
define(_CLIENT_VERSION_MAJOR, 1)
|
||||
dnl Must be kept in sync with src/clientversion.h , ugh!
|
||||
define(_CLIENT_VERSION_MINOR, 0)
|
||||
define(_CLIENT_VERSION_REVISION, 1)
|
||||
define(_CLIENT_VERSION_REVISION, 2)
|
||||
define(_CLIENT_VERSION_BUILD, 50)
|
||||
define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
|
||||
define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
|
||||
|
||||
@@ -1,3 +1,22 @@
|
||||
dragonx (1.0.3) stable; urgency=medium
|
||||
|
||||
* IBD/sync speedups: parallel RandomX pre-verification, adaptive -dbcache, P2P download fixes
|
||||
* Fix Sapling witness desync and parallelize witness cache rebuild
|
||||
* Opt-in bulk block streaming (-bulkblocksync) for faster initial sync
|
||||
* BIP39 seed phrases (SilentDragonXLite-compatible) and HD transparent keys
|
||||
* Remove assumeutxo / UTXO-snapshot feature
|
||||
|
||||
-- DragonX <dan-s-dev@proton.me> Tue, 07 Jul 2026 05:49:59 +0200
|
||||
|
||||
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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
1
contrib/debian/dragonx.example
Normal file
1
contrib/debian/dragonx.example
Normal file
@@ -0,0 +1 @@
|
||||
DEBIAN/examples/DRAGONX.conf
|
||||
3
contrib/debian/dragonx.install
Normal file
3
contrib/debian/dragonx.install
Normal file
@@ -0,0 +1,3 @@
|
||||
usr/bin/dragonxd
|
||||
usr/bin/dragonx-cli
|
||||
usr/bin/dragonx-tx
|
||||
3
contrib/debian/dragonx.manpages
Normal file
3
contrib/debian/dragonx.manpages
Normal file
@@ -0,0 +1,3 @@
|
||||
DEBIAN/manpages/dragonx-cli.1
|
||||
DEBIAN/manpages/dragonx-tx.1
|
||||
DEBIAN/manpages/dragonxd.1
|
||||
209
contrib/debian/examples/DRAGONX.conf
Normal file
209
contrib/debian/examples/DRAGONX.conf
Normal 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
|
||||
59
contrib/init/dragonxd.conf
Normal file
59
contrib/init/dragonxd.conf
Normal 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
|
||||
|
||||
67
contrib/init/dragonxd.init
Normal file
67
contrib/init/dragonxd.init
Normal 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
|
||||
87
contrib/init/dragonxd.openrc
Normal file
87
contrib/init/dragonxd.openrc
Normal 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
|
||||
}
|
||||
33
contrib/init/dragonxd.openrcconf
Normal file
33
contrib/init/dragonxd.openrcconf
Normal 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
|
||||
22
contrib/init/dragonxd.service
Normal file
22
contrib/init/dragonxd.service
Normal 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
|
||||
@@ -1,5 +1,5 @@
|
||||
build_darwin_CC = gcc-8
|
||||
build_darwin_CXX = g++-8
|
||||
build_darwin_CC = gcc-15
|
||||
build_darwin_CXX = g++-15
|
||||
build_darwin_AR: = $(shell xcrun -f ar)
|
||||
build_darwin_RANLIB: = $(shell xcrun -f ranlib)
|
||||
build_darwin_STRIP: = $(shell xcrun -f strip)
|
||||
@@ -10,8 +10,8 @@ build_darwin_SHA256SUM = shasum -a 256
|
||||
build_darwin_DOWNLOAD = curl --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -L -f -o
|
||||
|
||||
#darwin host on darwin builder. overrides darwin host preferences.
|
||||
darwin_CC= gcc-8
|
||||
darwin_CXX= g++-8
|
||||
darwin_CC= gcc-15
|
||||
darwin_CXX= g++-15
|
||||
darwin_AR:=$(shell xcrun -f ar)
|
||||
darwin_RANLIB:=$(shell xcrun -f ranlib)
|
||||
darwin_STRIP:=$(shell xcrun -f strip)
|
||||
|
||||
@@ -2,8 +2,8 @@ OSX_MIN_VERSION=10.12
|
||||
OSX_SDK_VERSION=10.12
|
||||
OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk
|
||||
LD64_VERSION=253.9
|
||||
darwin_CC=gcc-8 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION)
|
||||
darwin_CXX=g++-8 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION)
|
||||
darwin_CC=gcc-15 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION)
|
||||
darwin_CXX=g++-15 -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -mlinker-version=$(LD64_VERSION)
|
||||
|
||||
darwin_CFLAGS=-pipe
|
||||
darwin_CXXFLAGS=$(darwin_CFLAGS)
|
||||
|
||||
@@ -40,9 +40,15 @@ define $(package)_preprocess_cmds
|
||||
cat $($(package)_patch_dir)/cargo.config | sed 's|CRATE_REGISTRY|$(host_prefix)/$(CRATE_REGISTRY)|' > .cargo/config
|
||||
endef
|
||||
|
||||
ifeq ($(build_os),darwin)
|
||||
define $(package)_build_cmds
|
||||
CARGO=$(HOME)/.cargo/bin/cargo RUSTC=$(HOME)/.cargo/bin/rustc $(HOME)/.cargo/bin/cargo build --package librustzcash $($(package)_build_opts)
|
||||
endef
|
||||
else
|
||||
define $(package)_build_cmds
|
||||
$(host_prefix)/native/bin/cargo build --package librustzcash $($(package)_build_opts)
|
||||
endef
|
||||
endif
|
||||
|
||||
define $(package)_stage_cmds
|
||||
mkdir $($(package)_staging_dir)$(host_prefix)/lib/ && \
|
||||
|
||||
8
depends/strip-rlib-metadata.sh
Executable file
8
depends/strip-rlib-metadata.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
# Strip rust.metadata.bin from .rlib archives for macOS linker compatibility
|
||||
RLIB_DIR="$1"
|
||||
if [ -d "$RLIB_DIR" ]; then
|
||||
for rlib in "$RLIB_DIR"/*.rlib; do
|
||||
[ -f "$rlib" ] && ar d "$rlib" rust.metadata.bin 2>/dev/null || true
|
||||
done
|
||||
fi
|
||||
7
doc/beefy-DRAGONX.conf
Normal file
7
doc/beefy-DRAGONX.conf
Normal 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
29
doc/dragonxd-systemd.md
Normal 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
9
doc/dragonxd.service
Normal file
@@ -0,0 +1,9 @@
|
||||
[Unit]
|
||||
Description=DragonX daemon
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/dragonxd
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
@@ -1 +1 @@
|
||||
dist_man1_MANS=hushd.1 hush-cli.1 hush-tx.1
|
||||
dist_man1_MANS=dragonxd.1 dragonx-cli.1 dragonx-tx.1
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH HUSH-CLI "1" "March 2026" "hush-cli v3.10.5" "User Commands"
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1.
|
||||
.TH DRAGONX "1" "July 2026" "DragonX RPC client version v1.0.3-95aeaed0c-dirty" "User Commands"
|
||||
.SH NAME
|
||||
hush-cli \- manual page for hush-cli v3.10.5
|
||||
DragonX \- manual page for DragonX RPC client version v1.0.3-95aeaed0c-dirty
|
||||
.SH DESCRIPTION
|
||||
Hush RPC client version v3.10.5\-04916cdf5
|
||||
DragonX RPC client version v1.0.3\-95aeaed0c\-dirty
|
||||
.PP
|
||||
In order to ensure you are adequately protecting your privacy when using Hush,
|
||||
please see <https://hush.is/security/>.
|
||||
In order to ensure you are adequately protecting your privacy when using
|
||||
DragonX, please see <https://dragonx.is/security/>.
|
||||
.SS "Usage:"
|
||||
.TP
|
||||
hush\-cli [options] <command> [params]
|
||||
Send command to Hush
|
||||
dragonx\-cli [options] <command> [params]
|
||||
Send command to DragonX
|
||||
.TP
|
||||
hush\-cli [options] help
|
||||
dragonx\-cli [options] help
|
||||
List commands
|
||||
.TP
|
||||
hush\-cli [options] help <command>
|
||||
dragonx\-cli [options] help <command>
|
||||
Get help for a command
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
@@ -25,7 +25,7 @@ This help message
|
||||
.HP
|
||||
\fB\-conf=\fR<file>
|
||||
.IP
|
||||
Specify configuration file (default: HUSH3.conf)
|
||||
Specify configuration file (default: DRAGONX.conf)
|
||||
.HP
|
||||
\fB\-datadir=\fR<dir>
|
||||
.IP
|
||||
@@ -47,7 +47,7 @@ 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 )
|
||||
Connect to JSON\-RPC on <port> (default: 21769 )
|
||||
.HP
|
||||
\fB\-rpcwait\fR
|
||||
.IP
|
||||
@@ -70,20 +70,25 @@ Timeout in seconds during HTTP requests, or 0 for no timeout. (default:
|
||||
.IP
|
||||
Read extra arguments from standard input, one per line until EOF/Ctrl\-D
|
||||
(recommended for sensitive information such as passphrases)
|
||||
.PP
|
||||
In order to ensure you are adequately protecting your privacy when using
|
||||
DragonX, please see <https://dragonx.is/security/>.
|
||||
.SH COPYRIGHT
|
||||
|
||||
In order to ensure you are adequately protecting your privacy when using Hush,
|
||||
please see <https://hush.is/security/>.
|
||||
|
||||
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
|
||||
|
||||
Copyright \(co 2024\-2026 The DragonX Developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2016\-2024 Duke Leto and The Hush Developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2016\-2020 jl777 and SuperNET developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2016\-2018 The Zcash developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2009\-2014 The Bitcoin Core developers
|
||||
.PP
|
||||
This is experimental Free Software! Fuck Yeah!!!!!
|
||||
|
||||
.PP
|
||||
Distributed under the GPLv3 software license, see the accompanying file COPYING
|
||||
or <https://www.gnu.org/licenses/gpl-3.0.en.html>.
|
||||
or <https://www.gnu.org/licenses/gpl\-3.0.en.html>.
|
||||
@@ -1,9 +1,9 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH HUSH-TX "1" "March 2026" "hush-tx v3.10.5" "User Commands"
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1.
|
||||
.TH DRAGONX-TX "1" "July 2026" "dragonx-tx v1.0.3-4caf2fc68" "User Commands"
|
||||
.SH NAME
|
||||
hush-tx \- manual page for hush-tx v3.10.5
|
||||
dragonx-tx \- DragonX transaction utility
|
||||
.SH DESCRIPTION
|
||||
hush\-tx utility version v3.10.5\-04916cdf5
|
||||
hush\-tx utility version v1.0.3\-4caf2fc68
|
||||
.SS "Usage:"
|
||||
.TP
|
||||
hush\-tx [options] <hex\-tx> [commands]
|
||||
@@ -84,20 +84,3 @@ Load JSON file FILENAME into register NAME
|
||||
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 Hush,
|
||||
please see <https://hush.is/security/>.
|
||||
|
||||
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>.
|
||||
@@ -1,16 +1,16 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
|
||||
.TH HUSHD "1" "March 2026" "hushd v3.10.5" "User Commands"
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.1.
|
||||
.TH DRAGONX "1" "July 2026" "DragonX Daemon version v1.0.3-4caf2fc68" "User Commands"
|
||||
.SH NAME
|
||||
hushd \- manual page for hushd v3.10.5
|
||||
DragonX \- manual page for DragonX Daemon version v1.0.3-4caf2fc68
|
||||
.SH DESCRIPTION
|
||||
Hush Daemon version v3.10.5\-04916cdf5
|
||||
DragonX Daemon version v1.0.3\-4caf2fc68
|
||||
.PP
|
||||
In order to ensure you are adequately protecting your privacy when using Hush,
|
||||
please see <https://hush.is/security/>.
|
||||
In order to ensure you are adequately protecting your privacy when using
|
||||
DragonX, please see <https://dragonx.is/security/>.
|
||||
.SS "Usage:"
|
||||
.TP
|
||||
hushd [options]
|
||||
Start a Hush Daemon
|
||||
dragonxd [options]
|
||||
Start DragonX Daemon
|
||||
.SH OPTIONS
|
||||
.HP
|
||||
\-?
|
||||
@@ -32,11 +32,11 @@ 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'
|
||||
Full node client name, default 'DragonX'
|
||||
.HP
|
||||
\fB\-conf=\fR<file>
|
||||
.IP
|
||||
Specify configuration file (default: HUSH3.conf)
|
||||
Specify configuration file (default: DRAGONX.conf)
|
||||
.HP
|
||||
\fB\-daemon\fR
|
||||
.IP
|
||||
@@ -52,7 +52,11 @@ 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)
|
||||
Set database cache size in megabytes (4 to 16384). Default: adaptive \-
|
||||
uses most free RAM to speed up initial block download (far fewer
|
||||
UTXO flushes to disk) and automatically shrinks if other
|
||||
applications need memory, always leaving a reserve free. Setting
|
||||
a fixed value disables adaptive sizing.
|
||||
.HP
|
||||
\fB\-loadblock=\fR<file>
|
||||
.IP
|
||||
@@ -78,9 +82,15 @@ applied)
|
||||
.HP
|
||||
\fB\-par=\fR<n>
|
||||
.IP
|
||||
Set the number of script verification threads (\fB\-32\fR to 16, 0 = auto, <0 =
|
||||
Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 =
|
||||
leave that many cores free, default: 0)
|
||||
.HP
|
||||
\fB\-randomxverifythreads=\fR<n>
|
||||
.IP
|
||||
Number of threads for parallel RandomX PoW pre\-verification of
|
||||
post\-checkpoint blocks during sync (0 = inline only, max 16,
|
||||
default: same as \fB\-par\fR)
|
||||
.HP
|
||||
\fB\-pid=\fR<file>
|
||||
.IP
|
||||
Specify pid file (default: hushd.pid)
|
||||
@@ -337,6 +347,40 @@ Do not load the wallet and disable wallet RPC calls
|
||||
.IP
|
||||
Set key pool size to <n> (default: 100)
|
||||
.HP
|
||||
\fB\-hdtransparent\fR
|
||||
.IP
|
||||
Derive transparent addresses from the HD seed so they can be recovered
|
||||
from it (default: 1)
|
||||
.HP
|
||||
\fB\-hdseed=\fR<hex>
|
||||
.IP
|
||||
Restore a fresh/empty wallet from a 32\- or 64\-byte HD seed hex (the
|
||||
value shown in z_exportwallet's '# HDSeed=' line). WARNING:
|
||||
exposes the seed to your shell history and process list.
|
||||
.HP
|
||||
\fB\-mnemonic=\fR<words>
|
||||
.IP
|
||||
Restore/create a fresh/empty wallet from a BIP39 seed phrase, compatible
|
||||
with SilentDragonXLite (English, no passphrase). WARNING: exposes
|
||||
the phrase to your shell history and process list; prefer
|
||||
DRAGONX.conf with tight permissions.
|
||||
.HP
|
||||
\fB\-usemnemonic\fR
|
||||
.IP
|
||||
Create new wallets from a fresh BIP39 seed phrase so the 24 words can be
|
||||
exported (z_exportmnemonic) and used in SilentDragonXLite
|
||||
(default: 0)
|
||||
.HP
|
||||
\fB\-hdtransparentgaplimit=\fR<n>
|
||||
.IP
|
||||
On \fB\-mnemonic\fR/\-hdseed restore, pre\-derive this many HD transparent keys
|
||||
so a rescan can find coinbase paid to them (default: 1000)
|
||||
.HP
|
||||
\fB\-mnemonicsaplinggap=\fR<n>
|
||||
.IP
|
||||
On \fB\-mnemonic\fR/\-hdseed restore, pre\-derive this many shielded (Sapling)
|
||||
addresses so a rescan can find notes sent to them (default: 100)
|
||||
.HP
|
||||
\fB\-consolidation\fR
|
||||
.IP
|
||||
Enable auto Sapling note consolidation (default: false)
|
||||
@@ -649,8 +693,8 @@ 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)
|
||||
Listen for Stratum work requests on <port> (default: 22769 or testnet:
|
||||
22769)
|
||||
.HP
|
||||
\fB\-stratumallowip=\fR<ip>
|
||||
.IP
|
||||
@@ -659,7 +703,7 @@ 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
|
||||
Hush Arrakis Chain options:
|
||||
DragonX Chain options:
|
||||
.HP
|
||||
\fB\-ac_algo\fR
|
||||
.IP
|
||||
@@ -760,20 +804,25 @@ Starting supply, default is 10
|
||||
\fB\-ac_txpow\fR
|
||||
.IP
|
||||
Enforce transaction\-rate limit, default 0
|
||||
.PP
|
||||
In order to ensure you are adequately protecting your privacy when using
|
||||
DragonX, please see <https://dragonx.is/security/>.
|
||||
.SH COPYRIGHT
|
||||
|
||||
In order to ensure you are adequately protecting your privacy when using Hush,
|
||||
please see <https://hush.is/security/>.
|
||||
|
||||
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
|
||||
|
||||
Copyright \(co 2024\-2026 The DragonX Developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2016\-2024 Duke Leto and The Hush Developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2016\-2020 jl777 and SuperNET developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2016\-2018 The Zcash developers
|
||||
.PP
|
||||
.br
|
||||
Copyright \(co 2009\-2014 The Bitcoin Core developers
|
||||
.PP
|
||||
This is experimental Free Software! Fuck Yeah!!!!!
|
||||
|
||||
.PP
|
||||
Distributed under the GPLv3 software license, see the accompanying file COPYING
|
||||
or <https://www.gnu.org/licenses/gpl-3.0.en.html>.
|
||||
or <https://www.gnu.org/licenses/gpl\-3.0.en.html>.
|
||||
@@ -594,7 +594,7 @@ libzcash_a_CPPFLAGS = -DMULTICORE -fopenmp -fPIC -DBOOST_SPIRIT_THREADSAFE -DHAV
|
||||
#libzcash_a_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
#libzcash_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -DMONTGOMERY_OUTPUT
|
||||
|
||||
libzcash_a_CXXFLAGS = $(SAN_CXXFLAGS) $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu17
|
||||
libzcash_a_CXXFLAGS = $(SAN_CXXFLAGS) $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu++17
|
||||
libzcash_a_LDFLAGS = $(SAN_LDFLAGS) $(HARDENED_LDFLAGS)
|
||||
libzcash_a_CPPFLAGS += -DMONTGOMERY_OUTPUT
|
||||
|
||||
@@ -636,7 +636,7 @@ libhush_a_SOURCES = \
|
||||
|
||||
libhush_a_CPPFLAGS = -DMULTICORE -fopenmp -fPIC -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DBOOST_SPIRIT_THREADSAFE -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS $(HARDENED_CPPFLAGS) -pipe -O1 -g -Wstack-protector -fstack-protector-all -fPIE -fvisibility=hidden -DSTATIC $(BITCOIN_INCLUDES)
|
||||
|
||||
libhush_a_CXXFLAGS = $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu17
|
||||
libhush_a_CXXFLAGS = $(HARDENED_CXXFLAGS) -fwrapv -fno-strict-aliasing -std=gnu++17
|
||||
|
||||
libhush_a_LDFLAGS = $(HARDENED_LDFLAGS)
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ std::string HelpMessageCli()
|
||||
strUsage += HelpMessageOpt("-regtest", _("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."));
|
||||
strUsage += HelpMessageOpt("-rpcconnect=<ip>", strprintf(_("Send commands to node running on <ip> (default: %s)"), "127.0.0.1"));
|
||||
strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Connect to JSON-RPC on <port> (default: %u )"), 18030));
|
||||
strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Connect to JSON-RPC on <port> (default: %u )"), 21769));
|
||||
strUsage += HelpMessageOpt("-rpcwait", _("Wait for RPC server to start"));
|
||||
strUsage += HelpMessageOpt("-rpcuser=<user>", _("Username for JSON-RPC connections"));
|
||||
strUsage += HelpMessageOpt("-rpcpassword=<pw>", _("Password for JSON-RPC connections"));
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
SHELL = /bin/sh
|
||||
CC_DARWIN = g++-8
|
||||
CC_DARWIN = g++-15
|
||||
CC_WIN = x86_64-w64-mingw32-gcc-posix
|
||||
CC_AARCH64 = aarch64-linux-gnu-g++
|
||||
CFLAGS_DARWIN = -DBUILD_CUSTOMCC -std=c++11 -arch x86_64 -I../secp256k1/include -I../../depends/$(shell echo `../..//depends/config.guess`/include) -I../univalue/include -I../leveldb/include -I.. -I. -fPIC -Wl,-undefined -Wl,dynamic_lookup -Wno-write-strings -shared -dynamiclib
|
||||
|
||||
BIN
src/cc/customcc.dylib
Normal file
BIN
src/cc/customcc.dylib
Normal file
Binary file not shown.
@@ -32,8 +32,12 @@ class CChainPower;
|
||||
#include <boost/foreach.hpp>
|
||||
|
||||
extern bool fZindex;
|
||||
static const int SPROUT_VALUE_VERSION = 1001400;
|
||||
static const int SAPLING_VALUE_VERSION = 1010100;
|
||||
// These version thresholds control whether nSproutValue/nSaplingValue are
|
||||
// serialized in the block index. They must be <= CLIENT_VERSION or the
|
||||
// values will never be persisted, causing nChainSaplingValue to reset
|
||||
// to 0 after node restart. DragonX CLIENT_VERSION is 1000250 (v1.0.2.50).
|
||||
static const int SPROUT_VALUE_VERSION = 1000000;
|
||||
static const int SAPLING_VALUE_VERSION = 1000000;
|
||||
extern int32_t ASSETCHAINS_LWMAPOS;
|
||||
extern char SMART_CHAIN_SYMBOL[65];
|
||||
extern uint64_t ASSETCHAINS_NOTARY_PAY[];
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
// Must be kept in sync with configure.ac , ugh!
|
||||
#define CLIENT_VERSION_MAJOR 1
|
||||
#define CLIENT_VERSION_MINOR 0
|
||||
#define CLIENT_VERSION_REVISION 1
|
||||
#define CLIENT_VERSION_REVISION 2
|
||||
#define CLIENT_VERSION_BUILD 50
|
||||
|
||||
//! Set to true for release, false for prerelease or test build
|
||||
|
||||
@@ -47,7 +47,7 @@ bool sanity_test_range_fmt()
|
||||
{
|
||||
std::string test;
|
||||
try {
|
||||
test.at(1);
|
||||
(void)test.at(1);
|
||||
} catch (const std::out_of_range&) {
|
||||
return true;
|
||||
} catch (...) {
|
||||
|
||||
@@ -51,8 +51,9 @@ namespace port {
|
||||
|
||||
// Mac OS
|
||||
#elif defined(OS_MACOSX)
|
||||
#include <atomic>
|
||||
inline void MemoryBarrier() {
|
||||
OSMemoryBarrier();
|
||||
std::atomic_thread_fence(std::memory_order_seq_cst);
|
||||
}
|
||||
#define LEVELDB_HAVE_MEMORY_BARRIER
|
||||
|
||||
|
||||
BIN
src/libcc.dylib
Normal file
BIN
src/libcc.dylib
Normal file
Binary file not shown.
@@ -33,6 +33,8 @@
|
||||
#include "crypto/common.h"
|
||||
#include "hush/utiltls.h"
|
||||
#include <random.h>
|
||||
#include <random>
|
||||
#include <limits>
|
||||
#ifdef _WIN32
|
||||
#include <string.h>
|
||||
#else
|
||||
@@ -2004,7 +2006,7 @@ void ThreadMessageHandler()
|
||||
// Randomize the order in which we process messages from/to our peers.
|
||||
// This prevents attacks in which an attacker exploits having multiple
|
||||
// consecutive connections in the vNodes list.
|
||||
random_shuffle(vNodesCopy.begin(), vNodesCopy.end(), GetRandInt);
|
||||
std::shuffle(vNodesCopy.begin(), vNodesCopy.end(), std::mt19937(GetRand(std::numeric_limits<uint32_t>::max())));
|
||||
|
||||
BOOST_FOREACH(CNode* pnode, vNodesCopy)
|
||||
{
|
||||
@@ -2516,7 +2518,7 @@ void RelayTransaction(const CTransaction& tx, const CDataStream& ss)
|
||||
// We always round down, except when we have only 1 connection
|
||||
auto newSize = (vNodes.size() / 2) == 0 ? 1 : (vNodes.size() / 2);
|
||||
|
||||
random_shuffle( vRelayNodes.begin(), vRelayNodes.end(), GetRandInt );
|
||||
std::shuffle( vRelayNodes.begin(), vRelayNodes.end(), std::mt19937(GetRand(std::numeric_limits<uint32_t>::max())) );
|
||||
|
||||
vRelayNodes.resize(newSize);
|
||||
if (HUSH_TESTNODE==1 && vNodes.size() == 0) {
|
||||
|
||||
@@ -322,6 +322,15 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx
|
||||
result.push_back(Pair("anchor", blockindex->hashFinalSproutRoot.GetHex()));
|
||||
result.push_back(Pair("blocktype", "mined"));
|
||||
|
||||
// Report block subsidy and fees separately so explorers don't have to
|
||||
// reimplement the reward schedule to display them.
|
||||
CAmount nSubsidy = GetBlockSubsidy(blockindex->GetHeight(), Params().GetConsensus());
|
||||
CAmount nCoinbase = block.vtx[0].GetValueOut();
|
||||
CAmount nFees = nCoinbase - nSubsidy;
|
||||
if (nFees < 0) nFees = 0; // block 1 has premine, avoid negative
|
||||
result.push_back(Pair("subsidy", ValueFromAmount(nSubsidy)));
|
||||
result.push_back(Pair("fees", ValueFromAmount(nFees)));
|
||||
|
||||
UniValue valuePools(UniValue::VARR);
|
||||
valuePools.push_back(ValuePoolDesc("sapling", blockindex->nChainSaplingValue, blockindex->nSaplingValue));
|
||||
result.push_back(Pair("valuePools", valuePools));
|
||||
|
||||
@@ -354,7 +354,7 @@ UniValue getaddednodeinfo(const UniValue& params, bool fHelp, const CPubKey& myp
|
||||
" \"connected\" : true|false, (boolean) If connected\n"
|
||||
" \"addresses\" : [\n"
|
||||
" {\n"
|
||||
" \"address\" : \"192.168.0.201:18030\", (string) The Hush server host and port\n"
|
||||
" \"address\" : \"192.168.0.201:21768\", (string) The DragonX server host and port\n"
|
||||
" \"connected\" : \"outbound\" (string) connection, inbound or outbound\n"
|
||||
" }\n"
|
||||
" ,...\n"
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include <boost/optional/optional_io.hpp>
|
||||
#include <librustzcash.h>
|
||||
#include "zcash/Note.hpp"
|
||||
#include <random>
|
||||
#include <limits>
|
||||
extern bool fZDebug;
|
||||
|
||||
SpendDescriptionInfo::SpendDescriptionInfo(
|
||||
@@ -66,7 +68,7 @@ void TransactionBuilder::AddSaplingOutput(
|
||||
void TransactionBuilder::ShuffleOutputs()
|
||||
{
|
||||
LogPrintf("%s: Shuffling %d zouts\n", __func__, outputs.size() );
|
||||
random_shuffle( outputs.begin(), outputs.end(), GetRandInt );
|
||||
std::shuffle( outputs.begin(), outputs.end(), std::mt19937(GetRand(std::numeric_limits<uint32_t>::max())) );
|
||||
}
|
||||
|
||||
void TransactionBuilder::AddTransparentInput(COutPoint utxo, CScript scriptPubKey, CAmount value, uint32_t _nSequence)
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
#include "coins.h"
|
||||
#include "wallet/asyncrpcoperation_saplingconsolidation.h"
|
||||
#include "wallet/asyncrpcoperation_sweep.h"
|
||||
#include <random>
|
||||
#include <limits>
|
||||
#include "zcash/zip32.h"
|
||||
#include "cc/CCinclude.h"
|
||||
#include <assert.h>
|
||||
@@ -3416,7 +3418,7 @@ bool CWallet::SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int
|
||||
vector<pair<CAmount, pair<const CWalletTx*,unsigned int> > > vValue;
|
||||
CAmount nTotalLower = 0;
|
||||
|
||||
random_shuffle(vCoins.begin(), vCoins.end(), GetRandInt);
|
||||
std::shuffle(vCoins.begin(), vCoins.end(), std::mt19937(GetRand(std::numeric_limits<uint32_t>::max())));
|
||||
|
||||
BOOST_FOREACH(const COutput &output, vCoins)
|
||||
{
|
||||
|
||||
264
util/bootstrap-dragonx.bat
Normal file
264
util/bootstrap-dragonx.bat
Normal file
@@ -0,0 +1,264 @@
|
||||
@echo off
|
||||
REM Copyright 2024 The Hush Developers
|
||||
REM Copyright 2024 The DragonX Developers
|
||||
REM Released under the GPLv3
|
||||
REM
|
||||
REM Download and apply a DRAGONX blockchain bootstrap on Windows.
|
||||
REM Safely preserves wallet.dat and configuration files.
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
set "BOOTSTRAP_BASE_URL=https://bootstrap.dragonx.is"
|
||||
set "BOOTSTRAP_FALLBACK_URL=https://bootstrap2.dragonx.is"
|
||||
set "BOOTSTRAP_FILE=DRAGONX.zip"
|
||||
set "CHAIN_NAME=DRAGONX"
|
||||
|
||||
REM Data directory on Windows
|
||||
set "DATADIR=%APPDATA%\Hush\%CHAIN_NAME%"
|
||||
|
||||
REM Find dragonx-cli relative to this script
|
||||
set "CLI="
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
if exist "%SCRIPT_DIR%dragonx-cli.exe" (
|
||||
set "CLI=%SCRIPT_DIR%dragonx-cli.exe"
|
||||
)
|
||||
|
||||
echo ============================================
|
||||
echo DragonX Bootstrap Installer
|
||||
echo ============================================
|
||||
echo.
|
||||
echo [INFO] Data directory: %DATADIR%
|
||||
echo.
|
||||
|
||||
REM Step 1: Stop daemon if running
|
||||
call :stop_daemon
|
||||
if errorlevel 1 goto :error_exit
|
||||
|
||||
REM Step 2: Clean old chain data
|
||||
call :clean_chain_data
|
||||
if errorlevel 1 goto :error_exit
|
||||
|
||||
REM Step 3: Download bootstrap
|
||||
call :download_bootstrap
|
||||
if errorlevel 1 goto :error_exit
|
||||
|
||||
REM Step 4: Extract bootstrap
|
||||
call :extract_bootstrap
|
||||
if errorlevel 1 goto :error_exit
|
||||
|
||||
echo.
|
||||
echo [INFO] Bootstrap installation complete!
|
||||
echo [INFO] You can now start DragonX with: dragonxd.exe
|
||||
echo.
|
||||
goto :EOF
|
||||
|
||||
REM ============================================
|
||||
REM Stop daemon if running
|
||||
REM ============================================
|
||||
:stop_daemon
|
||||
if "%CLI%"=="" (
|
||||
echo [WARN] dragonx-cli.exe not found next to this script.
|
||||
echo [WARN] Please make sure the DragonX daemon is stopped before continuing.
|
||||
set /p "ANSWER=Is the DragonX daemon stopped? (y/N): "
|
||||
if /i not "!ANSWER!"=="y" (
|
||||
echo [ERROR] Please stop the daemon first and run this script again.
|
||||
exit /b 1
|
||||
)
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
"%CLI%" getinfo >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo [INFO] Daemon is not running.
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
echo [INFO] Stopping DragonX daemon...
|
||||
"%CLI%" stop >nul 2>&1
|
||||
|
||||
set "TRIES=0"
|
||||
:wait_loop
|
||||
"%CLI%" getinfo >nul 2>&1
|
||||
if errorlevel 1 goto :daemon_stopped
|
||||
timeout /t 2 /nobreak >nul
|
||||
set /a TRIES+=1
|
||||
if %TRIES% geq 60 (
|
||||
echo [ERROR] Daemon did not stop after 120 seconds. Please stop it manually and retry.
|
||||
exit /b 1
|
||||
)
|
||||
goto :wait_loop
|
||||
|
||||
:daemon_stopped
|
||||
echo [INFO] Daemon stopped.
|
||||
exit /b 0
|
||||
|
||||
REM ============================================
|
||||
REM Clean blockchain data, preserving wallet and config
|
||||
REM ============================================
|
||||
:clean_chain_data
|
||||
if not exist "%DATADIR%" (
|
||||
echo [INFO] Data directory does not exist yet, creating it.
|
||||
mkdir "%DATADIR%"
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
echo [INFO] Cleaning blockchain data from %DATADIR% ...
|
||||
|
||||
REM Preserve wallet.dat and config
|
||||
set "TMPDIR=%TEMP%\dragonx-bootstrap-%RANDOM%"
|
||||
mkdir "%TMPDIR%" 2>nul
|
||||
|
||||
for %%F in (wallet.dat DRAGONX.conf peers.dat) do (
|
||||
if exist "%DATADIR%\%%F" (
|
||||
copy /y "%DATADIR%\%%F" "%TMPDIR%\%%F" >nul
|
||||
)
|
||||
)
|
||||
|
||||
REM Remove blockchain directories and files
|
||||
for %%D in (blocks chainstate notarizations komodo) do (
|
||||
if exist "%DATADIR%\%%D" (
|
||||
rmdir /s /q "%DATADIR%\%%D" 2>nul
|
||||
)
|
||||
)
|
||||
for %%F in (db.log debug.log fee_estimates.dat banlist.dat) do (
|
||||
if exist "%DATADIR%\%%F" (
|
||||
del /f /q "%DATADIR%\%%F" 2>nul
|
||||
)
|
||||
)
|
||||
|
||||
REM Restore preserved files
|
||||
for %%F in (wallet.dat DRAGONX.conf peers.dat) do (
|
||||
if exist "%TMPDIR%\%%F" (
|
||||
copy /y "%TMPDIR%\%%F" "%DATADIR%\%%F" >nul
|
||||
)
|
||||
)
|
||||
rmdir /s /q "%TMPDIR%" 2>nul
|
||||
|
||||
echo [INFO] Blockchain data cleaned.
|
||||
exit /b 0
|
||||
|
||||
REM ============================================
|
||||
REM Download bootstrap (with fallback)
|
||||
REM ============================================
|
||||
:download_bootstrap
|
||||
echo [INFO] Downloading bootstrap from %BOOTSTRAP_BASE_URL% ...
|
||||
echo [INFO] This may take a while depending on your connection speed.
|
||||
|
||||
REM Try primary URL
|
||||
call :do_download "%BOOTSTRAP_BASE_URL%"
|
||||
if not errorlevel 1 goto :download_verify
|
||||
|
||||
echo [WARN] Primary download failed, trying fallback %BOOTSTRAP_FALLBACK_URL% ...
|
||||
call :do_download "%BOOTSTRAP_FALLBACK_URL%"
|
||||
if errorlevel 1 (
|
||||
echo [ERROR] Download failed from both primary and fallback servers.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:download_verify
|
||||
echo [INFO] Bootstrap download complete.
|
||||
|
||||
REM Verify SHA256 checksum
|
||||
echo [INFO] Verifying checksum...
|
||||
pushd "%DATADIR%"
|
||||
|
||||
REM Read expected hash from the .sha256 file (format: "hash filename" or "hash *filename")
|
||||
set "EXPECTED_HASH="
|
||||
for /f "tokens=1" %%A in (%BOOTSTRAP_FILE%.sha256) do (
|
||||
set "EXPECTED_HASH=%%A"
|
||||
)
|
||||
|
||||
if "%EXPECTED_HASH%"=="" (
|
||||
echo [WARN] Could not read expected checksum, skipping verification.
|
||||
goto :verify_done
|
||||
)
|
||||
|
||||
REM Use certutil to compute SHA256
|
||||
certutil -hashfile "%BOOTSTRAP_FILE%" SHA256 > "%TEMP%\dragonx_hash.tmp" 2>nul
|
||||
if errorlevel 1 (
|
||||
echo [WARN] certutil not available, skipping checksum verification.
|
||||
goto :verify_done
|
||||
)
|
||||
|
||||
REM certutil outputs hash on the second line
|
||||
set "ACTUAL_HASH="
|
||||
set "LINE_NUM=0"
|
||||
for /f "skip=1 tokens=*" %%H in (%TEMP%\dragonx_hash.tmp) do (
|
||||
if not defined ACTUAL_HASH (
|
||||
set "ACTUAL_HASH=%%H"
|
||||
)
|
||||
)
|
||||
REM Remove spaces from certutil output
|
||||
set "ACTUAL_HASH=!ACTUAL_HASH: =!"
|
||||
del /f /q "%TEMP%\dragonx_hash.tmp" 2>nul
|
||||
|
||||
if /i "!ACTUAL_HASH!"=="!EXPECTED_HASH!" (
|
||||
echo [INFO] SHA256 checksum verified.
|
||||
) else (
|
||||
echo [ERROR] SHA256 checksum verification failed! The download may be corrupted.
|
||||
echo [ERROR] Expected: !EXPECTED_HASH!
|
||||
echo [ERROR] Got: !ACTUAL_HASH!
|
||||
popd
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:verify_done
|
||||
REM Clean up checksum files
|
||||
del /f /q "%BOOTSTRAP_FILE%.md5" 2>nul
|
||||
del /f /q "%BOOTSTRAP_FILE%.sha256" 2>nul
|
||||
popd
|
||||
exit /b 0
|
||||
|
||||
REM ============================================
|
||||
REM Download files from a given base URL
|
||||
REM Usage: call :do_download "base_url"
|
||||
REM ============================================
|
||||
:do_download
|
||||
set "BASE=%~1"
|
||||
|
||||
REM Use PowerShell to download (available on all modern Windows)
|
||||
echo [INFO] Downloading %BASE%/%BOOTSTRAP_FILE% ...
|
||||
powershell -NoProfile -Command ^
|
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; try { (New-Object Net.WebClient).DownloadFile('%BASE%/%BOOTSTRAP_FILE%', '%DATADIR%\%BOOTSTRAP_FILE%') } catch { exit 1 }"
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
echo [INFO] Downloading checksums...
|
||||
powershell -NoProfile -Command ^
|
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; try { (New-Object Net.WebClient).DownloadFile('%BASE%/%BOOTSTRAP_FILE%.md5', '%DATADIR%\%BOOTSTRAP_FILE%.md5') } catch { exit 1 }"
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
powershell -NoProfile -Command ^
|
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; try { (New-Object Net.WebClient).DownloadFile('%BASE%/%BOOTSTRAP_FILE%.sha256', '%DATADIR%\%BOOTSTRAP_FILE%.sha256') } catch { exit 1 }"
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
exit /b 0
|
||||
|
||||
REM ============================================
|
||||
REM Extract bootstrap zip
|
||||
REM ============================================
|
||||
:extract_bootstrap
|
||||
echo [INFO] Extracting bootstrap...
|
||||
pushd "%DATADIR%"
|
||||
|
||||
REM Use PowerShell to extract zip, excluding wallet.dat and .conf files
|
||||
powershell -NoProfile -Command ^
|
||||
"Add-Type -AssemblyName System.IO.Compression.FileSystem; $zip = [System.IO.Compression.ZipFile]::OpenRead('%DATADIR%\%BOOTSTRAP_FILE%'); foreach ($entry in $zip.Entries) { if ($entry.Name -eq 'wallet.dat' -or $entry.Name -like '*.conf') { continue } $dest = Join-Path '%DATADIR%' $entry.FullName; if ($entry.FullName.EndsWith('/')) { New-Item -ItemType Directory -Force -Path $dest | Out-Null } else { $parent = Split-Path $dest -Parent; if (-not (Test-Path $parent)) { New-Item -ItemType Directory -Force -Path $parent | Out-Null } [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $dest, $true) } }; $zip.Dispose()"
|
||||
if errorlevel 1 (
|
||||
echo [ERROR] Extraction failed.
|
||||
popd
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo [INFO] Bootstrap extracted successfully.
|
||||
|
||||
REM Clean up archive
|
||||
del /f /q "%BOOTSTRAP_FILE%" 2>nul
|
||||
echo [INFO] Removed downloaded archive to save disk space.
|
||||
|
||||
popd
|
||||
exit /b 0
|
||||
|
||||
:error_exit
|
||||
echo.
|
||||
echo [ERROR] Bootstrap installation failed.
|
||||
exit /b 1
|
||||
@@ -9,6 +9,7 @@
|
||||
set -euo pipefail
|
||||
|
||||
BOOTSTRAP_BASE_URL="https://bootstrap.dragonx.is"
|
||||
BOOTSTRAP_FALLBACK_URL="https://bootstrap2.dragonx.is"
|
||||
BOOTSTRAP_FILE="DRAGONX.zip"
|
||||
CHAIN_NAME="DRAGONX"
|
||||
|
||||
@@ -118,35 +119,49 @@ clean_chain_data() {
|
||||
info "Blockchain data cleaned."
|
||||
}
|
||||
|
||||
# Download a file via wget or curl
|
||||
# Download a file via wget or curl (returns non-zero on failure)
|
||||
download_file() {
|
||||
local url="$1"
|
||||
local outfile="$2"
|
||||
|
||||
if command -v wget &>/dev/null; then
|
||||
wget --progress=bar:force -O "$outfile" "$url" || error "Download failed: $url"
|
||||
wget --progress=bar:force -O "$outfile" "$url"
|
||||
elif command -v curl &>/dev/null; then
|
||||
curl -L --progress-bar -o "$outfile" "$url" || error "Download failed: $url"
|
||||
curl -L --progress-bar -o "$outfile" "$url"
|
||||
else
|
||||
error "Neither wget nor curl found. Please install one and retry."
|
||||
fi
|
||||
}
|
||||
|
||||
# Try downloading from a given base URL; returns non-zero on failure
|
||||
download_from() {
|
||||
local base_url="$1"
|
||||
local outfile="$DATADIR/$BOOTSTRAP_FILE"
|
||||
local md5file="$DATADIR/${BOOTSTRAP_FILE}.md5"
|
||||
local sha256file="$DATADIR/${BOOTSTRAP_FILE}.sha256"
|
||||
|
||||
info "Downloading bootstrap from $base_url ..."
|
||||
info "This may take a while depending on your connection speed."
|
||||
|
||||
download_file "$base_url/$BOOTSTRAP_FILE" "$outfile" || return 1
|
||||
info "Bootstrap download complete."
|
||||
|
||||
info "Downloading checksums..."
|
||||
download_file "$base_url/${BOOTSTRAP_FILE}.md5" "$md5file" || return 1
|
||||
download_file "$base_url/${BOOTSTRAP_FILE}.sha256" "$sha256file" || return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
# Download the bootstrap and verify checksums
|
||||
download_bootstrap() {
|
||||
local outfile="$DATADIR/$BOOTSTRAP_FILE"
|
||||
local md5file="$DATADIR/${BOOTSTRAP_FILE}.md5"
|
||||
local sha256file="$DATADIR/${BOOTSTRAP_FILE}.sha256"
|
||||
|
||||
info "Downloading bootstrap from $BOOTSTRAP_BASE_URL ..."
|
||||
info "This may take a while depending on your connection speed."
|
||||
|
||||
download_file "$BOOTSTRAP_BASE_URL/$BOOTSTRAP_FILE" "$outfile"
|
||||
info "Bootstrap download complete."
|
||||
|
||||
info "Downloading checksums..."
|
||||
download_file "$BOOTSTRAP_BASE_URL/${BOOTSTRAP_FILE}.md5" "$md5file"
|
||||
download_file "$BOOTSTRAP_BASE_URL/${BOOTSTRAP_FILE}.sha256" "$sha256file"
|
||||
if ! download_from "$BOOTSTRAP_BASE_URL"; then
|
||||
warn "Primary download failed, trying fallback $BOOTSTRAP_FALLBACK_URL ..."
|
||||
download_from "$BOOTSTRAP_FALLBACK_URL" || error "Download failed from both primary and fallback servers."
|
||||
fi
|
||||
|
||||
# Verify checksums
|
||||
info "Verifying checksums..."
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# Distributed under the GPLv3 software license, see the accompanying
|
||||
# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
|
||||
|
||||
export CC=gcc-8
|
||||
export CXX=g++-8
|
||||
export CC=gcc-15
|
||||
export CXX=g++-15
|
||||
export LIBTOOL=libtool
|
||||
export AR=ar
|
||||
export RANLIB=ranlib
|
||||
@@ -34,16 +34,24 @@ fi
|
||||
# If --enable-lcov is the first argument, enable lcov coverage support:
|
||||
LCOV_ARG=''
|
||||
HARDENING_ARG='--disable-hardening'
|
||||
TEST_ARG=''
|
||||
if [ "x${1:-}" = 'x--enable-lcov' ]
|
||||
then
|
||||
LCOV_ARG='--enable-lcov'
|
||||
HARDENING_ARG='--disable-hardening'
|
||||
shift
|
||||
elif [ "x${1:-}" = 'x--disable-tests' ]
|
||||
then
|
||||
TEST_ARG='--enable-tests=no'
|
||||
shift
|
||||
fi
|
||||
|
||||
TRIPLET=`./depends/config.guess`
|
||||
PREFIX="$(pwd)/depends/$TRIPLET"
|
||||
|
||||
# Ensure system Rust is in PATH for modern macOS compatibility
|
||||
export PATH="$HOME/.cargo/bin:$PATH"
|
||||
|
||||
make "$@" -C ./depends/ V=1 NO_QT=1
|
||||
|
||||
#BUILD CCLIB
|
||||
@@ -68,7 +76,7 @@ cd $WD
|
||||
|
||||
./autogen.sh
|
||||
CPPFLAGS="-I$PREFIX/include -arch x86_64" LDFLAGS="-L$PREFIX/lib -arch x86_64 -Wl,-no_pie" \
|
||||
CXXFLAGS='-arch x86_64 -I/usr/local/Cellar/gcc\@8/8.3.0/include/c++/8.3.0/ -I$PREFIX/include -fwrapv -fno-strict-aliasing -Wno-builtin-declaration-mismatch -Werror -g -Wl,-undefined -Wl,dynamic_lookup' \
|
||||
./configure --prefix="${PREFIX}" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG"
|
||||
CXXFLAGS='-arch x86_64 -I/usr/local/Cellar/gcc/15.2.0_1/include/c++/15/ -I$PREFIX/include -fwrapv -fno-strict-aliasing -Wno-builtin-declaration-mismatch -Werror -Wno-error=deprecated-declarations -g -Wl,-undefined -Wl,dynamic_lookup' \
|
||||
./configure --prefix="${PREFIX}" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" $TEST_ARG
|
||||
|
||||
make "$@" V=1 NO_GTEST=1 STATIC=1
|
||||
|
||||
Reference in New Issue
Block a user