Powered by Blogger.

Crypto Miner Set-Up – Tanguy’s cpuminer-multi

Important Notes

♦ Version: 2, 17/10/2015
♦ License: Beerware Version 42++
♦ This tutorial is provided as a service to the community and if you decide to follow these instructions, you do this on your own responsibility.
♦ Never run such applications giving root rights, ie. never sudo them.
 Personal Note: This version of the “cpuminer-multi” opens a remote command network interface on port 4048 by default. I strongly recommend to deactivate this using the command line parameter “-b 0” or “–api-bind 0”. More information are given below.


Mining Altcoins is sometimes quite venturesome. The various download links on the Internet are often pointing to obscure file servers. You can only rely on the “Internet crowd intelligence” (let’s call it like this), hoping you are not the first one trying out something new.
As consequence, please use this guide with educated smartness and, of course, on your own risk!
Finding the right Miner software is more complex than it should be. In this tutorial, I’m going to use Tanguy Pruvot‘s fork of lucasjones‘ “cpuminer-multi” project, itself a fork of pooler‘s original Litecoin CPU miner. Tanguy’s project is one of the most advanced CPU miner tools around and it is actively maintained by smart people that you can actually talk too.
The “cpuminer-multi” supports many hashing algorithms and among these, the cryptonight algorithm as used by CryptoNote/Monero. Please note that it is only a CPU miner and not supporting GPUs.
To avoid trusting binaries found on the web, we compile the miner on our local installation. By this, we also get the most recent – yet possibly unstable – version, and a bit of adventure too.

Hyperspeed Set-up Procedure

…to make a very long story very short:
tasha@NOSHIP ~ $ # Tooling dependencies
tasha@NOSHIP ~ $ sudo apt-get update
tasha@NOSHIP ~ $ sudo apt-get install git
tasha@NOSHIP ~ $ sudo apt-get install automake
tasha@NOSHIP ~ $ # Normally not needed on modern Linux systems
tasha@NOSHIP ~ $ # sudo apt-get install gcc
tasha@NOSHIP ~ $ sudo apt-get install g++
tasha@NOSHIP ~ $ # Compilation dependencies
tasha@NOSHIP ~ $ sudo apt-get install libcurl4-openssl-dev
tasha@NOSHIP ~ $ sudo apt-get install libssl-dev
tasha@NOSHIP ~ $ # Switch to our dedicated user account
tasha@NOSHIP ~ $ su - monero
monero@NOSHIP ~ $ # Download latest source
monero@NOSHIP ~ $ git clone https://github.com/tpruvot/cpuminer-multi.git
monero@NOSHIP ~ $ cd cpuminer-multi.git
monero@NOSHIP ~/cpuminer-multi $
monero@NOSHIP ~/cpuminer-multi $ # Compile
monero@NOSHIP ~/cpuminer-multi $ ./autogen.sh
monero@NOSHIP ~/cpuminer-multi $ ./configure --with-crypto --with-curl
monero@NOSHIP ~/cpuminer-multi $ make
monero@NOSHIP ~/cpuminer-multi $ # Test
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer --cputest
monero@NOSHIP ~/cpuminer-multi $ # Run miner
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999 -u <your_username_or_coinbase> -p x --api-bind 0

Set-up Procedure

Prerequisite: An operational MINT Linux or UBUNTU installation. I have not tested other Linux distributions, so there might be dependency issues when compiling.
Prerequisite 2: An coin address on the desired Blockchain to receive Mining Rewards.
Security: Personally, I prefer to set-up such installations using a dedicated user account. Even better is to run them in a jail (using JailKit, or similar tool).
In this example, the user account is “monero”.

1) Dependencies

tasha@NOSHIP ~ $ # Tooling dependencies
tasha@NOSHIP ~ $ sudo apt-get update
tasha@NOSHIP ~ $ sudo apt-get install git
tasha@NOSHIP ~ $ sudo apt-get install automake
tasha@NOSHIP ~ $ # Normally not needed on modern Linux systems
tasha@NOSHIP ~ $ # sudo apt-get install gcc
tasha@NOSHIP ~ $ # sudo apt-get install g++
tasha@NOSHIP ~ $ # Compilation dependencies
tasha@NOSHIP ~ $ sudo apt-get install libcurl4-openssl-dev
tasha@NOSHIP ~ $ sudo apt-get install libssl-dev

2) Source Code Download

