Quick Start
The native miner is a patched build of the official
quantus-miner
with pool-mode support (--payout-address + --worker-name).
Three things to do: download the binary, get a payout address, run the miner.
1. Download
quantus-miner v4.0.2 (Windows, Linux) · v3.2.0 (macOS) — patched for pool mode
⬇
Windows x86_64
·
Linux x86_64
·
macOS arm64
· SHA256SUMS
After download, make the binary executable (Linux/macOS):
chmod +x quantus-miner-*
xattr -d com.apple.quarantine quantus-miner-darwin-arm64macOS Intel (x86_64) build is coming later. Apple Silicon (M1/M2/M3/M4) only for now.
2. Get a payout address
You need a Quantus address (starts with qz…). Options:
- Phone wallet: quantus.com/wallet (iOS, Android, Web)
- CLI wallet:
quantus-cli
—
quantus wallet create --name myrig
Your rewards will be credited to whatever address you put on the --payout-address flag.
The address is sent over the wire on every connection, so you can use different addresses on different rigs.
3. Run the miner
Minimum config (CPU only, auto-detected workers):
quantus-miner serve \ --node-addr 38.190.136.41:9890 \ --auth-token pool \ --tls-cert-sha256 3bda8193b9f170a3fc3d8c482c9c51cdc50706ae1a3efb1a575cf18f43763e6b \ --payout-address qzYOUR_ADDRESS_HERE \ --worker-name my-rig
What to expect in the log:
⛏ Sent pool-hello (payout=qz…, worker=my-rig) ⛏ Bidirectional stream established ⛏ Received job: id=…, hash=0x… 🎉 GPU worker 0 found solution! … ⛏ Job … completed: N hashes in X.XXs (Y MH/s)
Confirm on the dashboard: your worker appears on the Connected Miners table within ~5s with a non-zero hashrate. Click your address to see the per-worker miner detail page.
NVIDIA CUDA miner (fastest for GeForce / RTX)
A separate, from-scratch CUDA implementation of QPoW for NVIDIA GPUs. On an RTX 5090 it sustains ~1.2–1.3 GH/s against this pool, versus ~330 MH/s for the standard miner above — about 3.5–4× more shares for the same electricity. It speaks the pool's WebSocket protocol directly (no bridge, no auth token), and its hashes are verified bit-exact against the reference implementation (8000 + 4096 known-answer vectors, plus every share is re-checked by the pool). The standard miner remains available above for CPU mining, Intel/Apple GPUs and older NVIDIA cards; AMD RDNA3 owners should use the native AMD miner below.
Requirements
- NVIDIA GPU: GeForce RTX 20/30/40/50 series, or datacenter Turing/Ampere/Hopper/Blackwell (compute capability 7.5–12.x).
- NVIDIA driver 580 or newer (CUDA 13 runtime; no CUDA toolkit install needed, the runtime is built in).
- Windows 10/11 x64, or Linux x86_64 with glibc 2.35+ (Ubuntu 22.04, Debian 12, RHEL 9 or newer).
- Tuned and tested on the RTX 5090 (Blackwell). Other cards are supported but were not benchmarked — the
benchcommand below tells you what yours does.
1. Download
qpow-cuda v1.0.8 (build 2026-09-14) — prints its version with version
⬇
Windows x86_64 (CUDA)
·
Linux x86_64 (CUDA)
· SHA256SUMS
Linux: chmod +x qpow-cuda-linux-x86_64. Windows: the binary is unsigned, so SmartScreen may ask you to confirm the first launch.
2. Run
Payout address as above (qz…). One line, no other flags needed:
qpow-cuda-windows-x86_64.exe pool ws://quantusminer.com:9901 qzYOUR_ADDRESS_HERE my-rig
Linux: ./qpow-cuda-linux-x86_64 pool ws://quantusminer.com:9901 qzYOUR_ADDRESS_HERE my-rig
Full form: pool <ws_url> <payout> [worker] [submit_gap_s] [ngpu]. For several NVIDIA cards in one machine
pass the card count as the last argument (each card connects as worker-gpu0, -gpu1, … and mines a
different nonce range):
qpow-cuda-linux-x86_64 pool ws://quantusminer.com:9901 qzYOUR_ADDRESS_HERE my-rig 0.2 2
What to expect in the log (the rate in parentheses is the last 60 s; the first minutes read low while the pool's difficulty ramps up):
[gpu0] NVIDIA GeForce RTX 5090 (170 SMs) worker=my-rig [gpu0] connected to ws://quantusminer.com:9901 [gpu0] HelloAck received [gpu0] [job 1234] diff=1000 target=0041… [gpu0] [300s] 1207.3 MH/s (60s: 1213.8) | diff=4399554609 submitted=… accepted=… rejected=… staleskip=… throttled=…
Measured hashrates (this binary, build 1.0.7 (2026-09-12))
Offline bench on stock power limits, measured 12 Sep 2026. Pool-mode rates are 1–5% lower;
most cards are power-limited under this load, so cooling and power cap decide the sustained clock. Untested card? MH/s ~= SMs x sustained GHz x k, with k = 2.9 (Blackwell), 2.3 (Ada), 2.2 (Ampere), 1.65 (Turing). Blackwell rows below were re-measured on 1.0.7; other rows are 1.0.5-era and 1.0.6/1.0.7 added no gain on those architectures.
| GPU | MH/s | Clock / power during bench | Notes |
|---|---|---|---|
| RTX 5090 (170 SMs) | 1,394 | 2895 MHz / 575 W | measured on 1.0.7 (5 alternated rounds). Datacenter cooling at the full 575 W cap; fleet boxes capped at 500 W/2520 MHz do ~1,200-1,300. |
| RTX 4090 (128 SMs) | 749 | 2326 MHz / 350 W | 1.0.5 adds +1.9% on Ada (no-fix reduce + unit-MAD tails + limb sums); +8% over 1.0.2 on the same card (1.0.5-era measurement, not re-tested on 1.0.7) |
| L40S (142 SMs) | 723 | 2190 MHz / 350 W | datacenter card; poor value per rental dollar (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 5080 (84 SMs) | 744 | 2700 MHz / 322 W | measured on 1.0.7. Best MH/s per watt of the Blackwell line (2.3). |
| RTX 5070 Ti (70 SMs) | 626 | 2670 MHz / 250 W | measured on 1.0.7. Consistently the top rental value on vast.ai. |
| H100 SXM 80 GB (132 SMs) | 552 | 1980 MHz / 434 W | datacenter card; not power-limited; poor value per rental dollar (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 4080 SUPER (80 SMs) | 479 | 2595 MHz / 320 W | (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 5070 (48 SMs) | 431 | 2820 MHz / 243 W | measured on 1.0.7. |
| RTX 4070 Ti (60 SMs) | 376 | 2710 MHz / 248 W | (1.0.5-era measurement, not re-tested on 1.0.7) |
| A100 SXM4 40 GB (108 SMs) | 332 | 1410 MHz / 285 W | clock-bound datacenter card; poor value (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 4070 SUPER (56 SMs) | 326 | 2380 MHz / 160 W | measured on 1.0.7 (Ada is unchanged from 1.0.6 — the sparse path is sm_120+ only). |
| RTX 4070 (46 SMs) | 291 | 2750 MHz / 198 W | (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 3090 (82 SMs) | 282 | 1344 MHz / 218 W | host power cap 220 W; 1.0.5 adds +2.1% on Ampere; +9% over 1.0.2 on the same card (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 5060 Ti (36 SMs) | 313 | 2707 MHz / 151 W | measured on 1.0.7. Not power-limited at 160 W. |
| RTX 3080 (68 SMs) | 244 | 1570 MHz / 200 W | host power cap 200 W of 370 (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 5060 (30 SMs) | 265 | 2760 MHz / 125 W | measured on 1.0.7. Lowest purchase price per MH/s. |
| CMP 170HX (70 SMs) | 242 | 1455 MHz / 205 W | GA100 mining card; firmware clock ceiling (~1460 MHz), not power-limited; 512-thread blocks +1.2%; test-only value at rental prices (~980 MH/s per $/h) (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 2080 Ti (68 SMs) | 184 | 1426 MHz / 155 W | host power cap 170 W; 1.0.5 adds +2.0% on Turing; +11% over 1.0.2 on the same card (1.0.5-era measurement, not re-tested on 1.0.7) |
| RTX 3060 (28 SMs) | 124 | 1920 MHz / 161 W | (1.0.5-era measurement, not re-tested on 1.0.7) |
Benchmark and self-test
qpow-cuda-windows-x86_64.exe bench 10 # ~10 s offline throughput test, prints MH/s per GPU qpow-cuda-windows-x86_64.exe mine <32-byte-hex-header> 100000000 # find one solution at a fixed difficulty
The miner auto-reconnects with backoff if the pool or your network drops, skips solutions whose job rolled over while they were on the GPU, and re-checks nothing on the CPU — the pool does that for every share. Keep the GPU cool: these cards are power-limited under this load, so a well-cooled card runs 10–15% faster than a hot one.
AMD GPU miner (ROCm / HIP — Linux, RDNA3)
A native AMD implementation of QPoW. On a Radeon RX 7900 XTX it sustains ~175 MH/s against this pool, versus ~96 MH/s for the standard miner on the same card — the standard miner has no AMD kernel and falls back to a generic Vulkan path. Hashes are verified bit-exact against the reference implementation (8000 known-answer vectors), and every candidate nonce is re-hashed through that verified path before it is submitted.
Worth knowing before buying hardware for it: QPoW is dominated by 64-bit integer multiplies, which RDNA3 emulates. At ~175 MH/s an RX 7900 XTX is still beaten by a far cheaper RTX 5060 at ~265 MH/s. This exists so AMD owners can mine competitively on hardware they already have.
Requirements
- Linux x86_64 with glibc 2.38+ (Ubuntu 24.04, Debian 13, Fedora 39 or newer) — the AMD builds still carry this limit; the next rebuild drops it to 2.35 like the CUDA build. No Windows or macOS build.
- AMD RDNA3, gfx1100 only: RX 7900 XTX / XT / GRE. Other AMD GPUs are not supported by this build.
- ROCm runtime installed. The binary is ~1 MB and links against it — it is not self-contained.
/dev/kfdmust exist (ls -l /dev/kfd), and your user must be in therenderandvideogroups. In Docker pass--device=/dev/kfd --device=/dev/dri --group-add video --group-add render.
1. Pick the build that matches your ROCm
Check your version first — ls -d /opt/rocm* or apt list --installed | grep rocm.
The two builds are not interchangeable.
| Your ROCm | Download | RX 7900 XTX |
|---|---|---|
5.x (Ubuntu apt install hipcc) |
⬇ qpow-hip-linux-x86_64-rocm5 | 175 MH/s |
6.x (AMD amdgpu-install --usecase=rocm) |
⬇ qpow-hip-linux-x86_64-rocm6 | 130 MH/s |
The ROCm 5 build is ~34 % faster. That is a property of the ROCm runtime, not the kernel — identical source compiled against 6.4 simply runs slower. · Full documentation · SHA256SUMS
If it will not start and prints
libamdhip64.so.5: cannot open shared object file, you have ROCm 6 — download the
-rocm6 build instead (and vice versa for .so.6). This happens in the dynamic
loader before the miner runs, so it cannot warn you itself.
2. Run
chmod +x qpow-hip-linux-x86_64-rocm5, then the same payout address as above:
./qpow-hip-linux-x86_64-rocm5 pool ws://quantusminer.com:9901 qzYOUR_ADDRESS_HERE my-rig
Check your setup first with ./qpow-hip-linux-x86_64-rocm5 version — it prints the ROCm
version the build targets, the runtime it found and your GPU, and warns if they do not match.
qpow-hip 0.1.0 | built for ROCm 5.7 | runtime ROCm 5.x | device: AMD Radeon RX 7900 XTX (gfx1100) [job 3018] diff=1000 target=0041… [300s] 175.6 MH/s | diff=595790077 submitted=… accepted=… rejected=…
GPU Selection
Multi-GPU systems are common (e.g., a laptop with an iGPU + dGPU, a workstation with multiple cards). The miner uses
wgpu, which enumerates every GPU it can see across every supported backend (Vulkan, DirectX 12, Metal),
so your "RTX 5090" may appear three or four times in the list. Picking the right one matters.
Step 1: List the GPUs
quantus-miner gpu-list
Output looks like this on Windows (RTX 5090 + iGPU + Microsoft fallback):
idx | name | backend | vendor | device | type 0 | AMD Radeon(TM) 890M Graphics | Vulkan | 0x00001002 | 0x0000150e | IntegratedGpu 1 | NVIDIA GeForce RTX 5090 | Vulkan | 0x000010de | 0x00002b85 | DiscreteGpu 2 | NVIDIA GeForce RTX 5090 | Vulkan | 0x000010de | 0x00002b85 | DiscreteGpu 3 | NVIDIA GeForce RTX 5090 Laptop GPU | Vulkan | 0x000010de | 0x00002c58 | DiscreteGpu 4 | NVIDIA GeForce RTX 5090 Laptop GPU | Vulkan | 0x000010de | 0x00002c58 | DiscreteGpu 5 | AMD Radeon(TM) 890M Graphics | Dx12 | 0x00001002 | 0x0000150e | IntegratedGpu 6 | NVIDIA GeForce RTX 5090 | Dx12 | 0x000010de | 0x00002b85 | DiscreteGpu 7 | NVIDIA GeForce RTX 5090 Laptop GPU | Dx12 | 0x000010de | 0x00002c58 | DiscreteGpu 8 | Microsoft Basic Render Driver | Dx12 | 0x00001414 | 0x0000008c | Cpu
Same physical GPU often appears two or three times under different backends. Vulkan tends to perform best on NVIDIA & AMD discrete cards on Windows and Linux; DirectX 12 is the fallback. macOS only has Metal (via Vulkan→Metal translation).
Step 2: Choose how many GPUs to use
As of miner v4, integrated GPUs are skipped automatically whenever a discrete card is present,
so you no longer have to hand-pick an index to avoid the iGPU — --gpu-devices 1 lands
on your first discrete card.
| Flag | Behavior |
|---|---|
| --gpu-devices N | Use N discrete GPUs, in enumeration order. Omit the flag to use every discrete GPU found. |
| --allow-integrated | Also consider integrated GPUs (APUs). Off by default — an iGPU is usually far slower and can destabilise the driver while a dGPU is working. |
--gpu-device-ids flag (explicit comma-separated
indices) no longer exists. Use --gpu-devices N instead. If you need to pin a specific
card on a multi-dGPU box, restrict what the miner can see with the vendor's own mechanism
(e.g. CUDA_VISIBLE_DEVICES, or Windows' per-app GPU preference).
Step 3: Examples
Single discrete GPU (RTX 5090 on Vulkan, ignore the iGPU):
quantus-miner serve \ --node-addr 38.190.136.41:9890 \ --auth-token pool \ --tls-cert-sha256 3bda8193b9f170a3fc3d8c482c9c51cdc50706ae1a3efb1a575cf18f43763e6b \ --payout-address qz… \ --worker-name rtx5090-rig \ --cpu-workers 0 \ --gpu-devices 1
Two GPUs in parallel (desktop 5090 + laptop 5090, both on Vulkan):
quantus-miner serve \ --node-addr 38.190.136.41:9890 \ --auth-token pool \ --tls-cert-sha256 3bda8193b9f170a3fc3d8c482c9c51cdc50706ae1a3efb1a575cf18f43763e6b \ --payout-address qz… \ --worker-name dual-5090 \ --cpu-workers 0 \ --gpu-devices 2
CPU + GPU mixed (4 CPU threads + one dGPU):
quantus-miner serve \ --node-addr 38.190.136.41:9890 \ --auth-token pool \ --tls-cert-sha256 3bda8193b9f170a3fc3d8c482c9c51cdc50706ae1a3efb1a575cf18f43763e6b \ --payout-address qz… \ --worker-name mixed-rig \ --cpu-workers 4 \ --gpu-devices 1
All CLI flags
| Flag | Default | What it does |
|---|---|---|
| --node-addr | 127.0.0.1:9833 | QUIC endpoint to connect to. For pool: 38.190.136.41:9890. Must be IP:port, hostnames not supported. |
| --payout-address | — | Required for pool mining. Your qz… address. Sent in the pool-hello frame. |
| --worker-name | hostname | Friendly name shown on the dashboard. Useful when you have multiple rigs. |
| --cpu-workers | auto | CPU mining threads. Set 0 for GPU-only. |
| --gpu-devices | all discrete | Use N discrete GPUs. Integrated cards are skipped unless --allow-integrated. |
| --allow-integrated | off | Also use integrated GPUs (APUs). Usually slower than the dGPU it competes with. |
| --auth-token | — | Required. Any value works against this pool; use pool. (Against a real node it must match the node's miner-auth-token.) |
| --tls-cert-sha256 | — | Required. Pins the endpoint's TLS certificate. The pool bridge's fingerprint is shown in the commands above. |
| --gpu-batch-size | 1000000 | Nonces per GPU dispatch. Larger = higher throughput, longer cancellation latency. Default is fine. |
| --cpu-batch-size | 10000 | Hashes per CPU cancellation check. Default is fine. |
| --metrics-port | 9900 | Prometheus metrics on http://0.0.0.0:N/metrics. Change if running multiple miners on one host. |
| -v / --verbose | off | Debug-level logging. Useful for troubleshooting; loud otherwise. |
Also: quantus-miner gpu-list (enumerate GPUs) and quantus-miner benchmark (10s engine speed test, no pool needed).
Running as a service
For a long-lived rig you'll want auto-restart on crash and on reboot. On Linux with systemd:
sudo tee /etc/systemd/system/quantus-miner.service <<'EOF'
[Unit]
Description=Quantus Native Miner (pool)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=mining
WorkingDirectory=/home/mining
ExecStart=/home/mining/quantus-miner-linux-x86_64 serve \
--node-addr 38.190.136.41:9890 \
--auth-token pool \
--tls-cert-sha256 3bda8193b9f170a3fc3d8c482c9c51cdc50706ae1a3efb1a575cf18f43763e6b \
--payout-address qzYOUR_ADDRESS \
--worker-name my-rig \
--cpu-workers 0 \
--gpu-devices 1
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now quantus-miner
sudo journalctl -u quantus-miner -f
On Windows, easiest is NSSM to wrap the .exe as a service.
Troubleshooting
Connection refused / can't connect to 38.190.136.41:9890
- QUIC is UDP. Some corporate / café firewalls block outbound UDP. Try a different network.
- Verify port 9890 is reachable: on Linux,
nc -zvu 38.190.136.41 9890. - Don't use a hostname —
--node-addrneeds an IP:port literal.
"payout address rejected"
- Re-type the address. SS58 validation catches Cyrillic homographs (а/о vs a/o), embedded spaces, wrong-length addresses.
- Verify with the official wallet: it shows the canonical form.
Hashrate drops, then climbs again
- That's vardiff. Pool starts you at low difficulty (lots of shares, low value) and ramps you up to match your real hashrate. Stabilizes in 1-2 minutes.
- On the dashboard, your worker's
Diffcolumn will climb steadily until it matches your throughput.
Browser GPU on Mac doesn't work, native does
- Known issue. The WebGPU client on Safari/Chrome on Mac has a separate ~3% invalid-hash rate at high difficulty that the native miner doesn't have. Use the native binary on Mac for reliable hashrate.
Multiple miners on one host
- Set a different
--metrics-porton each (default 9900 collides). - Use distinct
--worker-names so they show separately on the dashboard.