# Mining stratum for Hush and Hush Smart Chains ## Table of Contents * [Differences between this and Z-NOMP](#differences-between-this-and-z-nomp) * [Using Docker (easy)](#using-docker-easy) * [Bare metal installation](#bare-metal-installation) * [Continued Installation on either setup](#continued-installation-on-either-setup) * [More Config Information](#more-config-information) * [More Resources](#more-resources) * [License](#license) ## Differences between this and Z-NOMP * This is meant for Hush and Hush smartchain mining * ZEC/ZEN specific stuff is removed ## Using Docker (easy) This method sets up 2 docker containers, one with hnomp and one with redis. It will directly use your host system's network so you can connect to the coin daemon without opening up RPC beyond 127.0.0.1. The ports it listens on must not be in use, this includes 8080 for the website, 6379 for redis and any ports you open for stratums (default is 3333). It is currently untested, but config.json has the ports as line items, so perhaps they can be changed in that file. ### Requirements [Install Docker](https://docs.docker.com/engine/install/) and [docker-compose](https://docs.docker.com/compose/install/) ### Docker Install ``` git clone https://git.hush.is/hush/hnomp.git cd ./hnomp cp config_example.json config.json ``` * **Next follow this [new config document](CONFIGURE.md) and then come back to this one & start to get Docker up and running.** Then run the following command in the hnomp directory. ``` docker-compose up & ``` ### Docker stop ``` docker-compose down ``` ### To rebuild and update Docker version ``` docker-compose down docker rmi knomp_knomp git pull docker-compose up & ``` ## Bare metal installation ### Requirements * node v10+ * libsodium * boost * Redis (see https://redis.io/topics/quickstart for details) ### Upgrade **Please be sure to backup your `./coins` and `./pool_configs` directory before upgrading** Kill your running pool (CTRL-C) ```shell cd hnomp git pull npm install npm start ``` ## Continued Installation on either setup **Note: This setup from here-on applies to both Docker and bare-metal installations.** ### Install Daemon ```shell # The following packages are needed to build both Hush and this stratum: sudo apt-get update sudo apt-get install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python python-zmq zlib1g-dev wget libcurl4-openssl-dev bsdmainutils automake curl libboost-dev libboost-system-dev libsodium-dev jq redis-server nano -y ``` Now, let's build the Hush daemon. In order to not duplicate documentation, please follow the instructions in the [hush3 repository here](https://git.hush.is/hush/hush3/src/branch/master/INSTALL.md) before proceeding. Now, start up the Hush deamon which should start downloading its blockchain. This might take a couple of hours to a day to sync, depending on system speed/network connection. _If you are setting up a single chain to mine and/or don't know what pubkey is, skip this step and use the startup params for the hushd daemon as provided by the individual coin's team._ ```shell cd ~/hush3/src ./smartchains ``` ### Install Pool Once all the blockchains you want on your pool have synced up we can configure the stratum. We need node and npm installed to start and recommend you install them via your Linux OS's package manager. ```shell cd ~ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - ``` Now, let's build our stratum and run it. This will install the pool and configure it for all the smartchains on your system automatically. It must be run from the same user as the coin deamons were launched, as it pulls the rpcuser/pass from the conf file in the home directory. ```shell git clone https://git.hush.is/hush/hnomp.git cd ./hnomp npm install cp config_example.json config.json (and configure it) nano gencfg.sh ``` Edit line 7 to your own HUSH based address... We need to generate the coins files (coin daemon must be running!): `gencfg.sh ` You can run just gencfg.sh with no coin name to use the smartchains.json in hush3/src directory for all coins. Make sure you edit the template with the correct values you want before running the config generator. Finally we are ready to start the pool software ```shell npm start ``` If all went well the program should start without error and you should be able to browse to your pool website on your server via port 8080. ## More Config Information ### Disable Coinbase Mode This mode uses -pubkey to tell the daemon where the coinbase should be sent, and uses the daemons coinbase transaction rather then having the pool create the coinbase transaction. This enables special coinbase transactions, such as ac_founders and ac_script or new modes with CC vouts in the coinbase not yet created, it will work with all coins, except Full Z support described below. To enable it, change the value in the `./coins/*.json` to `"disablecb" : true` The pool fee is taken in the payment processor using this mode, and might not be 100% accurate down to the single satoshi, so the pool address may end up with some small amount of coins over time. ### Payment Processing Please note that the default configs generated are for solo mining. If you wish to create a public pool please modify the configs like in this [example config](https://github.com/z-classic/z-nomp/blob/master/pool_configs/komodo_example.json) There is now a config option you can add to your pool_configs/coin.json to toggle making an attempt at a payment upon pool startup. ``` "paymentProcessing": { "payOnStart": true, ... } ``` ### Invalid Worker Addresses You can add an option to your pool_config to have any miners that mine with an invalid address (if they somehow get through) to pay out to an address of your choosing ``` "invalidAddress":"zsValidAddressOfYourChoosingThatsNotThePoolZAddress" ``` ### Full Z Transaction Support (Sprout) This is an option to force miners to use a Z address as their username for payouts In your coins file add: ``` "privateChain": true, "burnFees": true ``` ### Sapling and Sapling Payment Support In coins/hush.json file: ``` "privateChain": true, "burnFees": true, "sapling": true ``` In pool_config: ``` "zAddress": "zsPoolsSaplingAddress", "walletInterval": 2, "validateWorkerUsername": true, "paymentProcessing": { "minConf": 5, "paymentInterval": 180, "maxBlocksPerPayment": 20, ``` ## More Resources 1. [This resource has further info on configs](https://github.com/zone117x/node-open-mining-portal) and was a great help. 1. [This repository has sample configs](https://github.com/z-classic/z-nomp/tree/master/pool_configs) is an old Z-NOMP with pool configurations, so these were helpful to see other options. 1. Reference [the hush.json here](coins/hush.json) to configure your coin file, but [refer to this repo](https://github.com/zone117x/node-stratum-pool#module-usage) to help learn more about coin files in general. ## License Released under the GNU General Public License v2 http://www.gnu.org/licenses/gpl-2.0.html _Forked from [z-classic/z-nomp](https://github.com/z-classic/z-nomp) which is incorrectly licensed under MIT License - see [zone117x/node-open-mining-portal](https://github.com/zone117x/node-open-mining-portal)_