Important: This will download the latest main branch version, which might not be an official and stable release, and not the MASTER branch neither. If you prefer to use a well-defined release version, please select an adequate tag for the clone operation.
tasha@NOSHIP ~ $ # Switch to our dedicated user account
tasha@NOSHIP ~ $ su - monero
monero@NOSHIP ~ $
monero@NOSHIP ~ $ # Go to the directory in which the "cpuminer-multi" directory will be created.
monero@NOSHIP ~ $ # Since I use a dedicated user account, I prefer staying in the home directory.
monero@NOSHIP ~ $ #
monero@NOSHIP ~ $ # At the time of writing, this downloads "cpuminer-multi"
monero@NOSHIP ~ $ # version 1.2-dev WINDOWS branch.
monero@NOSHIP ~ $ git clone https://github.com/tpruvot/cpuminer-multi.git
monero@NOSHIP ~ $ cd cpuminer-multi.git
monero@NOSHIP ~/cpuminer-multi $
Note on branches:
Examining the GitHub project, we see that the WINDOWS, not the MASTER branch is the default branch when cloning. A LINUX branch exists too. At the time of writing, version 1.2-dev, 03/10/2015, there are 2 major differences between the WINDOWS and LINUX branches.
First: “if (!opt_quiet)” (LIN) becomes “if (!opt_quiet && last_bloc_height != stratum.bloc_height)” (WIN)(looks like a bug fix), and Second: “v512[62] = len » 8;” (LIN) becomes “v512[62] = (unsigned char) (len » 8);” (WIN).
Seeing these differences, I recommend to use the default/WINDOWS branch, which runs nice so far in my Linux test environments.
Note that, when comparing later versions, these statements will not be correct anymore.
More git Options:
# Get the default development MASTER branch, which is currently "WINDOWS".
git clone https://github.com/tpruvot/cpuminer-multi.git
# Get the development LINUX branch
git clone https://github.com/tpruvot/cpuminer-multi.git --branch linux
# Get the source of the release tagged as V1.1
git clone https://github.com/tpruvot/cpuminer-multi.git --branch v1.1-multi

3) Compilation

The following 3 commands have to pass without error. If something goes wrong, this has to be fixed before doing anything else.
Example console outputs can be displayed by clicking on the “unfold” links below.
monero@NOSHIP ~/cpuminer-multi $ ./autogen.sh
monero@NOSHIP ~/cpuminer-multi $ ./configure --with-crypto --with-curl
monero@NOSHIP ~/cpuminer-multi $ make

4) Test

After a successful make operation, the “cpuminer” binary should now be located in the current directory. In order to test if everything has been compiled correctly, start a dry-run for all Hashing Algorithms like this:
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer --cputest
** cpuminer-multi 1.2-dev by Tanguy Pruvot (tpruvot@github) **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd
      axiom: 739e969d 20d307a7 6d39ddfe 737727fd 0930a28d dcb2eae5 31fc2884 09a1fe8d
      blake: 0c7b1594 52328517 463db487 df5e39b7 1322afaf 14ed562c e9d18d7d 9051b305
  blakecoin: 1beb6d99 60f93179 0caf8b8d de245415 f19d7efc 1a55952f 5d83aaa1 cf6d8ce0
    blake2s: c4fde76a 8d68422c 5fbafde2 50f49210 9fb29ac6 6753292e 1153aa11 adae1a3a
        bmw: b614159f d808ac8f 9eb6ab74 01b0d94e 3831c498 190278af f0e63ecd d0dceaaa
        c11: 467fe126 a25b3117 8099c195 5d67ae09 3a84fbcd f3533e55 61dbaafc c96c3069
