No description
  • Rust 53.2%
  • Cuda 17.2%
  • Metal 12.6%
  • C 10.6%
  • Shell 2.2%
  • Other 4.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
maxnflaxl ec756f086a
windows: bundled NVRTC first, and a 1 GiB VRAM reserve by default
- 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
2026-10-04 20:38:29 +02:00
.hooks chore: workspace skeleton 2026-08-26 11:35:42 +02:00
api multi-GPU, /summary, thermal pause, watchdog and the rest of what we claim 2026-10-04 16:01:06 +02:00
benchmarks bench: fix lolMiner flags and GMiner rate parsing in compare_power.sh 2026-08-27 01:57:18 +02:00
cli version: v<major>.<minor>.<commit count> [hash], MXBM's scheme 2026-10-04 18:50:47 +02:00
config repository links point at git.maxnflaxl.dev 2026-10-04 16:01:06 +02:00
cuckatoo repository links point at git.maxnflaxl.dev 2026-10-04 16:01:06 +02:00
docs windows: bundled NVRTC first, and a 1 GiB VRAM reserve by default 2026-10-04 20:38:29 +02:00
gpu windows: bundled NVRTC first, and a 1 GiB VRAM reserve by default 2026-10-04 20:38:29 +02:00
kernels the 2026-09-18 research pass, and its kill tests 2026-10-04 16:00:33 +02:00
miner report: a draw the driver does not report is a dash, not 0.0 2026-10-04 17:27:39 +02:00
mobile feat(gpu): Metal backend from the reference miner's kernels 2026-08-26 16:01:34 +02:00
packaging windows: bundled NVRTC first, and a 1 GiB VRAM reserve by default 2026-10-04 20:38:29 +02:00
pow repository links point at git.maxnflaxl.dev 2026-10-04 16:01:06 +02:00
src windows: bundled NVRTC first, and a 1 GiB VRAM reserve by default 2026-10-04 20:38:29 +02:00
stratum repository links point at git.maxnflaxl.dev 2026-10-04 16:01:06 +02:00
tests comments slimmed, and the tests that could not fail removed 2026-10-04 16:01:06 +02:00
ui multi-GPU, /summary, thermal pause, watchdog and the rest of what we claim 2026-10-04 16:01:06 +02:00
.gitignore docs: performance.md as a user doc, chart at the head of the progress log 2026-08-27 12:20:02 +02:00
Cargo.lock metal: the backend builds on macOS and the solver choice opens it 2026-10-04 17:55:58 +02:00
Cargo.toml repository links point at git.maxnflaxl.dev 2026-10-04 16:01:06 +02:00
CLAUDE.md docs: the bounty text as it now reads, and the figures caught up to 4835c17 2026-09-08 15:41:51 +02:00
LICENSE chore: workspace skeleton 2026-08-26 11:35:42 +02:00
NOTICE windows: bundled NVRTC first, and a 1 GiB VRAM reserve by default 2026-10-04 20:38:29 +02:00
README.md docs: Metal runs, and the M3 Max row 2026-10-04 18:05:29 +02:00
rustfmt.toml chore: workspace skeleton 2026-08-26 11:35:42 +02:00

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 /summary API: --apiport N serves 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.

License

Apache License 2.0; see LICENSE and NOTICE.