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:
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.
|
||||
|
||||
|
||||
209
README.md
209
README.md
@@ -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
|
||||
|
||||

|
||||
|
||||
# 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).
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -1 +1 @@
|
||||
DEBIAN/examples/HUSH3.conf
|
||||
DEBIAN/examples/DRAGONX.conf
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
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
|
||||
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
|
||||
62
doc/init.md
62
doc/init.md
@@ -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
|
||||
-----------------------------------
|
||||
|
||||
@@ -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
91
doc/man/dragonx-cli.1
Normal 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
105
doc/man/dragonx-tx.1
Normal 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
781
doc/man/dragonxd.1
Normal 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>.
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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(¶ms[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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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. "
|
||||
|
||||
34
src/main.cpp
34
src/main.cpp
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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 ¶ms
|
||||
|
||||
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";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
/******************************************************************************
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user