cryptolight: 4c3428f3 9e1f9ecd a3b0726f d4f4fca6 2843597c 480f033a e38d1132 82b273bf
cryptonight: 1ddd6d4c 6b9c41a8 9daa323b 1e140e62 d5ebf40a 5962028c d1b4acd6 8deed830
       drop: 33dc013c 65f6c33d 3b66f982 47b5aaf5 5390cc56 0a1fdaa6 1f0e4958 b6229ace
      fresh: 32925252 1339e557 0ebe3923 97ff19b2 a1643d5e 5475699d e4dc83a8 e7d1a13e
    groestl: 8703946c 1f2630a6 1cc8e78f 93a030b3 835a6b62 4812fb99 0a243cae 6dd8ce36
      heavy: fe264760 6eb16e09 ffad8b30 b333b87c c20b6b92 097bbb93 09b19fd2 28d228d6
     keccak: 3a709301 f7eafe91 7c7a06e2 09b077a9 f3942799 fb24b913 407674a4 c1485893
      luffa: 3f1970bb e30de539 42e9a9c2 927d7495 4fb17d85 85276ebc 91ca076d 07c69013
      lyra2: c6165cb3 a82b8f39 ed9feaa5 fa5be3d7 041b0fd3 0128a42e d0b78ff2 b665f81a
    lyra2v2: a297c8d9 91274c87 27f515d4 b129e18d db1c61b3 1c552c96 3efce710 95baa90c
     myr-gr: b060aa77 6bc2fc23 fd991ada 252aba20 a42a3595 fd335278 664e875c f8e540cf
  neoscrypt: 2c400aba 7b67aae2 eb8afe32 a31303b4 3a5b2ad8 84badd97 c7984e6b 7e3b2c7b
      nist5: f793aee4 ec7c83ad 3fb06661 fc514201 ea8865a2 22eb7cc5 50fb0fcb 7644435d
 pentablake: 7990b632 02388232 27ca6bd1 172b4d65 ad93fb6a 26e64b4a 88fe0b8d 71d82491
      pluck: 68e34a6e 8ea6be98 1e00b036 03287344 3152cc38 c5a2c3d7 0dd367d9 d01fac81
      quark: 633d8255 a00e3a1a e1ee58d7 d3a56387 fb85f106 8a6bb4eb f5a20315 e57f0602
      qubit: f158d208 f1991ea5 7d073586 945f4b10 c02314e7 3f5b6360 b91eb0db ca216fae
   shavite3: fc19c40b 20ba0833 1d013c3d dccf66a0 74f252c9 71e95e74 8985e550 582906a5
    sha256d: e2f61c3f 71d1defd 3fa999df a3695375 5c690689 799962b4 8bebd836 974e8cf9
      skein: 7556f203 d6da59fd 1baa2d05 c27dd117 de9f56ee 8ad0b3a6 1f3649df 2b87694d
     skein2: f743265f 8610a912 c8d5879e e61917a8 75adf37b 56fe4a29 c1ae1e4e ce40fd3c
         s3: 0e715288 561623fa 9720dd08 d13cdf5c 07824dad 99a652fa 13ce0537 6f3ceca1
        x11: 83288461 80965bce 56f61e01 5db62af5 62a611d8 5e5e721d 854c8d97 e47a3ea3
        x13: 8196fc09 df2b0011 13d4ef91 0a8b0919 fbc7bab8 df2a58e1 bfe6be6e eb6546c0
        x14: a4d7341e 693aebc7 53dfedeb 78fd477c 3fd27dde b3e1e28e 693dae16 c074c0e7
        x15: ac5e298e 62e6e569 ac4f4b76 f7ab1109 5576df2d 547e2f5b 4e202d16 fd6bddc2
        zr5: 233d6389 4c0ad29a 43b445dd ece68031 36c38027 0002eeae e94213e7 94811c22

Running the Miner

Important: If you plan to let the Miner run in the background, in a terminal window or as a daemon, you need to keep an eye on the output/log. For more information, please see the section “Error Handling and Autonomous Operation” below.
Running the Miner on its own is not efficient. You will very likely only find Stale Blocks, ie. Blocks that have already been found by other Miners before you did. To increase efficiency and to obtain a relatively predicable Mining Reward input, the best is to use a Mining Pool. (Note: Pools have quite some draw back in terms of resilience and security of the Blockchain network, but this is not topic of this tutorial.)
The Mining Pool URL is configured at the command line. The exact syntax should be described on the pool’s web page. In this example, I use http://xmr.poolto.be. (Note: I’m not related to the owner of this pool, I don’t get ‘a bonus’ if you use this pool, and the server is not located in Belgium).
A classic command line looks like this:
./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999
                            -u <your_wallet_address> -p x --api-bind 0
-a : Mining Algorithm, "cryptonight" in case of Monero.
-u : User, in case of the Monero Pool server, it's the wallet address
     that will receive the Mining Reward.
-p : Password, received from server owner, most of times 'x' for public servers.
-o : Pool server URL, with
      stratum+tcp:       - Protocol
      //xmr.poolto.be    - Server Address
      :2999              - Server Port
