- Rust 53.2%
- Cuda 17.2%
- Metal 12.6%
- C 10.6%
- Shell 2.2%
- Other 4.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- NVRTC opens from mxgm.exe's folder first, 12.x before 13.x - a missing NVRTC says where the DLLs belong - without --keepfree or --slean-parts, Windows keeps 1024 MiB free (K=4 on 16 GB) - --keepfree 0 restores K=2; an explicit --slean-parts that leaves less warns - docs: Windows build, NVRTC source and hashes, VRAM sizing under WDDM - NOTICE: the NVIDIA components in the Windows archive |
||
| .hooks | ||
| api | ||
| benchmarks | ||
| cli | ||
| config | ||
| cuckatoo | ||
| docs | ||
| gpu | ||
| kernels | ||
| miner | ||
| mobile | ||
| packaging | ||
| pow | ||
| src | ||
| stratum | ||
| tests | ||
| ui | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| LICENSE | ||
| NOTICE | ||
| README.md | ||
| rustfmt.toml | ||
MXGM
An open-source GPU miner for Grin (Cuckatoo32).
A from-scratch Rust implementation of Grin's proof of work, built around how little energy a graph can cost. It mines against a real pool over TLS: live jobs in, CPU-verified solutions out, shares accepted.
Status: working, optimization ongoing. On an RTX 4070 Ti SUPER the CUDA backend does 1.641 g/s at stock and 146 J a graph (1.316 g/s) at its operating point.
Quick start
# Build
cargo build --release
# Mine (replace with your own Grin address)
./target/release/mxgm --algo C32 \
--pool grin.2miners.com:3030 \
--user <your-grin-address>.<worker-name>
A Rust toolchain is the whole build dependency; platform notes are in docs/building.md, and the full command line, config files and API in docs/usage.md.
Lock the clocks. On the reference card the most efficient setting is the
memory clock at its lower step with the core locked:
sudo mxgm ... --mclk 5001 --cclk 2300 --fan 30. sudo mxgm --tune measures
your card's curve instead. Needs root; restored on exit.
How it compares
Every miner on the same card and driver, watts as the GPU reports them (the full table; the other miners at stock on 2026-08-26 from the energy counter, GMiner's best from the 2026-09-06 matched-clock sweep and its 5 Hz power sampler):
| g/s | W | J a graph | |
|---|---|---|---|
MXGM, --mclk 5001 --cclk 2300 --fan 30 |
1.316 | 192.7 | 146 |
| MXGM, stock | 1.641 | 281.6 | 172 |
GMiner 3.44, its best here (--mclk 5001 --cclk 2400) |
1.090 | 174.8 | 160 |
| GMiner 3.44, stock | 1.29 | 276.2 | 214 |
| lolMiner 1.98a, stock | 0.93 | 219.7 | 236 |
| Cuckatoo Reference Miner 0.3.3 | 0.547 | 217.4 | 397 |
MXGM is the fastest miner measured here at every setting and the most efficient at stock. At GMiner's own best setting GMiner draws less, but MXGM's operating point is 146 J a graph against its 160. The best published GMiner figure for this card, 155 J (hashrate.no), is a third-party number. benchmarks.md has every build, the power curves and the comparisons at matched clocks.
Features
- Cuckatoo32 on CUDA, slean trimming with every solution verified on the CPU before it is submitted. Metal on Apple Silicon; an OpenCL backend and a CPU reference solver are the fallbacks.
- Fits the card it finds. Slean splits the graph into K parts; K=2 needs a 16 GB card, and MXGM steps to K=4 or more on its own when that does not fit, so an 8 GB card runs without configuration.
- Real-pool stratum client: TLS first with a plain fallback, reconnect with backoff, failover across several pools. Verified live against 2Miners.
- Multi-GPU. One solver, worker thread and nonce lane per card, so no two cards ever build the same graph.
- Runs unattended: a watchdog that exits with a code a supervisor can
restart on when a card stops completing graphs, thermal pause and resume
(
--tstop,--tstart), and overclock control (--pl,--cclk,--mclk,--coff,--moff,--fan) clamped to the driver's bands and restored on exit. - Familiar UX: a lolMiner-shaped console and command line, the Cuckatoo Reference Miner's flags as aliases, and both configuration-file formats.
- Dashboard and
/summaryAPI:--apiport Nserves a live browser dashboard (graph rate, shares, power with an optional energy-cost axis, clocks, temperature) and a JSON endpoint, with no CDN, so it works on an isolated rig. - Self-contained: pure-Rust TLS, so no system OpenSSL; the CUDA kernels are compiled at run time by the driver's NVRTC.
Developer fee
MXGM takes a 1.0% developer fee: one 36-second round per 60 minutes of mining, about 14.4 minutes a day. It is the rate the closed-source Cuckatoo miners charge, so an open miner costs you no more, and it is what funds development.
It is announced at startup and at each round, reported on its own row of the
statistics table and in /summary, and kept in a separate ledger, so it never
touches your own share counts, best share or pool-credited rate. Fee rounds log
in under your own worker name plus the rate (rig1_1). --dev-fee PCT raises
it; it cannot be lowered.
Full terms are in docs/devfee.md.
Donations
The fee funds MXGM by default. To give more, raise it with --dev-fee PCT, or
point a rig at the developer's address, an ordinary 2Miners address that any
miner can mine to:
./target/release/mxgm --algo C32 \
--pool grin.2miners.com:3030 \
--user grin142932xhcy0vfdlzz5mcp309plfjhwtf8x727tshwx6e5lzdm06dsc6ew5m.<worker-name>
Documentation
| Doc | Covers |
|---|---|
| building.md | Building, platform notes, the tests |
| usage.md | The command line, config files, console, multi-GPU |
| overclocking.md | Clocks, fans, power limits, and the settings that pay on Cuckatoo32 |
| api.md | The dashboard and the /summary JSON |
| devfee.md | The fee in full |
| HW_REQUIREMENTS.md | VRAM thresholds and what each card class gets |
| cuckatoo.md | The proof of work and the three ways to trim the graph |
| benchmarks.md | Measured results: every build, the comparators, power curves |
| benchmarking.md | How to measure a card, and the protocol that settles a cross-miner comparison |
| performance.md | The permanent record: every figure, with its measurement |
| performance-research.md | Every optimization tried, working or not, with its mechanism |
Running MXGM on a card that is not yet in
benchmarks.md? mxgm --report benchmarks it,
measures its power curve and prints a paste-ready block: one command, no
checkout, nothing uploaded. Paste it into
an issue.
Comparing miners is harder than it looks: a reported g/s is only worth the solutions that verify, and the watts depend on where they are read. benchmarking.md has the method.
Contributing
Issues and pull requests are welcome. See docs/contributing.md for the build and test workflow and the code style.