From 394c54c4da93918c2a4e368e6ece6c03bd5e1daa Mon Sep 17 00:00:00 2001 From: jahway603 Date: Sun, 17 Mar 2024 00:07:39 -0400 Subject: [PATCH 01/25] doc: update Matrix chatroom link in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a2bd9431..dc8f68d0c 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Please feel free to join us on Telegram for official support: Other socials: * Twitter: @hushisprivacy -* Matrix: @hush_main:meowchat.xyz +* Matrix: @hush_main:matrix.org * PeerTube videos.hush.is * Reddit @Myhush * Mastodon @myhushteam@fosstodon.org From e860ad6efba81cc91acadc36fd8d7d0df251872d Mon Sep 17 00:00:00 2001 From: onryo Date: Mon, 18 Mar 2024 18:03:06 +0000 Subject: [PATCH 02/25] Image to README --- doc/hush/hush0.png | Bin 0 -> 17078 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/hush/hush0.png diff --git a/doc/hush/hush0.png b/doc/hush/hush0.png new file mode 100644 index 0000000000000000000000000000000000000000..32f77375d8b1c4450a5e27276ddb03452b417365 GIT binary patch literal 17078 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 Date: Mon, 18 Mar 2024 18:03:34 +0000 Subject: [PATCH 03/25] Update image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc8f68d0c..31538216a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## What is Hush? -![Logo](doc/hush/hush.png "Logo") +![Logo](doc/hush/hush0.png "Logo") 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 From 424ca42015d253e4d4307c89331bb4d13f0af22e Mon Sep 17 00:00:00 2001 From: onryo Date: Mon, 18 Mar 2024 19:20:02 +0000 Subject: [PATCH 04/25] Update README --- README.md | 148 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 105 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 31538216a..be9b7bc72 100644 --- a/README.md +++ b/README.md @@ -1,75 +1,137 @@ -# Hush +

+ +

-## What is Hush? +