--api-bind 0 : disables the remote API interface.
Example log/console output:
monero@NOSHIP ~/cpuminer-multi $ ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999 -u 45mezmBHxtCivwct1xhKXycUcKHDhmkBAP9wRuEVsK1BjX7TxVVBZSYAPXY7mMbRmC8vYqYnr4ggwJDQEGCUJXLHKr56hwJ -p x --api-bind 0
** cpuminer-multi 1.2-dev by Tanguy Pruvot (tpruvot@github) **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd
[2015-09-27 14:16:46] Using JSON-RPC 2.0
[2015-09-27 14:16:46] CPU Supports AES-NI: NO
[2015-09-27 14:16:46] Starting Stratum on stratum+tcp://xmr.poolto.be:2999
[2015-09-27 14:16:46] 4 miner threads started, using 'cryptonight' algorithm.
[2015-09-27 14:16:48] Stratum difficulty set to 500
[2015-09-27 14:16:50] CPU #1: 34.61 H/s
[2015-09-27 14:16:50] CPU #0: 33.65 H/s
[2015-09-27 14:16:50] CPU #2: 30.65 H/s
[2015-09-27 14:16:51] CPU #3: 22.59 H/s
[2015-09-27 14:16:51] CPU #0: 30.98 H/s
[2015-09-27 14:16:51] accepted: 1/1 (100.00%), 118.83 H/s yes!
[2015-09-27 14:16:52] CPU #2: 31.06 H/s
To exit the Miner, hit CTRL+C.
Please verify that the output shows “….H/s yes!”. If “….H/s nooooo!” appears, your result submission has not been accepted and “something” is wrong. Know that “something is wrong” is merely the only information that you get about the problem – happy debugging!

Error Handling and Autonomous Operation

(Note: This section will be updated later)
The following log output ends in only rejected packets. Note the diminishing Difficulty, ending up in a rejection of all submitted work packages. In another case, I had the miner simply be stuck on a calculation for 20 minutes.
The only way that I figured out to solve this problem is to re-start the miner and thus reset the connection to and work log on the pool server. This is something that should however be handled by a cron/script. I’m currently working on this and I’ll update this when it’s ready. In the meantime, you need to keep an eye on the log or write one yourself :).
Important: I tested only version 1.2-dev, emphasis on DEV. The official and as stable classified version might not show the same behavior.
[2015-09-28 08:58:25] accepted: 390/411 (94.89%), 65.05 H/s yes!
[2015-09-28 08:58:34] CPU #2: 16.83 H/s
[2015-09-28 08:58:36] Stratum difficulty set to 5600
[2015-09-28 08:58:40] CPU #3: 14.17 H/s
[2015-09-28 08:58:40] accepted: 391/412 (94.90%), 64.79 H/s yes!
[2015-09-28 08:59:01] Stratum difficulty set to 11200
[2015-09-28 08:59:12] CPU #2: 16.52 H/s
[2015-09-28 09:00:37] CPU #3: 14.93 H/s
[2015-09-28 09:00:40] Stratum difficulty set to 7724.01
[2015-09-28 09:01:13] CPU #2: 15.77 H/s
[2015-09-28 09:02:28] CPU #1: 14.66 H/s
[2015-09-28 09:02:43] Stratum difficulty set to 5149
[2015-09-28 09:02:59] CPU #2: 15.47 H/s
[2015-09-28 09:04:26] CPU #1: 13.94 H/s
[2015-09-28 09:04:46] Stratum difficulty set to 3433
[2015-09-28 09:04:49] CPU #2: 16.97 H/s
[2015-09-28 09:04:57] CPU #1: 16.68 H/s
[2015-09-28 09:06:47] CPU #2: 15.74 H/s
[2015-09-28 09:06:49] Stratum difficulty set to 2289
[2015-09-28 09:06:53] CPU #1: 16.40 H/s
[2015-09-28 09:08:47] CPU #1: 17.41 H/s
[2015-09-28 09:08:52] Stratum difficulty set to 1526
[2015-09-28 09:09:06] CPU #0: 16.60 H/s
[2015-09-28 09:10:40] CPU #2: 16.09 H/s
[2015-09-28 09:10:55] Stratum difficulty set to 1017
[2015-09-28 09:11:29] CPU #0: 17.10 H/s
[2015-09-28 09:11:45] CPU #1: 17.94 H/s
[2015-09-28 09:11:45] accepted: 391/413 (94.67%), 67.31 H/s nooooo
[2015-09-28 09:12:20] CPU #3: 16.43 H/s
[2015-09-28 09:12:21] accepted: 391/414 (94.44%), 67.53 H/s nooooo
[2015-09-28 09:12:30] CPU #0: 16.73 H/s
[2015-09-28 09:13:30] CPU #2: 17.25 H/s
[2015-09-28 09:13:30] accepted: 391/415 (94.22%), 64.45 H/s nooooo
[2015-09-28 09:13:34] CPU #3: 15.39 H/s
[2015-09-28 09:13:34] accepted: 391/416 (93.99%), 64.80 H/s nooooo
[2015-09-28 09:13:40] CPU #3: 16.06 H/s
[2015-09-28 09:13:40] accepted: 391/417 (93.76%), 65.47 H/s nooooo
[2015-09-28 09:13:45] CPU #1: 16.73 H/s
[2015-09-28 09:13:51] CPU #0: 18.39 H/s
[2015-09-28 09:13:52] accepted: 391/418 (93.54%), 68.44 H/s nooooo
[2015-09-28 09:13:56] CPU #2: 17.90 H/s
[2015-09-28 09:13:56] accepted: 391/419 (93.32%), 69.08 H/s nooooo
[2015-09-28 09:13:56] CPU #1: 14.58 H/s

