A Zcash (Equihash 200,9) CPU miner with a live terminal dashboard, an optimized tromp solver, and a simple TOML config for any stratum pool.
Preconfigured for MySoloPool Zcash —
zec.mysolopool.com:3330.
┌ zec-cpu-miner ───────────────────────────────────────────────┐
│ MySoloPool ZEC zec.mysolopool.com:3330 * connected │
│ worker t1YourAddress.cpu1 job 77 │
│ threads 4 difficulty 0.0015 │
└───────────────────────────────────────────────────────────────┘
┌ throughput ──────────────────┐┌ shares ────────────────────────┐
│ 13.76 Sol/s now ││ submitted 52 │
│ 13.31 Sol/s session average ││ accepted 52 │
│ 6.90 solve/s 455 solutions ││ rejected 0 │
│ ▂▃▅▆▇▆▅▆▇▆▅▄▅▆▇▆▅▆▇▆▅▄▃▄▅▆▇ ││ uptime 1:12 │
└──────────────────────────────┘└────────────────────────────────┘
Zcash network hashrate is measured in gigasolutions per second. A fast desktop CPU does tens of solutions per second — roughly nine orders of magnitude short. This will not mine ZEC for profit. No solver optimization changes that.
What this is good for:
- Proving a Zcash stratum pool accepts real Equihash shares end to end
- Testing a solo pool you run (
-p d=0.001for easy shares in seconds) - Learning and benchmarking Equihash solver changes (
solvebench)
For profitable Zcash mining, use Equihash ASICs. For Bitcoin, Bitcoin Cash, Litecoin, and Dogecoin solo mining, see MySoloPool below — those coins need the right ASICs, not this CPU binary.
MySoloPool is a multi-coin solo mining platform: no registration, wallet address as username, finder gets the block reward (minus the pool fee). Live dashboards per coin:
| Coin | Dashboard | Stratum (typical) |
|---|---|---|
| Bitcoin (BTC) | mysolopool.com | btc.mysolopool.com:3334 |
| Bitcoin Cash (BCH) | bitcoincash.mysolopool.com | see Getting Started on that site |
| Litecoin + Dogecoin (merged Scrypt) | doge.mysolopool.com | scrypt.mysolopool.com:3341 |
| Zcash (ZEC) | zcash.mysolopool.com | zec.mysolopool.com:3330 |
This miner speaks Equihash 200,9 only, so it connects to the Zcash pool. Point ASICs at the other coins using each dashboard’s Getting Started page.
Zcash connection (this miner’s default):
| Setting | Value |
|---|---|
| Pool | zec.mysolopool.com |
| Port | 3330 (variable difficulty) · 3331 (NiceHash / fixed high diff) |
| Worker | t1YourZcashAddress.workername |
| Password | x |
| Dashboard | https://zcash.mysolopool.com/ |
- Open the latest Release.
- Download
zec-cpu-miner-windows-x64.zip. - Extract it somewhere permanent (for example
C:\Hashrate\zec-cpu-miner\). - Edit
miner.toml(see below), then double-clickzec-cpu-miner.exeor run it from a terminal.
First launch also creates miner.toml next to the .exe if the file is missing.
The config file is miner.toml, next to zec-cpu-miner.exe.
- Open the folder that contains
zec-cpu-miner.exe. - Open
miner.tomlin Notepad, VS Code, or any text editor.- If you only have
miner.toml.example, copy it tominer.tomlfirst.
- If you only have
- Replace
t1YourZcashAddressHerewith your own transparent Zcash address (t1...). Optionally keep a worker name after a dot, for example:t1YourAddress.cpu1. - Save the file.
- Run
zec-cpu-miner.exe(orzec-cpu-miner.exe --plainfor text-only logs).
default_pool = "mysolopool"
threads = 0 # 0 = auto (about 1/4 of your CPUs, max 4)
verify = true
[pools.mysolopool]
label = "MySoloPool ZEC"
host = "zec.mysolopool.com"
port = 3330
worker = "t1YourRealAddress.cpu1" # <-- change this
password = "x"| Field / flag | Meaning |
|---|---|
default_pool |
Which [pools.*] block to use when you start with no flags |
worker |
Your ZEC t1 address, optionally .rigname |
password |
Usually x. For testing: d=0.001 asks for easy shares |
threads |
Mining threads. 0 = automatic. Each thread uses ~180 MB RAM |
--pool NAME |
Use another preset, or pass host:port directly |
--list |
Show all pools defined in miner.toml |
--plain |
Log to the console instead of the dashboard |
Important: solo mining pays the finder. Leave the placeholder address and any block you find would not go to you — the miner refuses to start until you set a real address.
zec-cpu-miner --pool local
zec-cpu-miner --pool eu.otherpool.com:3357 -u t1YourAddress.rig1
zec-cpu-miner --listYou need a Rust toolchain and a C compiler (MSVC Build Tools on Windows, gcc or clang elsewhere).
git clone https://github.com/Hashrate-Farm/zec-cpu-miner.git
cd zec-cpu-miner
cargo build --releaseBinaries: target/release/zec-cpu-miner and target/release/solvebench.
# Dashboard (default)
./zec-cpu-miner
# Text logs (services / pipes)
./zec-cpu-miner --plain
# Local pool with easy shares
./zec-cpu-miner --pool local --worker t1YourAddress.test --threads 4Press q to quit the dashboard.
Fewer than you might expect. Default is about a quarter of your CPUs, capped at 4:
- Each thread holds a ~180 MB solver arena (locked into RAM when large pages work).
- Throughput often saturates before you run out of cores (memory bandwidth bound).
Raise with --threads for benchmarks; keep it small if a pool runs on the same PC.
Every solution is checked with the equihash crate’s reference verifier before
submit. That path is independent of the optimized solver, so a bug cannot hide
behind a matching checker. Verification costs ~20 µs vs ~250 ms per solve —
leave it on.
./solvebench --iters 20 --threads 4Reports per-phase timings, throughput, and verification counts. Build tunables
(TROMP_HASHMANY, TROMP_LARGEPAGES, …) are documented in comments in
build.rs. On a typical desktop, batched AVX2 hashing plus large pages measured
about 1.5× over the stock tromp path.
Worth a large gain at high thread counts. On Windows, grant Lock pages in
memory (SeLockMemoryPrivilege) to your account (secpol.msc → Local
Policies → User Rights Assignment), then log off and back on. If the OS
refuses large pages, the miner falls back to 4 KB pages and prints a warning.
Developed and tested on Windows 11 x86-64 (AVX2). Scalar / non-AVX2 paths and a POSIX large-page path exist; Linux/macOS builds are expected but not yet verified in this repository.
MIT — see LICENSE. The Equihash solver in csrc/ is derived from
John Tromp’s solver as distributed in librustzcash (MIT OR Apache-2.0); see
NOTICE.