Gupax is a GUI for mining [**Monero**](https://github.com/monero-project/monero) on [**P2Pool**](https://github.com/SChernykh/p2pool), using [**XMRig**](https://github.com/xmrig/xmrig). To see a 3-minute video guide on how to set-up Gupax: [click here.](#Guide) [![CI](https://github.com/hinto-janai/gupax/actions/workflows/ci.yml/badge.svg)](https://github.com/hinto-janai/gupax/actions/workflows/ci.yml) [![gupax.io](https://github.com/hinto-janai/gupax/actions/workflows/download.yml/badge.svg)](https://github.com/hinto-janai/gupax/actions/workflows/download.yml)
## Contents * [What is Monero/P2Pool/XMRig/Gupax?](#what-is-monerop2poolxmriggupax) * [Guide](#Guide) * [Simple](#Simple) - [Status](#Status) - [Gupax](#Gupax) - [P2Pool](#P2Pool) - [XMRig](#XMRig) * [Advanced](#Advanced) - [Verifying](#Verifying) - [Running a Local Monero node](#running-a-local-monero-node) - [Command Line](#Command-Line) - [Key Shortcuts](#Key-Shortcuts) - [Tor](#Tor) - [Logs](#Logs) - [Disk](#Disk) - [Swapping P2Pool/XMRig](#Swapping-P2PoolXMRig) - [Status](#Status-1) - [Gupax](#Gupax-1) - [P2Pool](#P2Pool-1) - [XMRig](#XMRig-1) * [Connections](#Connections) * [Remote Monero nodes](#remote-monero-nodes) * [Build](#Build) - [General Info](#General-Info) - [Linux](#Linux) - [Building for a distribution](#building-for-a-distribution) - [macOS](#macOS) - [Windows](#Windows) * [License](#License) * [FAQ](#FAQ) - [System requirements](#system-requirements) - [Gupax does not start](#gupax-does-not-start) - [Where are updates downloaded from?](#where-are-updates-downloaded-from) - [P2Pool connection errors](#p2pool-connection-errors) - [Can I quit mid-update?](#can-i-quit-mid-update) - [Bundled vs Standalone](#bundled-vs-standalone) - [How much memory does Gupax use?](#how-much-memory-does-gupax-use) - [How is sudo handled? (on macOS/Linux)](#how-is-sudo-handled-on-macoslinux) - [Why does Gupax need to be Admin? (on Windows)](#why-does-gupax-need-to-be-admin-on-windows) ## What is Monero/P2Pool/XMRig/Gupax? [**`Monero`**](https://getmonero.org) is a secure, private, and untraceable cryptocurrency. [Monero GUI](https://github.com/monero-project/monero-gui) allows you to run a Monero node, among other things. --- [**`P2Pool`**](https://github.com/SChernykh/p2pool) allows you to create/join decentralized peer-to-peer Monero mining pools. P2Pool as a concept was [first developed for Bitcoin](https://en.bitcoin.it/wiki/P2Pool) although [failed to stay relevant for various reasons](https://github.com/p2pool/p2pool). In late 2021, [`SChernykh`](https://github.com/SChernykh) rewrote P2Pool from scratch for Monero. P2Pool combines the best of solo mining and traditional pool mining: * **It's decentralized:** There's no central server that can be shutdown or pool admin that controls your hashrate * **It's permissionless:** It's peer-to-peer so there's no one to decide who can and cannot mine on the pool * **It's trustless:** Funds are never in custody, all pool blocks pay out to miners directly and immediately * **0% transaction fee, 0 payout fee, immediate ~0.00027 XMR minimum payout** --- [**`XMRig`**](https://github.com/xmrig/xmrig) is an optimized miner that can mine Monero. Both Monero and P2Pool have built in miners but XMRig is faster than both of them. Due to issues like [anti-virus flagging](https://github.com/monero-project/monero-gui/pull/3829#issuecomment-1018191461), it is not feasible to integrate XMRig directly into Monero. --- [**`Gupax`**](https://github.com/hinto-janai/gupax) is a GUI that helps manage P2Pool & XMRig which are both CLI-only. **`XMRig`** mines to **`P2Pool`** **`P2Pool`** fetches blocks from a **`Monero node`** **`Monero GUI`** runs the **`Monero node`** **`Gupax`** runs **`P2Pool/XMRig`**
--- By default, Gupax will use a [Remote Monero node](#remote-monero-nodes) so you don't have to run [your own Monero node](#running-a-local-monero-node) to start mining on P2Pool.
## Guide https://user-images.githubusercontent.com/101352116/207978455-6ffdc0cc-204c-4594-9a2f-e10c505745bc.mp4
1. [Download the bundled version of Gupax](https://github.com/hinto-janai/gupax/releases) 2. Extract 3. Launch Gupax 4. Input your Monero address in the `P2Pool` tab 5. Select a [`Remote Monero node`](#remote-monero-nodes) (or run your own local [Monero node](#running-a-local-monero-node)) 6. Start P2Pool 7. Start XMRig You are now mining to your own instance of P2Pool, welcome to the world of decentralized peer-to-peer mining!
## Simple The `Gupax/P2Pool/XMRig` tabs have two versions, `Simple` & `Advanced`. `Simple` is for a minimal & working out-of-the-box configuration. --- ### Status This tab has 3 submenus. **Processes:** This submenu shows: - General PC stats - General P2Pool stats - General XMRig stats
**P2Pool:** This submenu shows: - ***Permanent*** stats on all your payouts received via P2Pool & Gupax - Payout sorting options - Share/block time calculator
**Benchmarks:** This submenu shows: - Your hashrate vs others with the same CPU - List of similar CPUs and their stats - Data source: [here](https://xmrig.com/benchmark)
--- ### Gupax This tab has the updater and general Gupax settings. If `Check for updates` is pressed, Gupax will update your `Gupax/P2Pool/XMRig` (if needed) using the [GitHub API](#where-are-updates-downloaded-from). Below that, there are some general Gupax settings: | Setting | What it does | |--------------------|--------------| | `Update via Tor` | Causes updates to be fetched via the Tor network. Tor is embedded within Gupax; a Tor system proxy is not required | `Auto-Update` | Gupax will automatically check for updates at startup | `Auto-P2Pool` | Gupax will automatically start P2Pool at startup | `Auto-XMRig` | Gupax will automatically start XMRig at startup | `Ask before quit` | Gupax will ask before quitting (and notify if there are any updates/processes still alive) | `Save before quit` | Gupax will automatically saved any un-saved setting on quit --- ### P2Pool P2Pool Simple allows you to ping & connect to a [Remote Monero node](#remote-monero-nodes) and start your own local P2Pool instance on the `Mini` sidechain. To start P2Pool, first input the Monero address you'd like to receive payouts from. You must use a primary Monero address to mine on P2Pool (starts with a 4). It is highly recommended to create a new wallet since addresses are public on P2Pool! **Warning: [There are negative privacy/security implications when using a Monero node not in your control.](https://www.getmonero.org/resources/moneropedia/remote-node.html)** Select a remote node that you trust, or better yet, run your own node. If you'd like to manually specify a node to connect to, see [Advanced.](#advanced) --- ### XMRig XMRig Simple has a log output box, a thread slider, and `Pause-on-active` setting. If XMRig is started with `Pause-on-active` with a value greater than 0, XMRig will automatically pause for that many seconds if it detects any user activity (mouse movements, keyboard clicks). [This setting is only available on Windows/macOS.](https://xmrig.com/docs/miner/config/misc#pause-on-active) **Windows:** Gupax will automatically launch XMRig with administrator privileges to activate [mining optimizations.](https://xmrig.com/docs/miner/randomx-optimization-guide) XMRig also needs a [signed WinRing0 driver (© 2007-2009 OpenLibSys.org)](https://xmrig.com/docs/miner/randomx-optimization-guide/msr#manual-configuration) to access MSR registers. This is the file next to XMRig called `WinRing0x64.sys`. This comes in the bundled version of Gupax. If missing/deleted, a copy is packaged with all [Windows XMRig releases.](https://github.com/xmrig/xmrig/releases/) A direct standalone version is also provided, [here.](https://github.com/xmrig/xmrig/blob/master/bin/WinRing0/WinRing0x64.sys) **macOS/Linux:** Gupax will prompt for your `sudo` password to start XMRig with and do all the things above. XMRig Simple will always mine to your own local P2Pool (`127.0.0.1:3333`), if you'd like to manually specify a pool to mine to, see [Advanced](#advanced). ## Advanced ### Verifying It is recommended to verify the hash and PGP signature of the download before using Gupax. Download the [`SHA256SUMS`](https://github.com/hinto-janai/gupax/releases/latest) file, download and import this [`PGP key`](https://github.com/hinto-janai/gupax/blob/main/pgp/hinto-janai.asc), and verify: ```bash sha256sum -c SHA256SUMS gpg --import hinto-janai.asc gpg --verify SHA256SUMS ``` You can compare the hash of the `P2Pool/XMRig` binaries bundled with Gupax with the hashes of the binaries found here: - https://github.com/SChernykh/p2pool/releases - https://github.com/xmrig/xmrig/releases Make sure the _version_ you are comparing against is correct, and make sure you are comparing the _binary_ to the _binary_, not the `tar/zip`. If they match, they are the exact same. Verifying the PGP signature is also recommended: - P2Pool - [`SChernykh.asc`](https://github.com/monero-project/gitian.sigs/blob/master/gitian-pubkeys/SChernykh.asc) - XMRig - [`xmrig.asc`](https://github.com/xmrig/xmrig/blob/master/doc/gpg_keys/xmrig.asc) --- ### Running a Local Monero node Running and using your own local Monero node improves privacy and security. It also means you won't be depending on one of the [Remote Monero nodes](#remote-monero-nodes) provided by Gupax. This comes at the cost of downloading and syncing Monero's blockchain yourself. To run and use your own local Monero node for P2Pool, follow these steps:
1. In the Monero GUI, go to `Settings` 2. Go to the `Node` tab 3. Enable `Local node` 4. Enter `--zmq-pub=tcp://127.0.0.1:18083` into `Daemon startup flags` 5. [(Optionally)](https://github.com/SChernykh/p2pool#windows) enter `--disable-dns-checkpoints --enable-dns-blocklist` into `Daemon startup flags` 6. Start and fully sync node
The 4th step enables `ZMQ`, which is extra Monero node functionality that is needed for P2Pool to work correctly. The 5th step: - `--disable-dns-checkpoints` avoids periodical lag when DNS is updated (it's not needed when mining) - `--enable-dns-blocklist` bans known bad nodes --- ### Command Line By default, Gupax has `auto-update` & `auto-ping` enabled. This can only be turned off in the GUI. To get around this, start Gupax with `--no-startup`. This will disable all `auto` features for that instance. ``` USAGE: ./gupax [--flag] --help Print this help message --version Print version and build info --state Print Gupax state --nodes Print the manual node list --payouts Print the P2Pool payout log, payout count, and total XMR mined --no-startup Disable all auto-startup settings for this instance (auto-update, auto-ping, etc) --reset-state Reset all Gupax state (your settings) --reset-nodes Reset the manual node list in the [P2Pool] tab --reset-pools Reset the manual pool list in the [XMRig] tab --reset-payouts Reset the permanent P2Pool stats that appear in the [Status] tab --reset-all Reset the state, manual node list, manual pool list, and P2Pool stats ``` --- ### Key Shortcuts ``` *---------------------------------------* | Key shortcuts | |---------------------------------------| | F11 | Fullscreen | | Escape | Quit screen | | Up | Start/Restart | | Down | Stop | | Z | Left Tab | | X | Right Tab | | C | Left Submenu | | V | Right Submenu | | S | Save | | R | Reset | *---------------------------------------* ``` --- ### Tor By default, Gupax updates via Tor. In particular, it uses [`Arti`](https://gitlab.torproject.org/tpo/core/arti), the official Rust implementation of Tor. Arti saves state/cache about the Tor network (circuits, guards, etc) for later reuse onto the disk: State: | OS | Data Folder | |----------|---------------------------------------------------------------| | Windows | `C:\Users\USER\AppData\Local\torproject\Arti\data` | | macOS | `/Users/USER/Library/Application Support/org.torproject.Arti` | | Linux | `/home/USER/.local/share/arti` | Cache: | OS | Data Folder | |----------|---------------------------------------------------------------| | Windows | `C:\Users\USER\AppData\Local\torproject\Arti\cache` | | macOS | `/Users/USER/Library/Caches/org.torproject.Arti` | | Linux | `/home/USER/.cache/arti` | --- ### Disk Long-term state is saved onto the disk in the "OS data folder", using the [TOML](https://github.com/toml-lang/toml) format. If not found, default files will be created. Given a slightly corrupted `state.toml` file, Gupax will attempt to merge it with a new default one. This will most likely happen if the internal data structure of `state.toml` is changed in the future (e.g: removing an outdated setting). The node/pool database cannot be merged. If Gupax can't read/write to disk at all, or if there are any other big issues, it will show an unrecoverable error screen. | OS | Data Folder | Example | |----------|------------------------------------------|-------------------------------------------------| | Windows | `{FOLDERID_RoamingAppData}` | `C:\Users\USER\AppData\Roaming\Gupax` | | macOS | `$HOME`/Library/Application Support | `/Users/USER/Library/Application Support/Gupax` | | Linux | `$XDG_DATA_HOME` or `$HOME`/.local/share | `/home/USER/.local/share/gupax` | The current files saved to disk: * `state.toml` Gupax state/settings * `node.toml` The manual node database used for P2Pool advanced * `pool.toml` The manual pool database used for XMRig advanced * `p2pool/` The Gupax-P2Pool API files --- ### Logs There are multiple log filter levels but by default, `INFO` and above are enabled. To view more detailed console debug information, start Gupax with the environment variable `RUST_LOG` set to a log level: ```bash RUST_LOG=(trace|debug|info|warn|error) ./gupax ``` For example: ```bash RUST_LOG=debug ./gupax ``` - `ERROR`: has gone wrong and that something will probably break - `WARN`: something has gone wrong, but things will be fine - `INFO`: general info about what Gupax (the GUI thread) is currently doing - `DEBUG`: much more verbose and include what EVERY thread is doing (not just the main GUI thread) - `TRACE`: insanely verbose and shows very low-level logs --- ### Swapping P2Pool/XMRig If you want to use your own `P2Pool/XMRig` binaries you can: - Edit the PATH in `Gupax Advanced` to point at the new binaries - Change the binary itself By default, Gupax will look for `P2Pool/XMRig` in folders next to itself: Windows: ``` Gupax\ ├─ Gupax.exe ├─ P2Pool\ │ ├─ p2pool.exe ├─ XMRig\ ├─ xmrig.exe ``` macOS (Gupax is packaged as an `.app` on macOS): ``` Gupax.app/Contents/MacOS/ ├─ gupax ├─ p2pool/ │ ├─ p2pool ├─ xmrig/ ├─ xmrig ``` Linux: ``` gupax/ ├─ gupax ├─ p2pool/ │ ├─ p2pool ├─ xmrig/ ├─ xmrig ``` --- ### Status The `[P2Pool]` submenu in this tab reads/writes to a file-based API in a folder called `p2pool` located in the [Gupax OS data directory:](#Disk) | File | Purpose | Specific Data Type | |----------|---------------------------------------------------------|--------------------| | `log` | Formatted payout lines extracted from P2Pool | Basically a `String` that needs to be parsed correctly | `payout` | The total amount of payouts received via P2Pool & Gupax | `u64` | `xmr` | The total amount of XMR mined via P2Pool & Gupax | Atomic Units represented with a `u64` The `log` file contains formatted payout lines extracted from your P2Pool: ```