System Behavior

1) Remote API

Tested Version: 1.2-dev; Source code: 1.1
Disclaimer: I looked into the code to see why port 4048 is open when the miner is running. I did not perform a deep review. Information in this section is subjective and is given without guarantees. There is no intention to express criticism against the developers, that are very likely smarter than I am :).
In version 1.0.8, a remote monitoring API has been integrated and version 1.1 adds a basic remote control API for “quit” and “seturl” operations. (Source: Bitcointalk.org)
The remote control commands are disabled by default, while the remote monitoring interface is automatically activated at start-up, listening on port 4048 for incoming network connections.
tasha@NOSHIP ~ $
tasha@NOSHIP ~ $ sudo netstat -lp | grep cpuminer
tcp        0      0 localhost:4048          *:*                     LISTEN      28535/cpuminer 
Looking at the source code (here and here), we see that the allowed API endpoint is initialised to “”, ie. localhost, the local machine, and to port 4043. The “– -api-bind” command also allows to define a list of allowed peer IP addresses.
The network listener can however be disabled by setting the port to 0 via the argument “-b 0” or “– -api-bind 0” (Source code: here and here). Unfortunately, this is not yet documented in the command line help message.
The remote control operations “seturl” and “quit” are DEactivated by default and have to be enabled using the “– -api-remote” command line parameter.
Personal Note: The entire remote monitoring and remote command API is relatively recent and entirely developed in low-level C code. Anyone that knows C (I do), knows that playing with pointers and 0-terminated strings is error-prone and a buffer overflow situation is quickly introduced. There is moreover not many user feedback yet on these functionalities. Seeing the malware problems from the times when Bitcoin mining wasn’t yet an ASIC-only game, I suggest to deactivate this interface for security reasons, if not used. I propose moreover to deactivate this interface by default in future versions and to implement an opt-it instead of an opt-out.

2) Memory

A test run over 11 hours of mining, 4 CPUs, ~180H/s, 255 accepted submission to the pool, much more difficulty updates, showed a very constant and light memory consumption:
Virtual Memory Size (VSZ) | All process memory including          | 611 KB
                          | swapped out and from shared libraries |
Resident Set Size (RSS)   | Physical memory allocated to this     | 411 KB
                          | process and currently in RAM          |

3) Network Bandwidth

A test run over 15 minutes of mining, 4 CPUs, ~180H/s, 20 accepted submission to the pool, 17 difficulty updates, showed a very constant and light network bandwidth consumption:
NetHogs version 0.8.0
  PID USER     PROGRAM          DEV        SENT      RECEIVED      
10923 monero   ./cpuminer       eth0       8.5 KB    17.3 KB

4) Processes

No (non-concealed) detached child-process is created by the miner. The miner has been started as user process and not using a root account. Attached child processes are verified by strace below. Threads are part of the parent process and do not appear.
boss@NOSHIP ~ $ sudo ps auxf
tasha    23238  0.0  0.0  89404  1504 pts/4    S    Sep28   0:00   |   \_ su - monero
monero   23246  0.0  0.0  23112  4740 pts/4    S    Sep28   0:00   |       \_ -su
monero    8269  377  0.2 546224 40136 pts/4    Sl+  12:15  23:26   |           \_ ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999 -u 45mezmBHx...

5) System tracing: network