-![Logo](doc/hush/hush0.png "Logo") +| Introduction | Install | Compile | FAQ | Documentation | +| :---: | :---: | :---: | :---: | :---: | +| [What is Hush?](#what-is-hush) | [Windows 10 - Video Tutorial](#) | [Build on Debian or Ubuntu](#) | [Where can I buy Hush?](#) | [Cross compiling Windows binaries](#) +| [Why not GitHub?](#banned-by-github) | [Mac - Guideline](#) | [Build on Arch](#) | [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?](#) | [Download for Android](https://storage.hush.land/hush-sda/SilentDragonXAndroid.apk) | [Build on Fedora](#) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) +| [What is SilentDagon?](#) | [Deb package - Guideline](#) | [Ubuntu 16.04](#) | [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) + +

+ +# 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! -### 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. A competing privacy -coin takes over 24 hours to sync their full nodes because of Sprout Transactions, lulz. +some people report full nodes syncing in less than 1.5 hours. -### BANNED BY GITHUB +# 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 +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. -## Installing +# Build on Debian or Ubuntu -You can either compile it yourself or you can install a binary which was compiled by us. -Please refer to the instructions which apply to you below: +```sh +# 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. +./build.sh -j3 +``` +Video Tutorial: https://videos.hush.is/w/3kKQt81r7UUPWLHVuwK2BZ -* See [INSTALL.md](INSTALL.md) to compile from source on Linux and to cross-compile for Windows -* See [INSTALL-BIN.md](INSTALL-BIN.md) to install pre-compiled binary on Linux +# Build on Arch -### Claiming Funds From Old Hush Wallets +```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. +./build.sh -j3 +``` -If you have an older wallet, then refer to [OLD_WALLETS.md](OLD_WALLETS.md). +# Build on Fedora -### Official Explorers +```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. +./build.sh -j3 +``` + +# Install on Windows 10 + +Video Tutorial: https://videos.hush.is/w/oGXff7of3EjmGENtDtYTUX + +# Install on ARM Architecture + +1. [Download the latest debian package](https://git.hush.is/attachments/ade3f699-6a02-4f1d-af25-04d21029be48). +2. Install the Debian package: `sudo dpkg -i hush-3.10.2-aarch64.deb`. +3. Run with: `hushd`. + +# 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 +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. +./build.sh -j3 +``` + +# Installing Hush binaries + +1. [Download the release](https://git.hush.is/hush/hush3/releases) with a .deb file extension. +2. Install the Debian package: `sudo dpkg -i hush-3.10.2-amd64.deb`. +3. Run with: `hushd`. + +# Official Explorers The links for the Official Hush explorers: * [explorer.hush.is](https://explorer.hush.is) * [explorer.hush.land](https://explorer.hush.land) -We are looking for alternate explorers to be run on Tor, i2P and other TLDs, if you are interested -please join Telegram and ask questions. +# Support and Socials -### For system admins +* Telegram: https://hush.is/tg +* Matrix: https://hush.is/matrix +* Twitter: https://hush.is/twitter +* PeerTube https://hush.is/peertube -There is a new systemd user service script so you can easily start/stop/restart your hushd service on your server. -[Try it out today](doc/hushd-systemd.md) and the systemd script is located in the doc directory of the source tree. - -## Support and Socials - -Please feel free to join us on Telegram for official support: -* Main group: https://hush.is/tg -* Support group: https://hush.is/telegram_support -* Mining group: https://hush.is/telegram_mining - -Other socials: -* Twitter: @hushisprivacy -* Matrix: @hush_main:matrix.org -* PeerTube videos.hush.is -* Reddit @Myhush -* Mastodon @myhushteam@fosstodon.org - -## License +# License For license information see the file [COPYING](COPYING). From c8cd6eaa0375abb275419949cdf67be71b74d5fa Mon Sep 17 00:00:00 2001 From: onryo Date: Mon, 18 Mar 2024 19:23:54 +0000 Subject: [PATCH 05/25] Update README --- README.md | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index be9b7bc72..85811239e 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,16 @@

-

+

| Introduction | Install | Compile | FAQ | Documentation | | :---: | :---: | :---: | :---: | :---: | -| [What is Hush?](#what-is-hush) | [Windows 10 - Video Tutorial](#) | [Build on Debian or Ubuntu](#) | [Where can I buy Hush?](#) | [Cross compiling Windows binaries](#) -| [Why not GitHub?](#banned-by-github) | [Mac - Guideline](#) | [Build on Arch](#) | [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?](#) | [Download for Android](https://storage.hush.land/hush-sda/SilentDragonXAndroid.apk) | [Build on Fedora](#) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) -| [What is SilentDagon?](#) | [Deb package - Guideline](#) | [Ubuntu 16.04](#) | [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) +| [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?](#) | [Cross compiling Windows binaries](#) +| [Why not GitHub?](#banned-by-github) | [Mac - Guideline](#build-on-mac) | [Build on Arch](#build-on-arch) | [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?](#) | [Download for Android](https://storage.hush.land/hush-sda/SilentDragonXAndroid.apk) | [Build on Fedora](#build-on-fedora) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) +| [What is SilentDagon?](#) | [Deb package - Guideline](#) | [Ubuntu 16.04](#building-on-ubuntu-16-04-and-older-systems) | [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) -

+ # What is Hush? @@ -125,6 +125,27 @@ The links for the Official Hush explorers: * [explorer.hush.is](https://explorer.hush.is) * [explorer.hush.land](https://explorer.hush.land) +# Windows (cross-compiled on Linux) +Get dependencies: +```ssh +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 +``` + +Downloading Git source repo, building and running Hush: + +```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 +``` + # Support and Socials * Telegram: https://hush.is/tg From 5b9e9717800e9e5362204b796840f94ee1d3427a Mon Sep 17 00:00:00 2001 From: onryo Date: Mon, 18 Mar 2024 19:32:08 +0000 Subject: [PATCH 06/25] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 85811239e..84fb9fb68 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ | 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?](#) | [Cross compiling Windows binaries](#) +| [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?](#) | [Cross compiling Windows binaries](#windows-cross-compiled-on-linux) | [Why not GitHub?](#banned-by-github) | [Mac - Guideline](#build-on-mac) | [Build on Arch](#build-on-arch) | [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?](#) | [Download for Android](https://storage.hush.land/hush-sda/SilentDragonXAndroid.apk) | [Build on Fedora](#build-on-fedora) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) -| [What is SilentDagon?](#) | [Deb package - Guideline](#) | [Ubuntu 16.04](#building-on-ubuntu-16-04-and-older-systems) | [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) +| [What is SilentDagon?](#) | [Deb package - Guideline](#installing-hush-binaries) | [Ubuntu 16.04](#building-on-ubuntu-16-04-and-older-systems) | [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) From 754cbcb02d78316c89e1257c9e0d30b09a81e62c Mon Sep 17 00:00:00 2001 From: onryo Date: Mon, 18 Mar 2024 20:07:21 +0000 Subject: [PATCH 07/25] Update README --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 84fb9fb68..77cc01062 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,28 @@ cd hush3 ./src/hushd ``` +# What is SilentDagon? + +[SilentDragon](https://git.hush.is/hush/SilentDragon) is a desktop wallet for HUSH full node.
+[SilentDragonLite](https://git.hush.is/hush/SilentDragonLite) is a desktop wallet that does not require you to download the full blockchain. + +# What is HushChat? + +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. + +# Can I mine with CPU or GPU? + +Only ASIC mining is recommended, HUSH uses Equihash (200,9) algo as Zcash, Horizen or Komodo. + +# Where can I buy Hush? + +1. https://nonkyc.io/market/HUSH_BTC +2. https://tradeogre.com/exchange/BTC-HUSH + +# Where can I spend Hush? + +Agora market (in progress) + # Support and Socials * Telegram: https://hush.is/tg From 25009928f80d482618e1d399ac1037491448c1ff Mon Sep 17 00:00:00 2001 From: onryo Date: Mon, 18 Mar 2024 20:08:50 +0000 Subject: [PATCH 08/25] Update README --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 77cc01062..b2a165efe 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ | 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?](#) | [Cross compiling Windows binaries](#windows-cross-compiled-on-linux) -| [Why not GitHub?](#banned-by-github) | [Mac - Guideline](#build-on-mac) | [Build on Arch](#build-on-arch) | [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?](#) | [Download for Android](https://storage.hush.land/hush-sda/SilentDragonXAndroid.apk) | [Build on Fedora](#build-on-fedora) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) -| [What is SilentDagon?](#) | [Deb package - Guideline](#installing-hush-binaries) | [Ubuntu 16.04](#building-on-ubuntu-16-04-and-older-systems) | [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) +| [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) | [Mac - Guideline](#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) | [Download for Android](https://storage.hush.land/hush-sda/SilentDragonXAndroid.apk) | [Build on Fedora](#build-on-fedora) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) +| [What is SilentDagon?](#what-is-silentdagon) | [Deb package - Guideline](#installing-hush-binaries) | [Ubuntu 16.04](#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) From 63901954bedc065de3b031f05df7dd4bc8be1bb9 Mon Sep 17 00:00:00 2001 From: onryo Date: Sun, 31 Mar 2024 23:16:47 +0200 Subject: [PATCH 09/25] move stuff --- CONTRIBUTING.md | 58 ---------------------- DEVELOPING.md | 96 ------------------------------------ INSTALL-BIN.md | 11 ----- INSTALL.md | 122 ---------------------------------------------- OLD_WALLETS.md | 71 --------------------------- SECURITY.md | 90 ---------------------------------- share/genbuild.sh | 48 ------------------ test_randomx | 9 ---- 8 files changed, 505 deletions(-) delete mode 100644 CONTRIBUTING.md delete mode 100644 DEVELOPING.md delete mode 100644 INSTALL-BIN.md delete mode 100644 INSTALL.md delete mode 100644 OLD_WALLETS.md delete mode 100644 SECURITY.md delete mode 100755 share/genbuild.sh delete mode 100755 test_randomx diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 5866ab2e3..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,58 +0,0 @@ - -# Hush Core (hushd) Software Contribution Guidelines - -Thank you for reaching out and trying to make Hush an even better software application and cryptocoin platform. These contribution guidelines shall help you figuring out where you can be helpful and how to easily get started. - -## Table of Contents - -0. [Types of contributions we're looking for](#types-of-contributions-were-looking-for) -0. [Ground rules & expectations](#ground-rules--expectations) -0. [How to contribute](#how-to-contribute) -0. [Style guide](#style-guide) -0. [Setting up your environment](#setting-up-your-environment) -0. [Contribution review process](#contribution-review-process) -0. [Community](#community) - -## Types of contributions we're looking for -There are many ways you can directly contribute to Hush: - -* Debug and test the Hush Core code -* Find and fix bugs -* Improve suboptimal code -* Extend our software -* Perform a secure code review of Hush Full Node and other Hush-related software - -We have a curated list of projects with details about difficulty level and languages involved: https://git.hush.is/hush/projects - -Interested in making a contribution? Read on! - -## Ground rules & expectations - -Before we get started, here are a few things we expect from you (and that you should expect from others): - -* Be kind and thoughtful in your conversations around this project. We all come from different backgrounds and projects, which means we likely have different perspectives on "how free software and open source is done." Try to listen to others rather than convince them that your way is correct. -* Open Source Guides are released with a [Contributor Code of Conduct](./code_of_conduct.md). By participating in this project, you agree to abide by its terms. -* If you open a pull request, please ensure that your contribution does not increase test failures. If there are additional test failures, you will need to address them before we can merge your contribution. -* When adding content, please consider if it is widely valuable. Please don't add references or links to things you or your employer have created as others will do so if they appreciate it. - -## How to contribute - -If you'd like to contribute, start by searching through the [issues](https://git.hush.is/hush/hush3/issues) and [pull requests](https://git.hush.is/hush/hush3/pulls) to see whether someone else has raised a similar idea or question. - -If you don't see your idea listed, and you think it can contribute to Hush, do one of the following: -* **If your contribution is minor,** such as a fixing a typo, open a pull request. -* **If your contribution is major,** such as a new feature or bugfix, start by opening an issue first. That way, other contributors can weigh in on the discussion before you do any work. - -## Style guide - -Don't write shitty code. Do not emulate "jl777 code style" from Komodo, we consider that a bug, not a feature. - -## Setting up your environment - -The Hush Core (hushd) is mainly written in C++ with specific modules written in C. Follow the [Install](https://git.hush.is/hush/hush3/src/branch/master/INSTALL.md) instructions to build hushd from sources. For more informations about the Hush Platform and a full API documentation please visit the official [Hush Developer documentation](https://faq.hush.is/rpc/) - -Other Hush software is written in Rust or Go. We avoid Javascript at all costs. - -## Contribution review process - -We will tell you if we like your stuff. diff --git a/DEVELOPING.md b/DEVELOPING.md deleted file mode 100644 index 1de87fcc6..000000000 --- a/DEVELOPING.md +++ /dev/null @@ -1,96 +0,0 @@ -# Being a Hush Developer - -## Compiling Hush - -Normal compiling is as simple as: - - ./build.sh - -To make it use as many CPU threads as you have: - - ./build.sh -j$(nproc) # assumes linux - ./build.sh -j8 # use a fixed 8 threads, more portable - -This is dangerous! You need about 2GB of RAM per thread, plus all the -other programs and Operating System overhead. A good rule of thumb is: - -Divide how many GBs of RAM you have by 2, subtract one. Use that many jobs. - - -## Dealing with dependency changes - -Let's say you change a dependency and want the compile to notice. If your -change is outside of the main Hush source code, in ./src, simply running -`make` will not notice, and sometimes not even `build.sh`. You can always -do a fresh clone or `make clean`, but that will take a lot of time. Those -methods are actually best for Continuous Integration systems, but to help -reduce the time a developer has to wait, here are some PROTIPs. - - -If you are changing how a dependency is built, you should remove the entire directory like this: - - rm -rf depends/work/build/x86_64-unknown-linux-gnu/wolfssl/ - -The above will delete the entire source code of wolfssl dependency on `x86_64` -but it will keep the tar.gz and you will not need to download it again. If -you are testing a change in URL or SHA256, you will want to force it to download -again: - - rm -rf depends/sources/wolfssl*.tar.gz - -Now when you run `build.sh` again, you will be able to test your changes. - - -## Good Hygiene - -To avoid weird build system issues, it's often good to run: - - make clean - -*before* you switch Git branches. Otherwise, the new branches Makefiles -often are incompatible and `make clean` will be impossible, which can -sometimes introduce weird bugs or make compiling really annoying. -If `make clean` produces a compilation error, you just experienced it. - -## Switching branches - -Switching branches and doing partial compiles in Hush source code -can introduce weird bugs, which are fixed by running `build.sh` again. -Additionally, it's a good idea to run `make clean` before you switch -between branches. - -## Partial compiles - -At any point, you can modify hush source code and then use `make` or `build.sh` -to do a partial compile. The first is faster but the latter is more likely to -work correctly in all circustances. Sometimes partial compiles break weird -build system dependencies, and you must do a `make clean` first, or even -`git clean -fdx` (look up what it means first!) to clean things. The nuclear -option is to re-clone the repo, which sometimes is the least work to fix -the problem. - -Running `make` doesn't understand about dependency changes, such as Rust crates. -A simple C/C++ change can be tested with just `make` but if you change the version -of a dependency or something inside of Rust, you will need `build.sh` . - -## Generating new unix man pages - -Make sure that you have updated all version numbers in hushd and compiled, then -to generate new unix man pages for that version : - - ./util/gen-manpages.sh - -## Generating new debian packages - -After successfully compiling Hush, you can generate a debian package of these binaries with: - - ./util/build-debian-package.sh - -This command will not work on Mac OS X. Currently you cannot generate a Debian package -from operating systems other than Linux. Oh well. - -## Updates to this document - -If you think something else should be in this guide, please send your suggestions! - -Gitea: https://git.hush.is/hush/hush3 diff --git a/INSTALL-BIN.md b/INSTALL-BIN.md deleted file mode 100644 index 38c8e5a7d..000000000 --- a/INSTALL-BIN.md +++ /dev/null @@ -1,11 +0,0 @@ -# Installing Hush binaries - -1. First [download the release](https://git.hush.is/hush/hush3/releases) you want to install. It will have a .deb file extension. - -1. Next install the Debian package (change the version to what you downloaded above): - - `dpkg -i hush-3.8.0-amd64.deb` - -1. If you want to remove it, then run this to uninstall: - - `apt-get remove hush` diff --git a/INSTALL.md b/INSTALL.md deleted file mode 100644 index 1557ed4e4..000000000 --- a/INSTALL.md +++ /dev/null @@ -1,122 +0,0 @@ -# Installing Hush - -Instructions to compile Hush yourself. - -## Swap Space (Optional) -You will need at least 4GB of RAM to build hush from git source, OR you can -enable a swap file. To enable a 4GB swap file on modern Linux distributions: - -```sh -sudo fallocate -l 4G /swapfile -sudo chmod 600 /swapfile -sudo mkswap /swapfile -sudo swapon /swapfile -``` - -## Build on Debian/Ubuntu: - -```sh -# 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. -./build.sh -j3 -``` - -## 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. -./build.sh -j3 -``` - -## 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. -./build.sh -j3 -``` - -### 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 - -These instructions are a work in progress. Please report issues to https://hush.is/tg_support - -``` -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. -./build.sh -j3 -``` - -## Run a HUSH Node - -After you have compiled Hush, then you can run it with the following command: - -```sh -./src/hushd -``` - -## Windows (cross-compiled on Linux) -Get dependencies: -```ssh -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 -``` - -Downloading Git source repo, building and running Hush: - -```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 -``` - -## ARM Architecture - -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. diff --git a/OLD_WALLETS.md b/OLD_WALLETS.md deleted file mode 100644 index 99f96f46f..000000000 --- a/OLD_WALLETS.md +++ /dev/null @@ -1,71 +0,0 @@ -## Claiming Funds From Old Hush Wallets - -Hush migrated to a new mainnet after Block 500,000 on the old Hush blockchain. -Funds in addresses as of Block 500,000 were transported to our new chain. About -31,000 addresses with at least 0.00000001 HUSH were transported to the new Hush -mainnet. - -To claim funds on the new chain, there are few options. - -### Funds on exchanges - -Firstly, no bueno! Not your keys, not your coins. It's best not to store coins -on exchanges. But in this case, you lucked out! There is nothing to do to claim -new coins if you have coins on an exchange that supports the new Hush chain. -The exchange will follow the instructions from the next section and you will -magically have funds on the new chain. Note that old Hush addresses started -with `t1` and now they begin with `R`. - -To see what an old HUSH v2 address looks like on the new chain, this online tool -can be used: https://dexstats.info/addressconverter.php - -or this command line tool: https://git.hush.is/hush/hush3/src/master/contrib/convert_address.py - - -### Using an old wallet.dat - -Backup your old HUSH wallet.dat, and backup any current wallet.dat that is in - - ~/.komodo/HUSH3/ - -OR - ~/.hush/HUSH3/ - -There is no way to lose funds, as long as you have backups!!! Make sure -to make backups. Do not skip this step. - -Make sure any/all GUI wallets are stopped! Also make sure your old Hush node -and new Hush3 node are stopped: - - cd hush3 - ./src/hush-cli stop - -Do not copy wallets or move wallets while your full node is running! This could -corrupt your wallet! - -Now copy your old Hush wallet.dat to - - ~/.hush/HUSH3/ - -with a command like - - # DO NOT RUN THIS WITHOUT MAKING BACKUPS! - cp ~/.hush/wallet.dat ~/.hush/HUSH3/ - -The reason this works is that both old HUSH and new HUSH are still Bitcoin Protocol -coins, which both use secp256k1 public keys. Now start your HUSH3 node again, -with this special CLI argument that will clear out transactions from your wallet: - - cd hush3 - ./src/hushd -zapwallettxes - -This will cause a full history rescan, which will take some time. Once it's complete, -you can see your funds with this command: - - ./src/hush-cli getwalletinfo - -NOTE: Do not use this wallet except to send funds to a new wallet! - -### Private Keys - -You can also transport funds one address at a time via private keys. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 97a9a68ce..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,90 +0,0 @@ -## Reporting a Vulnerability - -You can use [Keybase](https://keybase.io/dukeleto) to find secure contact information. - -You can also contact Duke directly via SilentDragon wallet, via "Contact Duke". Encrypted sensitive data -in memo fields in highly encouraged. - -We kindly ask you to not publish or exploit any found vulnerabilities without at least contacting us first. - -Fingerprint: F16219F4C23F91112E9C734A8DFCBF8E5A4D8019 - -``` ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: Keybase OpenPGP v2.0.8 -Comment: https://keybase.io/crypto - -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 -=YSWs ------END PGP PUBLIC KEY BLOCK----- - -``` diff --git a/share/genbuild.sh b/share/genbuild.sh deleted file mode 100755 index 08fb91dc5..000000000 --- a/share/genbuild.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# Copyright (c) 2018-2024 The Hush developers -# Distributed under the GPLv3 software license, see the accompanying -# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html -if [ $# -gt 1 ]; then - cd "$2" -fi -if [ $# -gt 0 ]; then - FILE="$1" - shift - if [ -f "$FILE" ]; then - INFO="$(head -n 1 "$FILE")" - fi -else - echo "Usage: $0 " - exit 1 -fi - -DESC="" -SUFFIX="" -if [ -e "$(which git 2>/dev/null)" -a "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then - # clean 'dirty' status of touched files that haven't been modified - git diff >/dev/null 2>/dev/null - - # if latest commit is tagged and not dirty, then override using the tag name - RAWDESC=$(git describe --abbrev=0 2>/dev/null) - if [ "$(git rev-parse HEAD)" = "$(git rev-list -1 $RAWDESC 2>/dev/null)" ]; then - git diff-index --quiet HEAD -- && DESC=$RAWDESC - fi - - # otherwise generate suffix from git, i.e. string like "59887e8-dirty" - SUFFIX=$(git rev-parse --short HEAD) - git diff-index --quiet HEAD -- || SUFFIX="$SUFFIX-dirty" - -fi - -if [ -n "$DESC" ]; then - NEWINFO="#define BUILD_DESC \"$DESC\"" -elif [ -n "$SUFFIX" ]; then - NEWINFO="#define BUILD_SUFFIX $SUFFIX" -else - NEWINFO="// No build information available" -fi - -# only update build.h if necessary -if [ "$INFO" != "$NEWINFO" ]; then - echo "$NEWINFO" >"$FILE" -fi diff --git a/test_randomx b/test_randomx deleted file mode 100755 index bc41bb85c..000000000 --- a/test_randomx +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -# any CLI args given to this script will be passed along -# example: ./test_randomx -debug=randomx - ./src/hushd -ac_randomx_interval=10 -ac_randomx_lag=3 -ac_halving=20 -ac_algo=randomx -ac_name=RANDOMX10 -ac_private=1 -ac_blocktime=20 -ac_reward=500000000 -ac_supply=55555 -gen=1 -genproclimit=1 -testnode=1 $@ - -# to run via the debugger -# type "run" when gdb prompt appears -#gdb --args ./src/hushd -- -ac_algo=randomx -ac_name=RANDOMX -ac_private=1 -ac_blocktime=30 -ac_reward=500000000 -ac_supply=55555 -gen=1 -genproclimit=1 -testnode=1 From 72c86d8f69ac580095ff0653f7525dc9cc8e0bc0 Mon Sep 17 00:00:00 2001 From: onryo Date: Sun, 31 Mar 2024 23:17:16 +0200 Subject: [PATCH 10/25] move stuff --- doc/CONTRIBUTING.md | 58 +++++++++++++++++++++++++++ doc/DEVELOPING.md | 96 +++++++++++++++++++++++++++++++++++++++++++++ doc/OLD_WALLETS.md | 71 +++++++++++++++++++++++++++++++++ doc/SECURITY.md | 90 ++++++++++++++++++++++++++++++++++++++++++ util/genbuild.sh | 48 +++++++++++++++++++++++ util/test_randomx | 9 +++++ 6 files changed, 372 insertions(+) create mode 100644 doc/CONTRIBUTING.md create mode 100644 doc/DEVELOPING.md create mode 100644 doc/OLD_WALLETS.md create mode 100644 doc/SECURITY.md create mode 100755 util/genbuild.sh create mode 100755 util/test_randomx diff --git a/doc/CONTRIBUTING.md b/doc/CONTRIBUTING.md new file mode 100644 index 000000000..5866ab2e3 --- /dev/null +++ b/doc/CONTRIBUTING.md @@ -0,0 +1,58 @@ + +# Hush Core (hushd) Software Contribution Guidelines + +Thank you for reaching out and trying to make Hush an even better software application and cryptocoin platform. These contribution guidelines shall help you figuring out where you can be helpful and how to easily get started. + +## Table of Contents + +0. [Types of contributions we're looking for](#types-of-contributions-were-looking-for) +0. [Ground rules & expectations](#ground-rules--expectations) +0. [How to contribute](#how-to-contribute) +0. [Style guide](#style-guide) +0. [Setting up your environment](#setting-up-your-environment) +0. [Contribution review process](#contribution-review-process) +0. [Community](#community) + +## Types of contributions we're looking for +There are many ways you can directly contribute to Hush: + +* Debug and test the Hush Core code +* Find and fix bugs +* Improve suboptimal code +* Extend our software +* Perform a secure code review of Hush Full Node and other Hush-related software + +We have a curated list of projects with details about difficulty level and languages involved: https://git.hush.is/hush/projects + +Interested in making a contribution? Read on! + +## Ground rules & expectations + +Before we get started, here are a few things we expect from you (and that you should expect from others): + +* Be kind and thoughtful in your conversations around this project. We all come from different backgrounds and projects, which means we likely have different perspectives on "how free software and open source is done." Try to listen to others rather than convince them that your way is correct. +* Open Source Guides are released with a [Contributor Code of Conduct](./code_of_conduct.md). By participating in this project, you agree to abide by its terms. +* If you open a pull request, please ensure that your contribution does not increase test failures. If there are additional test failures, you will need to address them before we can merge your contribution. +* When adding content, please consider if it is widely valuable. Please don't add references or links to things you or your employer have created as others will do so if they appreciate it. + +## How to contribute + +If you'd like to contribute, start by searching through the [issues](https://git.hush.is/hush/hush3/issues) and [pull requests](https://git.hush.is/hush/hush3/pulls) to see whether someone else has raised a similar idea or question. + +If you don't see your idea listed, and you think it can contribute to Hush, do one of the following: +* **If your contribution is minor,** such as a fixing a typo, open a pull request. +* **If your contribution is major,** such as a new feature or bugfix, start by opening an issue first. That way, other contributors can weigh in on the discussion before you do any work. + +## Style guide + +Don't write shitty code. Do not emulate "jl777 code style" from Komodo, we consider that a bug, not a feature. + +## Setting up your environment + +The Hush Core (hushd) is mainly written in C++ with specific modules written in C. Follow the [Install](https://git.hush.is/hush/hush3/src/branch/master/INSTALL.md) instructions to build hushd from sources. For more informations about the Hush Platform and a full API documentation please visit the official [Hush Developer documentation](https://faq.hush.is/rpc/) + +Other Hush software is written in Rust or Go. We avoid Javascript at all costs. + +## Contribution review process + +We will tell you if we like your stuff. diff --git a/doc/DEVELOPING.md b/doc/DEVELOPING.md new file mode 100644 index 000000000..1de87fcc6 --- /dev/null +++ b/doc/DEVELOPING.md @@ -0,0 +1,96 @@ +# Being a Hush Developer + +## Compiling Hush + +Normal compiling is as simple as: + + ./build.sh + +To make it use as many CPU threads as you have: + + ./build.sh -j$(nproc) # assumes linux + ./build.sh -j8 # use a fixed 8 threads, more portable + +This is dangerous! You need about 2GB of RAM per thread, plus all the +other programs and Operating System overhead. A good rule of thumb is: + +Divide how many GBs of RAM you have by 2, subtract one. Use that many jobs. + + +## Dealing with dependency changes + +Let's say you change a dependency and want the compile to notice. If your +change is outside of the main Hush source code, in ./src, simply running +`make` will not notice, and sometimes not even `build.sh`. You can always +do a fresh clone or `make clean`, but that will take a lot of time. Those +methods are actually best for Continuous Integration systems, but to help +reduce the time a developer has to wait, here are some PROTIPs. + + +If you are changing how a dependency is built, you should remove the entire directory like this: + + rm -rf depends/work/build/x86_64-unknown-linux-gnu/wolfssl/ + +The above will delete the entire source code of wolfssl dependency on `x86_64` +but it will keep the tar.gz and you will not need to download it again. If +you are testing a change in URL or SHA256, you will want to force it to download +again: + + rm -rf depends/sources/wolfssl*.tar.gz + +Now when you run `build.sh` again, you will be able to test your changes. + + +## Good Hygiene + +To avoid weird build system issues, it's often good to run: + + make clean + +*before* you switch Git branches. Otherwise, the new branches Makefiles +often are incompatible and `make clean` will be impossible, which can +sometimes introduce weird bugs or make compiling really annoying. +If `make clean` produces a compilation error, you just experienced it. + +## Switching branches + +Switching branches and doing partial compiles in Hush source code +can introduce weird bugs, which are fixed by running `build.sh` again. +Additionally, it's a good idea to run `make clean` before you switch +between branches. + +## Partial compiles + +At any point, you can modify hush source code and then use `make` or `build.sh` +to do a partial compile. The first is faster but the latter is more likely to +work correctly in all circustances. Sometimes partial compiles break weird +build system dependencies, and you must do a `make clean` first, or even +`git clean -fdx` (look up what it means first!) to clean things. The nuclear +option is to re-clone the repo, which sometimes is the least work to fix +the problem. + +Running `make` doesn't understand about dependency changes, such as Rust crates. +A simple C/C++ change can be tested with just `make` but if you change the version +of a dependency or something inside of Rust, you will need `build.sh` . + +## Generating new unix man pages + +Make sure that you have updated all version numbers in hushd and compiled, then +to generate new unix man pages for that version : + + ./util/gen-manpages.sh + +## Generating new debian packages + +After successfully compiling Hush, you can generate a debian package of these binaries with: + + ./util/build-debian-package.sh + +This command will not work on Mac OS X. Currently you cannot generate a Debian package +from operating systems other than Linux. Oh well. + +## Updates to this document + +If you think something else should be in this guide, please send your suggestions! + +Gitea: https://git.hush.is/hush/hush3 diff --git a/doc/OLD_WALLETS.md b/doc/OLD_WALLETS.md new file mode 100644 index 000000000..99f96f46f --- /dev/null +++ b/doc/OLD_WALLETS.md @@ -0,0 +1,71 @@ +## Claiming Funds From Old Hush Wallets + +Hush migrated to a new mainnet after Block 500,000 on the old Hush blockchain. +Funds in addresses as of Block 500,000 were transported to our new chain. About +31,000 addresses with at least 0.00000001 HUSH were transported to the new Hush +mainnet. + +To claim funds on the new chain, there are few options. + +### Funds on exchanges + +Firstly, no bueno! Not your keys, not your coins. It's best not to store coins +on exchanges. But in this case, you lucked out! There is nothing to do to claim +new coins if you have coins on an exchange that supports the new Hush chain. +The exchange will follow the instructions from the next section and you will +magically have funds on the new chain. Note that old Hush addresses started +with `t1` and now they begin with `R`. + +To see what an old HUSH v2 address looks like on the new chain, this online tool +can be used: https://dexstats.info/addressconverter.php + +or this command line tool: https://git.hush.is/hush/hush3/src/master/contrib/convert_address.py + + +### Using an old wallet.dat + +Backup your old HUSH wallet.dat, and backup any current wallet.dat that is in + + ~/.komodo/HUSH3/ + +OR + ~/.hush/HUSH3/ + +There is no way to lose funds, as long as you have backups!!! Make sure +to make backups. Do not skip this step. + +Make sure any/all GUI wallets are stopped! Also make sure your old Hush node +and new Hush3 node are stopped: + + cd hush3 + ./src/hush-cli stop + +Do not copy wallets or move wallets while your full node is running! This could +corrupt your wallet! + +Now copy your old Hush wallet.dat to + + ~/.hush/HUSH3/ + +with a command like + + # DO NOT RUN THIS WITHOUT MAKING BACKUPS! + cp ~/.hush/wallet.dat ~/.hush/HUSH3/ + +The reason this works is that both old HUSH and new HUSH are still Bitcoin Protocol +coins, which both use secp256k1 public keys. Now start your HUSH3 node again, +with this special CLI argument that will clear out transactions from your wallet: + + cd hush3 + ./src/hushd -zapwallettxes + +This will cause a full history rescan, which will take some time. Once it's complete, +you can see your funds with this command: + + ./src/hush-cli getwalletinfo + +NOTE: Do not use this wallet except to send funds to a new wallet! + +### Private Keys + +You can also transport funds one address at a time via private keys. diff --git a/doc/SECURITY.md b/doc/SECURITY.md new file mode 100644 index 000000000..97a9a68ce --- /dev/null +++ b/doc/SECURITY.md @@ -0,0 +1,90 @@ +## Reporting a Vulnerability + +You can use [Keybase](https://keybase.io/dukeleto) to find secure contact information. + +You can also contact Duke directly via SilentDragon wallet, via "Contact Duke". Encrypted sensitive data +in memo fields in highly encouraged. + +We kindly ask you to not publish or exploit any found vulnerabilities without at least contacting us first. + +Fingerprint: F16219F4C23F91112E9C734A8DFCBF8E5A4D8019 + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: Keybase OpenPGP v2.0.8 +Comment: https://keybase.io/crypto + +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 +=YSWs +-----END PGP PUBLIC KEY BLOCK----- + +``` diff --git a/util/genbuild.sh b/util/genbuild.sh new file mode 100755 index 000000000..08fb91dc5 --- /dev/null +++ b/util/genbuild.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Copyright (c) 2018-2024 The Hush developers +# Distributed under the GPLv3 software license, see the accompanying +# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html +if [ $# -gt 1 ]; then + cd "$2" +fi +if [ $# -gt 0 ]; then + FILE="$1" + shift + if [ -f "$FILE" ]; then + INFO="$(head -n 1 "$FILE")" + fi +else + echo "Usage: $0 " + exit 1 +fi + +DESC="" +SUFFIX="" +if [ -e "$(which git 2>/dev/null)" -a "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then + # clean 'dirty' status of touched files that haven't been modified + git diff >/dev/null 2>/dev/null + + # if latest commit is tagged and not dirty, then override using the tag name + RAWDESC=$(git describe --abbrev=0 2>/dev/null) + if [ "$(git rev-parse HEAD)" = "$(git rev-list -1 $RAWDESC 2>/dev/null)" ]; then + git diff-index --quiet HEAD -- && DESC=$RAWDESC + fi + + # otherwise generate suffix from git, i.e. string like "59887e8-dirty" + SUFFIX=$(git rev-parse --short HEAD) + git diff-index --quiet HEAD -- || SUFFIX="$SUFFIX-dirty" + +fi + +if [ -n "$DESC" ]; then + NEWINFO="#define BUILD_DESC \"$DESC\"" +elif [ -n "$SUFFIX" ]; then + NEWINFO="#define BUILD_SUFFIX $SUFFIX" +else + NEWINFO="// No build information available" +fi + +# only update build.h if necessary +if [ "$INFO" != "$NEWINFO" ]; then + echo "$NEWINFO" >"$FILE" +fi diff --git a/util/test_randomx b/util/test_randomx new file mode 100755 index 000000000..7afc95931 --- /dev/null +++ b/util/test_randomx @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +# any CLI args given to this script will be passed along +# example: ./test_randomx -debug=randomx + ../src/hushd -ac_randomx_interval=10 -ac_randomx_lag=3 -ac_halving=20 -ac_algo=randomx -ac_name=RANDOMX10 -ac_private=1 -ac_blocktime=20 -ac_reward=500000000 -ac_supply=55555 -gen=1 -genproclimit=1 -testnode=1 $@ + +# to run via the debugger +# type "run" when gdb prompt appears +#gdb --args ./src/hushd -- -ac_algo=randomx -ac_name=RANDOMX -ac_private=1 -ac_blocktime=30 -ac_reward=500000000 -ac_supply=55555 -gen=1 -genproclimit=1 -testnode=1 From b446ec384c8b5a27670b55454ba79e139c46fbe7 Mon Sep 17 00:00:00 2001 From: onryo Date: Sun, 31 Mar 2024 23:54:32 +0200 Subject: [PATCH 11/25] make sure genbuild.sh builds --- Makefile.am | 2 +- src/Makefile.am | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index ace177a9d..216a1e1d0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -235,7 +235,7 @@ endif dist_bin_SCRIPTS = dist_noinst_SCRIPTS = autogen.sh util/build-debian-package.sh util/build.sh -EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/hush $(DIST_DOCS) $(BIN_CHECKS) +EXTRA_DIST = $(top_srcdir)/util/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/hush $(DIST_DOCS) $(BIN_CHECKS) install-exec-hook: echo "We no longer install fetch-params!" diff --git a/src/Makefile.am b/src/Makefile.am index 846c941fb..d6ed7eb41 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -251,7 +251,7 @@ LIBHUSH_H = \ obj/build.h: FORCE @$(MKDIR_P) $(builddir)/obj - @$(top_srcdir)/share/genbuild.sh $(abs_top_builddir)/src/obj/build.h \ + @$(top_srcdir)/util/genbuild.sh $(abs_top_builddir)/src/obj/build.h \ $(abs_top_srcdir) libbitcoin_util_a-clientversion.$(OBJEXT): obj/build.h From 06e46f7fcd708351b8b95e408c9cd0764a31157c Mon Sep 17 00:00:00 2001 From: jahway603 Date: Mon, 1 Apr 2024 14:23:18 +0000 Subject: [PATCH 12/25] Fixes to README.md - Updated table on top of README - Changed version specific instructions - Removed SDX link, as that is not Hush - Added back the Raspberry Pi ARM CPU info back under "Install on ARM Architecture" - Changed Supportd and Socials section to use native Markdown instead of HTML - Changed numbered lists to native Markdown format --- README.md | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index b2a165efe..28e83e48b 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ | 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) | [Mac - Guideline](#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) | [Download for Android](https://storage.hush.land/hush-sda/SilentDragonXAndroid.apk) | [Build on Fedora](#build-on-fedora) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) -| [What is SilentDagon?](#what-is-silentdagon) | [Deb package - Guideline](#installing-hush-binaries) | [Ubuntu 16.04](#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) +| [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) | [What is DragonX?](https://dragonx.is) | [Earn 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) @@ -20,6 +20,8 @@ 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 @@ -82,9 +84,11 @@ Video Tutorial: https://videos.hush.is/w/oGXff7of3EjmGENtDtYTUX # Install on ARM Architecture -1. [Download the latest debian package](https://git.hush.is/attachments/ade3f699-6a02-4f1d-af25-04d21029be48). -2. Install the Debian package: `sudo dpkg -i hush-3.10.2-aarch64.deb`. -3. Run with: `hushd`. +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`. # Building On Ubuntu 16.04 and older systems @@ -116,8 +120,8 @@ cd hush3 # Installing Hush binaries 1. [Download the release](https://git.hush.is/hush/hush3/releases) with a .deb file extension. -2. Install the Debian package: `sudo dpkg -i hush-3.10.2-amd64.deb`. -3. Run with: `hushd`. +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`. # Official Explorers @@ -146,10 +150,10 @@ cd hush3 ./src/hushd ``` -# What is SilentDagon? +# What is SilentDragon? -[SilentDragon](https://git.hush.is/hush/SilentDragon) is a desktop wallet for HUSH full node.
-[SilentDragonLite](https://git.hush.is/hush/SilentDragonLite) is a desktop wallet that does not require you to download the full blockchain. +* [SilentDragon](https://git.hush.is/hush/SilentDragon) is a desktop wallet for HUSH full node.
+* [SilentDragonLite](https://git.hush.is/hush/SilentDragonLite) is a desktop wallet that does not require you to download the full blockchain. # What is HushChat? @@ -157,12 +161,12 @@ HushChat is a protocol inspired by the design of Signal Protocol, it uses many o # Can I mine with CPU or GPU? -Only ASIC mining is recommended, HUSH uses Equihash (200,9) algo as Zcash, Horizen or Komodo. +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 -2. https://tradeogre.com/exchange/BTC-HUSH +1. https://tradeogre.com/exchange/BTC-HUSH # Where can I spend Hush? @@ -170,10 +174,10 @@ Agora market (in progress) # Support and Socials -* Telegram: https://hush.is/tg -* Matrix: https://hush.is/matrix -* Twitter: https://hush.is/twitter -* PeerTube https://hush.is/peertube +* 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 From 5e52b706e2e53096c66d56ac827658a4cf5682c4 Mon Sep 17 00:00:00 2001 From: onryo Date: Wed, 3 Apr 2024 18:45:31 +0000 Subject: [PATCH 13/25] Update README --- README.md | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 28e83e48b..671d9237e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ | :---: | :---: | :---: | :---: | :---: | | [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) | [What is DragonX?](https://dragonx.is) | [Earn bounty](#) +| [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/dev/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) @@ -123,12 +123,6 @@ cd hush3 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`. -# Official Explorers - -The links for the Official Hush explorers: - * [explorer.hush.is](https://explorer.hush.is) - * [explorer.hush.land](https://explorer.hush.land) - # Windows (cross-compiled on Linux) Get dependencies: ```ssh @@ -150,10 +144,18 @@ cd hush3 ./src/hushd ``` +# Official Explorers + +The links for the Official Hush explorers: + * [explorer.hush.is](https://explorer.hush.is) + * [explorer.hush.land](https://explorer.hush.land) + # What is SilentDragon? * [SilentDragon](https://git.hush.is/hush/SilentDragon) is a desktop wallet for HUSH full node.
* [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. # What is HushChat? @@ -170,7 +172,16 @@ Only ASIC mining is recommended, HUSH uses Equihash (200,9) algo, as does Zcash, # Where can I spend Hush? -Agora market (in progress) +AgoraX market (in progress) + +# Earn Hush bounty + +Developers can earn bounty by filtering various bugs and features requests in `Issues->Label`: +- https://git.hush.is/hush/hush3/issues +- https://git.hush.is/hush/SilentDragon/issues +- https://git.hush.is/hush/SilentDragonLite/issues + +![Logo](doc/hush/earnhush.png "Hush Bounty") # Support and Socials @@ -181,4 +192,4 @@ Agora market (in progress) # License -For license information see the file [COPYING](COPYING). +For license information see the file [COPYING](COPYING). \ No newline at end of file From d3b6af2c0ba14269d94caea21c3f2bfa55b56e65 Mon Sep 17 00:00:00 2001 From: onryo Date: Wed, 3 Apr 2024 18:46:12 +0000 Subject: [PATCH 14/25] Add image --- doc/hush/earnhush.png | Bin 0 -> 48139 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/hush/earnhush.png diff --git a/doc/hush/earnhush.png b/doc/hush/earnhush.png new file mode 100644 index 0000000000000000000000000000000000000000..9437fb259585ed089b16f6e5ce4f09a472529a78 GIT binary patch literal 48139 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 literal 0 HcmV?d00001 From f8481013a7649fbc4e2c18fb0b228f4d331c6ba8 Mon Sep 17 00:00:00 2001 From: onryo Date: Wed, 3 Apr 2024 19:01:21 +0000 Subject: [PATCH 15/25] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 671d9237e..ddfff9388 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,7 @@ HushChat is a protocol inspired by the design of Signal Protocol, it uses many o # Can I mine with CPU or GPU? -Only ASIC mining is recommended, HUSH uses Equihash (200,9) algo, as does Zcash, Horizen or Komodo. +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? @@ -176,7 +176,7 @@ AgoraX market (in progress) # Earn Hush bounty -Developers can earn bounty by filtering various bugs and features requests in `Issues->Label`: +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 From 0d0a7e95875ef00e9c861c98528b8398188c9240 Mon Sep 17 00:00:00 2001 From: Duke Date: Thu, 18 Apr 2024 06:41:25 -0700 Subject: [PATCH 16/25] Fix 'writing 1 byte into region of size 0' --- src/sietch.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sietch.h b/src/sietch.h index fe6352072..4194e19eb 100644 --- a/src/sietch.h +++ b/src/sietch.h @@ -29,8 +29,8 @@ SendManyRecipient newSietchRecipient(string zaddr) { // Sietch zouts have random data in their memos so they are indistinguishable from // encrypted data being stored in the memo field char hex[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; - // memo field is 512 bytes or 1024 hex chars - char str[1024]; + // memo field is 512 bytes or 1024 hex chars plus a null byte + char str[1025]; for(int i=0;i<1024;i++) { str[i] = hex[GetRandInt(16)]; } From 18e3364bc260e19cf2705c670d6902ee83375248 Mon Sep 17 00:00:00 2001 From: Duke Date: Fri, 19 Apr 2024 07:32:12 -0400 Subject: [PATCH 17/25] Make docs for addnode/disconnectnode correct for HACs #376 --- src/rpc/net.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/rpc/net.cpp b/src/rpc/net.cpp index de61c3eff..096f7b558 100644 --- a/src/rpc/net.cpp +++ b/src/rpc/net.cpp @@ -31,6 +31,8 @@ #include #include +extern uint16_t ASSETCHAINS_P2PPORT,ASSETCHAINS_RPCPORT; + using namespace std; using namespace hush; @@ -276,8 +278,8 @@ UniValue addnode(const UniValue& params, bool fHelp, const CPubKey& mypk) "1. \"node\" (string, required) The node (see getpeerinfo for nodes)\n" "2. \"command\" (string, required) 'add' to add a node to the list, 'remove' to remove a node from the list, 'onetry' to try a connection to the node once\n" "\nExamples:\n" - + HelpExampleCli("addnode", "\"192.168.0.6:18030\" \"onetry\"") - + HelpExampleRpc("addnode", "\"192.168.0.6:18030\", \"onetry\"") + + HelpExampleCli("addnode", "\"192.168.0.6:" + to_string(ASSETCHAINS_P2PPORT) + "\" \"onetry\"") + + HelpExampleRpc("addnode", "\"192.168.0.6:" + to_string(ASSETCHAINS_P2PPORT) + "\", \"onetry\"") ); string strNode = params[0].get_str(); @@ -320,8 +322,8 @@ UniValue disconnectnode(const UniValue& params, bool fHelp, const CPubKey& mypk) "\nArguments:\n" "1. \"node\" (string, required) The node (see getpeerinfo for nodes)\n" "\nExamples:\n" - + HelpExampleCli("disconnectnode", "\"192.168.0.6:18030\"") - + HelpExampleRpc("disconnectnode", "\"192.168.0.6:18030\"") + + HelpExampleCli("disconnectnode", "\"192.168.0.6:" + to_string(ASSETCHAINS_P2PPORT) + "\"") + + HelpExampleRpc("disconnectnode", "\"192.168.0.6:" + to_string(ASSETCHAINS_P2PPORT) + "\"") ); CNode* pNode = FindNode(params[0].get_str()); From e42b53403623b002e6a422fb423710998fc9e17e Mon Sep 17 00:00:00 2001 From: Duke Date: Mon, 6 May 2024 08:29:24 -0700 Subject: [PATCH 18/25] Keybase is no longer used --- doc/SECURITY.md | 90 ------------------------------------------------- 1 file changed, 90 deletions(-) delete mode 100644 doc/SECURITY.md diff --git a/doc/SECURITY.md b/doc/SECURITY.md deleted file mode 100644 index 97a9a68ce..000000000 --- a/doc/SECURITY.md +++ /dev/null @@ -1,90 +0,0 @@ -## Reporting a Vulnerability - -You can use [Keybase](https://keybase.io/dukeleto) to find secure contact information. - -You can also contact Duke directly via SilentDragon wallet, via "Contact Duke". Encrypted sensitive data -in memo fields in highly encouraged. - -We kindly ask you to not publish or exploit any found vulnerabilities without at least contacting us first. - -Fingerprint: F16219F4C23F91112E9C734A8DFCBF8E5A4D8019 - -``` ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: Keybase OpenPGP v2.0.8 -Comment: https://keybase.io/crypto - -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 -=YSWs ------END PGP PUBLIC KEY BLOCK----- - -``` From ba86196409eec6f741e69638c19358a7cc47b293 Mon Sep 17 00:00:00 2001 From: Duke Date: Mon, 6 May 2024 08:33:20 -0700 Subject: [PATCH 19/25] This document is bitrotten and not useful --- doc/bips.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 doc/bips.md diff --git a/doc/bips.md b/doc/bips.md deleted file mode 100644 index 35ef70c65..000000000 --- a/doc/bips.md +++ /dev/null @@ -1,4 +0,0 @@ -BIPs that are implemented by Hush (up-to-date up to **v1.1.0**): - -* Numerous historic BIPs were present in **v1.0.0** at launch; see [the protocol spec](https://github.com/zcash/zips/blob/master/protocol/protocol.pdf) for details. -* [`BIP 111`](https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki): `NODE_BLOOM` service bit added, but only enforced for peer versions `>=170004` as of **v1.1.0** ([PR #2814](https://github.com/zcash/zcash/pull/2814)). From 5273f4be9eb4eaa3e886342357898b4b866dff68 Mon Sep 17 00:00:00 2001 From: Duke Date: Mon, 6 May 2024 08:42:26 -0700 Subject: [PATCH 20/25] Give Hush mainnet a dedicated minimum protocol version #345 Hush and DragonX do not have the same requirements for which nodes they should talk to because they don't necessarily have consensus changes at the same time. For instance, 3.10.0 was a consensus change for Hush but not DragonX. This commit changes things so that Hush nodes will no longer talk to old nodes that are not consensus compatible but leaves things the same for DragonX mainnet, which has never had a consensus change. --- src/main.cpp | 6 +++--- src/version.h | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index bfcd3c538..475c1546b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -106,7 +106,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; -bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; +const bool ishush3 = strncmp(SMART_CHAIN_SYMBOL, "HUSH3",5) == 0 ? true : false; int32_t nFirstHalvingHeight = 340000; unsigned int expiryDelta = DEFAULT_TX_EXPIRY_DELTA; @@ -6886,7 +6886,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, LogPrintf("dropmessagestest DROPPING RECV MESSAGE\n"); return true; } - auto p2pdebug = GetArg("-p2pdebug",0); + const bool p2pdebug = GetArg("-p2pdebug",0); if(p2pdebug) fprintf(stderr,"%s: netmsg: %s from %s\n", __func__, strCommand.c_str(), pfrom->addr.ToString().c_str() ); @@ -6913,7 +6913,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 - int minVersion = MIN_PEER_PROTO_VERSION; + const int minVersion = ishush3 ? MIN_HUSH_PEER_PROTO_VERSION : MIN_PEER_PROTO_VERSION; vRecv >> nVersion >> pfrom->nServices >> nTime >> addrMe; if (nVersion == 10300) nVersion = 300; diff --git a/src/version.h b/src/version.h index 74a686bd1..d4641ec5a 100644 --- a/src/version.h +++ b/src/version.h @@ -26,8 +26,13 @@ static const int PROTOCOL_VERSION = 1987426; static const int INIT_PROTO_VERSION = 209; //! In this version, 'getheaders' was introduced. static const int GETHEADERS_VERSION = 31800; -//! disconnect from peers older than this proto version + +//! disconnect from peers older than this proto version (HUSH mainnet) +static const int MIN_HUSH_PEER_PROTO_VERSION = 1987426; + +//! disconnect from peers older than this proto version (HACs) static const int MIN_PEER_PROTO_VERSION = 1987420; + //! nTime field added to CAddress, starting with this version; //! if possible, avoid requesting addresses nodes older than this static const int CADDR_TIME_VERSION = 31402; From 535d78595ea322845eb5e5e4639abe75c362ef8d Mon Sep 17 00:00:00 2001 From: jahway603 Date: Thu, 9 May 2024 09:43:56 -0400 Subject: [PATCH 21/25] Updated Debian package changelog to resolve Issue #405 --- contrib/debian/changelog | 402 +++++++++++++++++++++++++++++++++++++++ contrib/debian/control | 4 +- 2 files changed, 405 insertions(+), 1 deletion(-) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index 08ed69a2c..942b50ea5 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -1,3 +1,405 @@ +hush (3.10.2) stable; urgency=medium + + * Upgraded WolfSSL to 5.2.0 on Linux and Mac: #380. + * Upgraded to 4.8.1 on Windows because newer versions do not compile on it + * Only Hush and DragonX will automatically connect to various seed nodes + * Updated i2p seed node: 8c8b6e88f0. + * Removed unused code. + * Fixed boost download link: 323d2134a1. + * Hush and DragonX full nodes take up a lot less memory and binaries are now + smaller due to the cryptoconditions removal, which means syncing, rescanning + and compiling is faster: #381. + * Removed CLI options related to CryptoConditions: -ac_cc, -ac_cclib, + -ac_ccenable, and -ac_ccactivate + * Large page support enabled, which can lead to a 1-2% speed increase in + mining depending on RAM and CPU. + * Various small optimizations such as making some variables static or const + and removing unnecessary conditionals. + * Mining now starts faster because instead of only using 2 threads to prepare + data needed to mine, it now uses all physical cores: 1b5422eb2d. + * RandomX mining now takes slightly less memory. + * Added script for scanning DragonX nodes: 0679468f60. + * More details about p2p encryption: ccc86839b9, a358acab0b, 4ed576a7e2. + * Added Fedora install process: #384. + * Added Arch install process: #393. + * Implemented better error messages: f64c10baa9, f71f8124c3. + * Improved hush_scanner and seed node contrib file: 16dd3aef74. + * Removed unused Makefile: #291. + + -- Hush Core Tue, 05 Mar 2024 18:29:47 -0700 + +hush (3.10.1) stable; urgency=medium + + * Fixed bug causing "payment to wrong pubkey" error when syncing a new node + * Faster syncing of Hush and DragonX full nodes + * Slightly less memory usage in each Equihash/RandomX mining thread + * Fixed compiling issues related to RandomX v1.2.1 + * Improved RPC docs for getblocktemplate + * Removed the getdeprecationinfo RPC + + -- Hush Core Tue, 02 Jan 2024 15:16:40 -0700 + +hush (3.10.0) stable; urgency=medium + + * Hush and all Hush Smart Chains now use less RAM #283 + * Hush and all Hush Smart Chains now make it harder and more expensive for + an attacker to send shielded spam. This raises the cost in CPU 14d3ae1785 + and transaction fees 2308db22ee for Denial-of-Service attacks. + * Bug fix: Fixed hush-cli stop not stopping the node during the "Building + Witnesses" rescan phase #330 + * Bug fix: Fixed abortrescan couldn't be used when node starting up (RPC + warmup) and where it could not abort the rescan if it was in the "Building + Witnesses" phase #331 + * Bug fix: Fixed z_mergetoaddress where docs said you could use ANY_ZADDR + but you couldn't 7eb9d75b94 + * New RPC: z_listunspent now returns the text representation of a memo in + memoStr key + * New RPC: z_getstats which reports data about numer of shielded inputs (zins) + and shielded outputs (zouts) in transactions. 96ae2d61ca + * CVE fix: Upgraded curl to 8.4.0 #325 to fix CVE-2023-38545 + * New documentation about using CJDNS with Hush + * Implemented decentralized Devtax + * Updated to latest RandomX v1.2.1 which includes mining optimizations + * Fixed RandomX mining memory leak and crash #324 + * Fixed quoting bugs with dragonx-cli script + + -- Hush Core Tue, 28 Nov 2023 16:47:59 -0700 + +hush (3.9.4) stable; urgency=medium + + * Hush and DragonX nodes will now sync much faster + * DragonX now has checkpoints for faster & better chain security #243 #304 + * Updated to the latest RandomX code + * Rate limiting for the processing of incoming address messages for + increased security. #272 + * Removed unused function CWalletTx::GetRequestCount #273 + * Removed mapRequest tracking that only affects Qt display. #274 + * Randomized message processing peer order for increased privacy. #275 + * Removed BIP35 mempool p2p message for increased privacy. #284 + * Added additional community seed nodes + * Use custom jobs param when compiling boost for faster compile times #288 + * Now builds with gcc13 thanks to testing from jahway #293 + * Bug fix: -stratumallowip works with CIDR and netmask ranges again for solo + miners #270 + * Bug fix: Detect missing autoreconf in build.sh #289 + * Bug fix: Various assertions removed from BIP155 changes #297 + + -- Hush Core Sun, 02 Jul 2023 17:47:39 -0700 + +hush (3.9.3) stable; urgency=medium + + * Difficulty bug affecting DRAGONX has been fixed + * RandomX mining hashrate increase of about 60X + * Optimized memory usage of RandomX mining + * Adds Tor v3 and i2p support (BIP155 also known as addrv2) + * New RPC: getrescaninfo - Says if node is rescanning with additional info + about progress + * New RPC: abortrescan - Stops rescanning if node is currently rescanning + + -- Hush Core Mon, 13 Feb 2023 15:02:48 -0700 + +hush (3.9.2) stable; urgency=medium + + * This release adds RandomX support in Hush Smart Chains (HSCs) + * A new feature called "zsweep" has been added, which defaults to disabled. + * Expired transactions will not be relayed & nodes doing so no longer banned + * Fix a rare coredump when nodes have many unconfirmed or expired transactions + * New RPC: getblockmerkletree, which shows full Merkle Tree for a block height + * New RPC: z_consolidationstatus will show config + stats about consolidation + * New RPC: z_anonsettxdelta : Returns delta (difference) in the anonset for a + given txid. + * New RPC: z_anonsetblockdelta : Returns delta (difference) in the anonset for + a given block. + * getrawtransaction RPC now returns a "size" key with the size in bytes of a + transaction + * sendmany RPC will now reject transactions that send to t-addresses + immediately, instead of them being rejected in mempool + * New contrib script: contrib/gen-zaddrs.pl - Generates z-addresses in bulk + * New contrib script: contrib/sdl_checkpoints.pl - Generate SDL checkpoints + using getblockmerkletree + * ZeroMQ support has been removed from Hush + + -- Hush Core Tue, 27 Sep 2022 14:08:15 -0700 + +hush (3.9.1) stable; urgency=medium + + * Fix RPC deadlocks, which caused the RPC interface to hang + * The listbanned RPC now returns a new key time_remaining which tells how many + seconds are remaining in the ban + * The rescan RPC now works correctly when given a height. This can be used to + do a partial rescan from a custom height, without restarting the node. + * Minimum disk space required for running full node increased to 1GB from 50MB + * Dockerfile has been updated + + -- Hush Core Tue, 25 Jan 2022 06:39:18 -0700 + +hush (3.9.0) stable; urgency=medium + + * hushd, hush-cli, and hush-tx are now true binaries instead of shell scripts + * New official location for full node data is ~/.hush and existing full + nodes will continue to use the legacy ~/.komodo directory + * Hush full nodes will now attempt to talk to two more nodes by default: + node1.hush.land and node2.hush.land + * New RPC: listaddresses - Show all taddrs in this wallet.dat + * New RPC: rpcinfo - Shows stats about RPC internals + * These RPCs can now be run during RPC warmup: listaddresses, z_exportwallet, + signmessage, decoderawtransaction, and getnetworkinfo + * New doc/hushd.service to use hushd with systemd + * Optimize zaddrs by only building block's witness caches involving our wallet + connection on + * When RPC connection fails hush-cli now tells you which port it was trying to + connect to + * Calculation of HSC "network magic" has changed as of 3.9.0 + * New Stratum API so you can Solo mine with your full node, enable it + with -stratum=1 + * hush-smart-chain script now installed in Debian packages + * Now compatible on SBC (Single Board Computer) like PineBook, Rock64, + Raspberry Pi, etc. + + -- Hush Core Thu, 21 Oct 2021 04:44:44 -0700 + +hush (3.8.0) stable; urgency=medium + + * New Sietch feature: Randomized change output location + * New Sietch feature: Sietch-ified z_shieldcoinbase + * Implemented patch to fix how the longest chain is calculated, which could + prevent mining pools from making payout transactions + * plz_stop feature implemented for when RPC interface is not functioning + (such as filled by deadlocks) making it impossible to shut it down correctly + * -keepnotewitnesscache prevents Sapling Note Witness cache from being + deleted from wallet.dat on shutdown. + * -rescanheight can be used with -keepnotewitnesscache and -rescan to do a + partial rescan of history and avoid completely rebuilding the Witness Cache + * -zindex data is now stored on disk in the new zindex.dat file + * getpeerinfo now returns a relaytxes key which says if a remote node is + relaying transactions to your node + * Improvements to the RPC help documentation + + -- Hush Core Sat, 10 Jul 2021 06:53:52 -0700 + +hush (3.7.1) stable; urgency=medium + + * More internals code related to unused Sprout transactions removed, making Hush run and compile faster and use less memory. + * Now provides a more useful error message when a user attempts to make a transaction before the node is synced. + * z_sendmany RPC docs now show an example of a z2z transaction + * Deprecated alert p2p message is no longer processed and nodes using it will be banned + * try-before-evict ported from BTC core, which helps protect again Eclipse and Sybil Attacks + * "Feeler connections" ported from BTC, another technique which makes Eclipse and Sybil Attacks harder and more expensive + * New RPC: z_getbalances returns a list of all zaddrs with non-zero balance. + * "Automagic z_sendmany" makes the RPC easier to use and also improves privacy + + -- Hush Core Wed, 21 Apr 2021 14:18:12 -0700 + +hush (3.7.0) stable; urgency=medium + + * Improved TLS error reporting + * Fix bug relating to calculating difficulty + + -- Hush Core Thu, 01 Apr 2021 02:53:21 -0700 + +hush (3.6.3) stable; urgency=medium + + * Maintenance release, which is mostly the same as 3.6.2 but it fixes some + issues in Debian+Arch packages and binaries not able to find asmap.dat + + -- Hush Core Fri, 26 Feb 2021 14:42:59 -0700 + +hush (3.6.2) stable; urgency=medium + + * Autonomous System Map (asmap) bucketing by default + * New CLI flag -asmap is on by default, and can be turned off with -asmap=0 + * debug.log is now shrunk to 15MB instead of 100MB + * The max size of debug.log can now be controlled via -maxdebugfilesize + + -- Hush Core Sun, 21 Feb 2021 14:21:31 -0700 + +hush (3.6.1) stable; urgency=medium + + * WolfSSL upgraded to 4.6.0 and side-channel resistance enabled via + ECC_TIMING_RESISTANT + * Hush full nodes now exclusively communivate via P2P messages with TLS1.3 as + the option -tls=only has become default and cannot be turned off + * Improved error-handling and logging of TLS connections + * getpeerinfo now shows 3 new keys for each peer + * New developer documentation in DEVELOPING.md + * -whitelist and -whitelistaddress now called -allowlist and -allowlistaddress + * Minimum protocol version is now 1987420 + + -- Hush Core Wed, 27 Jan 2021 19:42:38 -0700 + +hush (3.6.0) stable; urgency=medium + + * Fixes sync issues near block 340k caused by blocktime halving bug + * New official domain https://hush.is reflected everywhere + * New Hush DPoW Notaries replace KMD Notaries + * Increased in-memory UTXO cache db by 100MB (25%) to increase performance of + initial syncing + * Prevent Delayed-Proof-of-Work attack from Komodo Notaries + * New -dpow-start-height CLI flag used to reject all DPoW transactions (and + attacks) up to a certain height, as general defense against any DPoW attacks + * More secure + private TLS 1.3 implementation + * Switched to WolfSSL 4.5.0 instead of OpenSSL + * Nodes randomly choose between GCM-SHA384 and CHACHA20-POLY1305-SHA256 when + making connections to other nodes. + * Faster release binaries with -03 + * Optimized and hardened memory pool code + * getblocktemplate RPC now provides better error reporting about whether there + are no peers or if it's not in sync + * Removed more Sprout code, which is tightly mixed into deep internals, + resulting in increased compile speed and reduced memory overhead + * New P2P protocol version. Peers only talk to 3.5.x nodes and newer + + -- Hush Core Fri, 18 Dec 2020 02:07:35 -0700 + +hush (3.5.2) stable; urgency=medium + + * Re-released hushd under the GNU Public License Version 3 (GPLv3) + * The z_listreceivedaddress RPC now returns a memoStr key for the utf8 string + representation of a shielded memo, if it exists + + -- Hush Core Thu, 22 Oct 2020 16:16:19 -0700 + +hush (3.5.1) stable; urgency=medium + + * TLS 1.3 support ported from ZEN with custom Hush tweaks + * All nodes will try using encrypted TLS connections with peers by default + * getinfo now returns a tls_connections key in JSON data + * -tls=only can be used to only use encrypted connections + * ASN map filtering of peers, ported from KMD + BTC Core + + -- Hush Core Tue, 06 Oct 2020 07:43:47 -0700 + +hush (3.5.0) stable; urgency=medium + + * Finalize changes to support new Blocktime of 75 seconds + * Updated the Hush Halving schedule, i.e. Emission Curve, for the next ~120 + years (the next 30 halvings) + * The Hush Block Reward will go to zero at Block 50740000 in the year 2140 + * Greatly improved Sietch implementation with "amnesia zdust" addresses + * Sietch zdust outputs now always contain "random/encrypted" data + * -wallet CLI option supports wallets outside the datadir and relative paths + * -txsend CLI option ported from Zcash upstream to help with i2p integration + * Improved aarch64 support for Raspberry Pi 4 + * Removed the proton optional dependency + * GetAdjustedTime() replaced with GetTime() + * Correctly keep track of ChainShieldedSpends for z_getchaintxstats + * timeoffset key in getpeerinfo and getnetworkifo deprecated and now always 0 + * More remnants of dead Sprout/JoinSplit code removed + * Added a z_listreceivedaddress RPC which internals never had RPC access + * Fixes and improvements to deletetx=1, still considered experimental + * Checkpoints updated up to Block 300K + + -- Hush Core Wed, 23 Sep 2020 22:03:17 -0700 + +hush (3.4.0) stable; urgency=medium + + * New Season 4 KMD Notary pubkeys have been updated (as of Block 245555) + * ENFORCED PRIVACY (aka z2z) merged & set to take effect at Block 340000 + * All remaining internals code relating to Sprout has been deleted + * The new Subatomic Dapp has been ported from KMD, which supports z2z swaps + * Implemented own mirror of Boost in our build system + * Merged various fixes relating to CryptoConditions from KMD upstream + * Optimizations and bug fixes to Sapling Consolidation + * Fixes CVE-2018–20586 from KMD (which ported it from BTC) + * Added z_getnotescount RPC + * Updated ccache dependency to 3.7.9 + * Ported the -txexpirynotify CLI option from ZEC upstream + * Added rescan RPC for wallets to initiate a rescan without importing a key + and without restarting + + -- Hush Core Thu, 18 Jun 2020 09:35:31 -0700 + +hush (3.3.2) stable; urgency=medium + + * ARMv8 support added + * Sapling Zaddr Consolidation, which reduces the size of wallets and + increases performance for service providers + * New CLI options added to hushd - refer to release notes for specifics + * New RPCs: z_getinfo, z_listsentbyaddress, z_listreceivedbyaddress, + getalldata + * New -opretmintxfee ported from KMD upstream + * ThreadNotifyWallets refactor ported from ZEC upstream + * Deletion of libsnark internal library + * Shielded index (zindex) statistics of coinbase and organic + transactions/payments corrected + * Updated dependencies: curl, boost, native_ccache, openssl, and proton + * Removed more Sprout-only RPC's (zcbenchmark, zcrawjoinsplit) and code + * Various improvements to RPC documentation + + -- Hush Core Wed, 08 Apr 2020 12:21:44 -0700 + +hush (3.3.1) stable; urgency=medium + + * Maintenance release fixes a non-consensus bug in sendmany which prevented + it from working. + + -- Hush Core Sat, 18 Jan 2020 09:16:21 -0700 + +hush (3.3.0) stable; urgency=medium + + * New "Sietch" functionality protects against new metadata attacks + * New ability to launch Hush Smart Chains with a single command + * Fixes CVE-2019-18936 in UniValue dependency: bitcoin/bitcoin#17742 + * New experimental Shielded Index (-zindex) which keeps track of many stats + seen via the new getchaintxstats RPC including shielded payments, + anonymity set size and many other things. + * New experimental z_listnullifiers RPC which returns Sapling nullifiers. + * Updates + fixes to all CryptoConditions smart contracts from KMD 0.5.0 + * Updates NSPV/Superlite code from KMD 0.5.0 + * Update 3rd party KMD Notary node pubkeys moving Hush from a run-time + fork of KMD to a source code fork + * Enable creation of z-only (like Pirate) Hush Smart Chains via -ac_private=1 + * Removed more Sprout-specific code, making hushd faster & easier to maintain + * Allow hush-cli stop to be run during RPC warmup + * Update to libsodium 1.0.18 + * Removes VerusHash from the source code + * Removed large amounts of Proof-of-Stake-related code not used in Hush + * Ported AFL fuzzing features to our build system from Zcash + * Changed max debug.log size from 10MB to 100MB + * Added checkpoints for every 1000th Hush block + * New contrib/checkpoints.pl script to automatically generate checkpoints + * Deleted QT wallet code inherited from Bitcoin, which was old and broken + * z_exportwallet can now optionally not rescan + * New SHA256 SSE4 routines ported from KMD (which was ported from BTC), + enabled with --enable-experimental-asm=yes + * debug.log no longer containts a log2_stake column + * New --hardfork-height CLI option for devs+notaries for testing + + -- Hush Core Fri, 03 Jan 2020 10:13:17 -0700 + +hush (3.2.3) stable; urgency=medium + + * Update build dependencies to use own forks of libgmp, libsnark, libsodium + * New RPC keys are now returned in getblockchaininfo : longestchain and + notarized which are now used by the SDL backend + + -- Hush Core Sat, 14 Dec 2019 04:59:59 -0700 + +hush (3.2.2) stable; urgency=medium + + * Fix CVE-2017-18350 from ZEC and windows portability fix from KMD upstream + * Removed some Sprout code + * Fixed some rare edge case bugs in Sapling param finding code + * New detection of "corrupt" Sapling params (invalid sizes) to helps give + users the correct error in a GUI wallet (corrupt versus no params) + * Fix Sapling params to support Mac DMGs being installed to /Applications + + -- Hush Core Tue, 26 Nov 2019 12:17:17 -0700 + +hush (3.2.1) stable; urgency=medium + + * Fixes issues discovered in Hush 3.2.0 + * New DEVELOPING.md document for advice working on Hush codebase + * Updated to latest upstream SuperLite/nSPV features + * Merged in latest cryptocondition/Antara module updates from KMD upstream + * Fixed a bug that corrupts the block index on second startup + * Improved code to locate installed Sapling params, since Debian packages + install them into /usr/share/hush + * Updated DNSSeeds + * Fix fees associated with transactions in the mempool with fSkipExpiry=0 + + -- Hush Core Tue, 29 Oct 2019 22:34:35 -0700 + hush (3.2.0) stable; urgency=medium * 3.2.0.1 release. diff --git a/contrib/debian/control b/contrib/debian/control index 8526dd6b4..ec0ceb293 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -13,4 +13,6 @@ Vcs-Browser: https://git.hush.is/hush/hush3 Package: hush Architecture: amd64 arm64 Depends: ${shlibs:Depends} -Description: Hush cryptocoin full node. Speak And Transact Freely. Hush inherits from Bitcoin Protocol and Zcash Protocol and is focused on private communications. +Description: Hush cryptocoin full node. + Speak And Transact Freely with Hush, which inherits from Bitcoin Protocol and + Zcash Protocol and is focused on private communications. From 41e7d602c8a1952b8c530e90fd4fff9632dc9075 Mon Sep 17 00:00:00 2001 From: jahway603 Date: Thu, 9 May 2024 10:12:44 -0400 Subject: [PATCH 22/25] Added changelog to Debian package building script --- contrib/debian/changelog | 17 +++++++++++------ contrib/debian/control | 2 +- util/build-debian-package.sh | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index 942b50ea5..bd257bf83 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -179,12 +179,17 @@ hush (3.8.0) stable; urgency=medium hush (3.7.1) stable; urgency=medium - * More internals code related to unused Sprout transactions removed, making Hush run and compile faster and use less memory. - * Now provides a more useful error message when a user attempts to make a transaction before the node is synced. + * Removed more internals code related to unused Sprout transactions, making + Hush run and compile faster and use less memory. + * Now provides more useful error message when user attempts to make + transaction before the node is synced. * z_sendmany RPC docs now show an example of a z2z transaction - * Deprecated alert p2p message is no longer processed and nodes using it will be banned - * try-before-evict ported from BTC core, which helps protect again Eclipse and Sybil Attacks - * "Feeler connections" ported from BTC, another technique which makes Eclipse and Sybil Attacks harder and more expensive + * Deprecated alert p2p message no longer processed & nodes using it will be + banned + * try-before-evict ported from BTC core to help protect against Eclipse and + Sybil Attacks + * "Feeler connections" ported from BTC, which is another technique to make + Eclipse and Sybil Attacks harder and more expensive * New RPC: z_getbalances returns a list of all zaddrs with non-zero balance. * "Automagic z_sendmany" makes the RPC easier to use and also improves privacy @@ -300,7 +305,7 @@ hush (3.4.0) stable; urgency=medium * Implemented own mirror of Boost in our build system * Merged various fixes relating to CryptoConditions from KMD upstream * Optimizations and bug fixes to Sapling Consolidation - * Fixes CVE-2018–20586 from KMD (which ported it from BTC) + * Fixes CVE-2018-20586 from KMD (which ported it from BTC) * Added z_getnotescount RPC * Updated ccache dependency to 3.7.9 * Ported the -txexpirynotify CLI option from ZEC upstream diff --git a/contrib/debian/control b/contrib/debian/control index ec0ceb293..7d1e6e2a2 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -13,6 +13,6 @@ Vcs-Browser: https://git.hush.is/hush/hush3 Package: hush Architecture: amd64 arm64 Depends: ${shlibs:Depends} -Description: Hush cryptocoin full node. +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. diff --git a/util/build-debian-package.sh b/util/build-debian-package.sh index 6fa0f1f7e..24bd4fe19 100755 --- a/util/build-debian-package.sh +++ b/util/build-debian-package.sh @@ -78,7 +78,7 @@ cp $SRC_PATH/src/dragonx-cli $DEB_BIN cp $SRC_PATH/src/dragonxd $DEB_BIN cp $SRC_PATH/src/hush-arrakis-chain $DEB_BIN -#cp $SRC_DEB/changelog $DEB_DOC/changelog.Debian +cp $SRC_DEB/changelog $DEB_DOC cp $SRC_DEB/copyright $DEB_DOC cp -r $SRC_DEB/examples $DEB_DOC # Copy manpages From 006804d6caed2144b5081cef2c7572eec0607ea7 Mon Sep 17 00:00:00 2001 From: jahway603 Date: Thu, 9 May 2024 10:43:34 -0400 Subject: [PATCH 23/25] Updated urgency tags in contrib/debian/changelog --- contrib/debian/changelog | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/contrib/debian/changelog b/contrib/debian/changelog index bd257bf83..98a9e8946 100644 --- a/contrib/debian/changelog +++ b/contrib/debian/changelog @@ -39,7 +39,7 @@ hush (3.10.1) stable; urgency=medium -- Hush Core Tue, 02 Jan 2024 15:16:40 -0700 -hush (3.10.0) stable; urgency=medium +hush (3.10.0) stable; urgency=high * Hush and all Hush Smart Chains now use less RAM #283 * Hush and all Hush Smart Chains now make it harder and more expensive for @@ -133,7 +133,7 @@ hush (3.9.1) stable; urgency=medium -- Hush Core Tue, 25 Jan 2022 06:39:18 -0700 -hush (3.9.0) stable; urgency=medium +hush (3.9.0) stable; urgency=high * hushd, hush-cli, and hush-tx are now true binaries instead of shell scripts * New official location for full node data is ~/.hush and existing full @@ -202,7 +202,7 @@ hush (3.7.0) stable; urgency=medium -- Hush Core Thu, 01 Apr 2021 02:53:21 -0700 -hush (3.6.3) stable; urgency=medium +hush (3.6.3) stable; urgency=low * Maintenance release, which is mostly the same as 3.6.2 but it fixes some issues in Debian+Arch packages and binaries not able to find asmap.dat @@ -218,7 +218,7 @@ hush (3.6.2) stable; urgency=medium -- Hush Core Sun, 21 Feb 2021 14:21:31 -0700 -hush (3.6.1) stable; urgency=medium +hush (3.6.1) stable; urgency=low * WolfSSL upgraded to 4.6.0 and side-channel resistance enabled via ECC_TIMING_RESISTANT @@ -256,7 +256,7 @@ hush (3.6.0) stable; urgency=medium -- Hush Core Fri, 18 Dec 2020 02:07:35 -0700 -hush (3.5.2) stable; urgency=medium +hush (3.5.2) stable; urgency=low * Re-released hushd under the GNU Public License Version 3 (GPLv3) * The z_listreceivedaddress RPC now returns a memoStr key for the utf8 string @@ -264,7 +264,7 @@ hush (3.5.2) stable; urgency=medium -- Hush Core Thu, 22 Oct 2020 16:16:19 -0700 -hush (3.5.1) stable; urgency=medium +hush (3.5.1) stable; urgency=low * TLS 1.3 support ported from ZEN with custom Hush tweaks * All nodes will try using encrypted TLS connections with peers by default @@ -296,7 +296,7 @@ hush (3.5.0) stable; urgency=medium -- Hush Core Wed, 23 Sep 2020 22:03:17 -0700 -hush (3.4.0) stable; urgency=medium +hush (3.4.0) stable; urgency=high * New Season 4 KMD Notary pubkeys have been updated (as of Block 245555) * ENFORCED PRIVACY (aka z2z) merged & set to take effect at Block 340000 @@ -333,14 +333,14 @@ hush (3.3.2) stable; urgency=medium -- Hush Core Wed, 08 Apr 2020 12:21:44 -0700 -hush (3.3.1) stable; urgency=medium +hush (3.3.1) stable; urgency=low * Maintenance release fixes a non-consensus bug in sendmany which prevented it from working. -- Hush Core Sat, 18 Jan 2020 09:16:21 -0700 -hush (3.3.0) stable; urgency=medium +hush (3.3.0) stable; urgency=high * New "Sietch" functionality protects against new metadata attacks * New ability to launch Hush Smart Chains with a single command @@ -372,7 +372,7 @@ hush (3.3.0) stable; urgency=medium -- Hush Core Fri, 03 Jan 2020 10:13:17 -0700 -hush (3.2.3) stable; urgency=medium +hush (3.2.3) stable; urgency=low * Update build dependencies to use own forks of libgmp, libsnark, libsodium * New RPC keys are now returned in getblockchaininfo : longestchain and @@ -391,7 +391,7 @@ hush (3.2.2) stable; urgency=medium -- Hush Core Tue, 26 Nov 2019 12:17:17 -0700 -hush (3.2.1) stable; urgency=medium +hush (3.2.1) stable; urgency=low * Fixes issues discovered in Hush 3.2.0 * New DEVELOPING.md document for advice working on Hush codebase From 07054fc3468fe7e691466d010464bf5415252e1c Mon Sep 17 00:00:00 2001 From: onryo Date: Thu, 16 May 2024 19:07:29 +0200 Subject: [PATCH 24/25] Prevent communication between HUSH3 nodes and DRAGONX nodes in both directions --- src/hush_utils.h | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/hush_utils.h b/src/hush_utils.h index 7da3fc452..5f2760b5c 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1796,29 +1796,40 @@ void hush_args(char *argv0) fprintf(stderr,".oO Starting %s Full Node (Extreme Privacy!) with genproc=%d notary=%d\n",name.c_str(),HUSH_MININGTHREADS, IS_HUSH_NOTARY); vector HUSH_nodes = {}; + vector DRAGONX_nodes = {}; // Only HUSH3 and DRAGONX connect to these by default, other HACs must opt-in via -connect/-addnode const bool ishush3 = strncmp(name.c_str(), "HUSH3",5) == 0 ? true : false; const bool isdragonx = strncmp(name.c_str(), "DRAGONX",7) == 0 ? true : false; LogPrint("net", "%s: ishush3=%d isdragonx=%d\n", __func__, ishush3, isdragonx); - if (ishush3 || isdragonx) { + if (ishush3) { HUSH_nodes = {"node1.hush.is","node2.hush.is","node3.hush.is", "node4.hush.is","node5.hush.is","node6.hush.is", "node7.hush.is","node8.hush.is","node1.hush.land", - "node2.hush.land", "node3.hush.land", - "node4.hush.land", "node5.hush.land"}; + "node2.hush.land","node3.hush.land","node4.hush.land", + "node5.hush.land","node6.hush.land","node7.hush.land"}; + } + + if (isdragonx) { + DRAGONX_nodes = {"node1.dragonx.is","node2.dragonx.is","node3.dragonx.is", + "node4.dragonx.is","node5.dragonx.is","node6.dragonx.is"}; } vector more_nodes = mapMultiArgs["-addnode"]; if (more_nodes.size() > 0) { fprintf(stderr,"%s: Adding %lu more nodes via custom -addnode arguments\n", __func__, more_nodes.size() ); } - // Add default HUSH nodes after custom addnodes, if applicable + // Add default HUSH and DRAGONX nodes after custom addnodes, if applicable if(HUSH_nodes.size() > 0) { - LogPrint("net", "%s: adding %d hostname-based nodes\n", __func__, HUSH_nodes.size() ); + LogPrint("net", "%s: adding %d HUSH3 hostname-based nodes\n", __func__, HUSH_nodes.size() ); more_nodes.insert( more_nodes.end(), HUSH_nodes.begin(), HUSH_nodes.end() ); } + if(DRAGONX_nodes.size() > 0) { + LogPrint("net", "%s: adding %d DRAGONX hostname-based nodes\n", __func__, DRAGONX_nodes.size() ); + more_nodes.insert( more_nodes.end(), DRAGONX_nodes.begin(), DRAGONX_nodes.end() ); + } + mapMultiArgs["-addnode"] = more_nodes; HUSH_STOPAT = GetArg("-stopat",0); MAX_REORG_LENGTH = GetArg("-maxreorg",MAX_REORG_LENGTH); From 46c738500fd8bf596eb4b7a068384b3c74a7d8b3 Mon Sep 17 00:00:00 2001 From: Duke Date: Sat, 8 Jun 2024 07:16:37 -0700 Subject: [PATCH 25/25] Fix bug when using build-mac.sh and remove cryptoconditions from mac+win build scripts --- build.sh | 8 +++++--- util/build-mac.sh | 7 ------- util/build-win.sh | 7 ------- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/build.sh b/build.sh index d73119a08..e94518e70 100755 --- a/build.sh +++ b/build.sh @@ -9,11 +9,13 @@ set -eu -o pipefail if [[ "$OSTYPE" == "linux-gnu"* ]]; then ./util/build.sh --disable-tests $@ elif [[ "$OSTYPE" == "darwin"* ]]; then - ./util/build-mac.sh --disable-tests $@ + # code from ./util/build.sh needs to be ported to support --disable-tests + #./util/build-mac.sh --disable-tests $@ + ./util/build-mac.sh $@ elif [[ "$OSTYPE" == "msys"* ]]; then ./util/build-win.sh --disable-tests $@ -#elif [[ "$OSTYPE" == "freebsd"* ]]; then - # placeholder +elif [[ "$OSTYPE" == "freebsd"* ]]; then + ./util/build.sh --disable-tests $@ else echo "Unable to detect your OS. What are you using?" fi diff --git a/util/build-mac.sh b/util/build-mac.sh index 745a72238..89a638b89 100755 --- a/util/build-mac.sh +++ b/util/build-mac.sh @@ -46,13 +46,6 @@ PREFIX="$(pwd)/depends/$TRIPLET" make "$@" -C ./depends/ V=1 NO_QT=1 -#BUILD CCLIB -WD=$PWD -cd src/cc -echo $PWD -./makecustom -cd $WD - # Build RandomX cd src/RandomX if [ -d "build" ] diff --git a/util/build-win.sh b/util/build-win.sh index f3498530e..3b87128ac 100755 --- a/util/build-win.sh +++ b/util/build-win.sh @@ -18,13 +18,6 @@ cd .. CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site CXXFLAGS="-DPTW32_STATIC_LIB -DCURL_STATICLIB -fopenmp -pthread" ./configure --prefix="${PREFIX}" --host=x86_64-w64-mingw32 --enable-static --disable-shared -# Build CryptoConditions stuff -WD=$PWD -cd src/cc -echo $PWD -./makecustom -cd $WD - # Build RandomX cd src/RandomX if [ -d "build" ]