During a 5 minutes test run, which included the application start-up, only the pool server has been contacted. The strace tool has been used to start-up and monitor the process, including all sub-threads. The miner has been started as user process and not using a root account.
monero@ATREIDES ~/cpuminer-multi $
      strace -f -e trace=network
             -s 1000 -v  -yy
            ./cpuminer -a cryptonight -o stratum+tcp://xmr.poolto.be:2999
                       -u VBZSYAPXY7.....mMbRmC8vYqYnr4ggwJDQEGCUJXLHKr56hwJ
                       -p x --api-bind 0
-f  : Trace child processes as they are created by the currently traced processes as a
      result of a fork. (fork() creates a process, not a thread.)
-e  : Events to traces.
-s  : Output option: string length.
-v  : Print unabbreviated versions of system calls.
-yy : Print 'ip:port' pairs associated with socket file descriptors.
Rest: Process to start.

6) System tracing: other

The following things can be tested by replacing the “strace” argument in the above strace command:
file     | All files open, including system libraries loaded and system files accessed.  
process  | All sub-processes, including system flags and PID  
ipc      | All IPC (Inter Process Communication) related system calls. 
         | (Nothing special observed during test)
More information on the straces command line parameters, see http://man7.org/linux/man-pages/man1/strace.1.html.

Command-Line Options

monero@NOSHIP ~/cpuminer-multi $ ./cpuminer --help
** cpuminer-multi 1.2-dev by Tanguy Pruvot (tpruvot@github) **
BTC donation address: 1FhDPLPpw18X4srecguG3MxJYe4a1JsZnd
Usage: cpuminer-multi [OPTIONS]
  -a, --algo=ALGO       specify the algorithm to use
                          scrypt       scrypt(1024, 1, 1) (default)
                          scrypt:N     scrypt(N, 1, 1)
                          sha256d      SHA-256d
                          axiom        Shabal-256 MemoHash
                          blake        Blake-256 (SFR)
                          blakecoin    Blakecoin
                          blake2s      Blake-2 S
                          bmw          BMW 256
                          c11/flax     C11
                          cryptolight  Cryptonight-light
                          cryptonight  Monero
                          dmd-gr       Diamond-Groestl
                          drop         Dropcoin
                          fresh        Fresh
                          groestl      GroestlCoin
                          heavy        Heavy
                          keccak       Keccak
                          luffa        Luffa
                          lyra2re      Lyra2RE
                          lyra2rev2    Lyra2REv2 (Vertcoin)
                          myr-gr       Myriad-Groestl
                          neoscrypt    NeoScrypt(128, 2, 1)
                          nist5        Nist5
                          pluck        Pluck:128 (Supcoin)
                          pentablake   Pentablake
                          quark        Quark
                          qubit        Qubit
                          shavite3     Shavite3
                          skein        Skein+Sha (Skeincoin)
                          skein2       Double Skein (Woodcoin)
                          s3           S3
                          x11          X11
                          x13          X13
                          x14          X14
                          x15          X15
                          zr5          ZR5
  -o, --url=URL         URL of mining server
  -O, --userpass=U:P    username:password pair for mining server
  -u, --user=USERNAME   username for mining server
  -p, --pass=PASSWORD   password for mining server
      --cert=FILE       certificate for mining server using SSL
  -x, --proxy=[PROTOCOL://]HOST[:PORT]  connect through a proxy
  -t, --threads=N       number of miner threads (default: number of processors)
  -r, --retries=N       number of times to retry if a network call fails
                          (default: retry indefinitely)
  -R, --retry-pause=N   time to pause between retries, in seconds (default: 30)
      --time-limit=N    maximum time [s] to mine before exiting the program.
  -T, --timeout=N       timeout for long poll and stratum (default: 300 seconds)
  -s, --scantime=N      upper bound on time spent scanning current work when
                          long polling is unavailable, in seconds (default: 5)
      --randomize       Randomize scan range start to reduce duplicates
  -f, --diff-factor     Divide req. difficulty by this factor (std is 1.0)
  -m, --diff-multiplier Multiply difficulty by this factor (std is 1.0)
  -n, --nfactor         neoscrypt N-Factor
      --coinbase-addr=ADDR  payout address for solo mining
      --coinbase-sig=TEXT  data to insert in the coinbase when possible
      --no-longpoll     disable long polling support
      --no-getwork      disable getwork support
      --no-gbt          disable getblocktemplate support
      --no-stratum      disable X-Stratum support
      --no-extranonce   disable Stratum extranonce support
      --no-redirect     ignore requests to change the URL of the mining server
  -q, --quiet           disable per-thread hashmeter output
      --no-color        disable colored output
  -D, --debug           enable debug output
  -P, --protocol-dump   verbose dump of protocol-level activities