18 KiB
WORK IN PROGRESS - ETA: December 25th, 2022
Gupax is a (Windows|macOS|Linux) GUI for mining Monero on P2Pool, using XMRig.
To see a 3-minute video on how to download and run Gupax: click here.
Contents
- What is Monero/P2Pool/XMRig/Gupax?
- How-To
- Simple
- Advanced
- Connections
- Community Monero Nodes
- Build
- FAQ
What is Monero/P2Pool/XMRig/Gupax?
Monero is a secure, private, and untraceable cryptocurrency.
The Monero GUI software lets you run a Monero node (among other things). A Monero node connects you to other peers and lets you download Monero's blockchain.
P2Pool is software that lets you create/join decentralized peer-to-peer Monero mining pools.
P2Pool as a concept was first developed for Bitcoin but was never fully realized due to many limitations. These limitations were fixed when 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.0003 XMR minimum payout
XMRig is an optimized miner which mines Monero at higher speeds.
Both Monero and P2Pool have built in miners but XMRig is quite faster than both of them. Due to issues like anti-virus flagging, it is not feasible to integrate XMRig directly into Monero or P2Pool, however, XMRig is still freely available for anyone to download with the caveat being: you have to set it up yourself.
Gupax is a GUI that helps with configuring, updating, and managing P2Pool & XMRig (both originally CLI-only).
Recap:
- XMRig mines to P2Pool which fetchs blocks from a Monero node
- Monero GUI runs the Monero node
- Gupax runs P2Pool/XMRig
By default, though, Gupax will use a Community Monero Node so you don't even have to run your own full Monero node to start mining on P2Pool:
How-To
- Download the bundled version of Gupax for your OS here or from gupax.io
- Extract somewhere (Desktop, Documents, etc)
- Launch Gupax
- Input your Monero address in the
[P2Pool]
tab - Select a
Community Monero Node
that you trust - Start P2Pool
- Start XMRig
You are now mining to your own instance of P2Pool, welcome to the world of decentralized peer-to-peer mining!
Notes:
- What is bundled? What is standalone?
- If you'd like to get deeper into the settings, see Advanced.
Simple
Gupax
P2Pool
XMRig
Advanced
Verifying
It is recommended to verify the hash and PGP signature of the download before using Gupax.
Download the SHA256SUM
file, download and import my PGP key
, and verify:
sha256sum -c SHA256SUM
gpg --import hinto-janaiyo.asc
gpg --verify SHA256SUM
Q: How can I be sure the P2Pool/XMRig bundled with Gupax hasn't been tampered with?
A: Verify the hash.
You can always compare the hash of the P2Pool/XMRig
bundled with Gupax with the official hashes found here:
Make sure the version you are comparing against is correct. If they match, you can be sure they are the exact same. Verifying the PGP signature is also recommended:
- P2Pool -
SChernykh.asc
- XMRig -
xmrig.asc
Command Line
Gupax comes with some command line options:
USAGE: ./gupax [--flag]
--help Print this help message
--version Print version and build info
--state Print Gupax state
--nodes Print the manual node list
--no-startup Disable all auto-startup settings for this instance
--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-all Reset the state, the manual node list, and the manual pool list
--ferris Print an extremely cute crab
By default, Gupax has auto-update
& auto-ping
enabled. This can only be turned off in the GUI which causes a chicken-and-egg problem. To get around this, start Gupax with --no-startup
. This will disable all auto
features for that instance.
Resolution
The default resolution of Gupax is 1280x960
which is a 4:3
aspect ratio.
This can be changed by dragging the corner of the window itself or by using the resolution sliders in the Gupax Advanced
tab. After a resolution change, Gupax will fade-in/out of black and will take a second to resize all the UI elements to scale correctly to the new resolution.
If you have changed your OS's pixel scaling, you may need to resize Gupax to see all UI correctly.
The minimum window size is: 640x480
The maximum window size is: 2560x1920
Fullscreen mode can also be entered by pressing F11
.
Tor/Arti
By default, Gupax updates via Tor. In particular, it uses Arti
, the official Rust implementation of Tor.
Instead of bootstrapping onto the Tor network every time, 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 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 un-recoverable 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/settingsnode.toml
The manual node database used for P2Pool advancedpool.toml
The manual pool database used for XMRig advanced
Logs
Gupax has console logs that show with increasing detail, what exactly it is is doing.
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 like so:
RUST_LOG=(trace|debug|info|warn|error) ./gupax
For example:
RUST_LOG=debug ./gupax
In general:
ERROR
means something has gone wrong and that something will likely breakWARN
means something has gone wrong, but things will likely be fineINFO
logs are general info about what Gupax (the GUI thread) is currently doingDEBUG
logs are much more verbose and include what EVERY thread is doing (not just the main GUI thread)TRACE
logs are insanely verbose and shows the logs of the libraries Gupax uses (HTTP connections, GUI polling, etc)
Swapping P2Pool/XMRig
If you downloaded Gupax standalone and want to use your own P2Pool/XMRig
binaries and/or want to swap them, 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
Be warned: Gupax will use your custom PATH/binary and will replace them if you use Check for updates
in the [Gupax]
tab.
Gupax
P2Pool
XMRig
Connections
For transparency, here's all the connections Gupax makes:
Domain | Why | When | Where |
---|---|---|---|
https://github.com | Fetching metadata information on packages + download | [Gupax] tab -> Check for updates |
update.rs |
Community Monero Nodes | Connecting to with P2Pool, measuring ping latency | [P2Pool Simple] tab |
node.rs |
DNS | DNS connections will usually be handled by your OS (or whatever custom DNS setup you have). If using Tor, DNS requests for updates should be routed through the Tor network automatically | All of the above | All of the above |
Community Monero Nodes
Name | IP/Domain | RPC Port | ZMQ Port |
---|---|---|---|
C3pool | node.c3pool.com | 18081 | 18083 |
Cake | xmr-node.cakewallet.com | 18081 | 18083 |
CakeEu | xmr-node-eu.cakewallet.com | 18081 | 18083 |
CakeUk | xmr-node-uk.cakewallet.com | 18081 | 18083 |
CakeUs | xmr-node-usa-east.cakewallet.com | 18081 | 18083 |
Feather1 | selsta1.featherwallet.net | 18081 | 18083 |
Feather2 | selsta2.featherwallet.net | 18081 | 18083 |
MajesticBankIs | node.majesticbank.is | 18089 | 18083 |
MajesticBankSu | node.majesticbank.su | 18089 | 18083 |
Monerujo | nodex.monerujo.io | 18081 | 18083 |
Plowsof1 | node.monerodevs.org | 18089 | 18084 |
Plowsof2 | node2.monerodevs.org | 18089 | 18084 |
Rino | node.community.rino.io | 18081 | 18083 |
Seth | node.sethforprivacy.com | 18089 | 18083 |
SupportXmr | node.supportxmr.com | 18081 | 18083 |
SupportXmrIr | node.supportxmr.ir | 18089 | 18083 |
XmrVsBeast | p2pmd.xmrvsbeast.com | 18081 | 18083 |
Build
General Info
You need cargo
, Rust's build tool and package manager.
The --release
profile in Gupax is set to prefer code performance & small binary sizes over compilation speed (see Cargo.toml
). Gupax itself (with all dependencies already built) takes around 1m30s to build (vs 10s on a normal --release
) with a Ryzen 5950x.
Linux
You'll need the development versions of libraries like OpenSSL
, SQLite
, and maybe some other ones already installed on your system. Read the compiler errors to see which ones are missing from your system and search around to see which packages you'll need to install depending on your distro.
After that, run:
cargo build --release
macOS
You'll need Xcode
.
On macOS, if you want the binary to have an icon, you must install cargo-bundle
and compile with:
cargo bundle --release
This bundles Gupax into a Gupax.app
, the way it comes in the pre-built tars for macOS.
Windows
You'll need Visual Studio
.
There is a build.rs
file in the repo solely for Windows-specific things:
- It sets the icon in
File Explorer
- It statically links
VCRUNTIME140.dll
into Gupax (the binary will not be portable without this)
After installing the development tools, run:
cargo build --release
This will build Gupax with the MSVC toolchain (x86_64-pc-windows-msvc
). This is the recommended method and is how the pre-compiled release binaries are built.
FAQ
Where are updates downloaded from?
The latest versions are downloaded using the GitHub API.
- Gupax
https://github.com/hinto-janaiyo/gupax
- P2Pool
https://github.com/SChernykh/p2pool
- XMRig
https://github.com/xmrig/xmrig
GitHub's API blocks request that do not have an HTTP User-Agent
header. For privacy, Gupax randomly uses a recent version of a Wget/Curl
user-agent.
Can I quit mid-update?
If you started an update, you should let it finish. If the update has been stuck for a long time, it may be worth quitting Gupax. The worst that can happen is that your Gupax/P2Pool/XMRig
binaries may be moved/deleted. Those can be easily redownloaded. Your actual Gupax
user data (settings, custom nodes, pools, etc) is never touched.
Although Gupax uses a temporary folder (gupax_update_[A-Za-z0-9]
) to store temporary downloaded files, there aren't measures in place to revert an upgrade once the file swapping has actually started. If you quit Gupax anytime before the Upgrading packages
phase (after metadata, download, extraction), you will technically be safe but this is not recommended as it is risky, especially since these updates can be very fast.
Bundled vs Standalone
Bundled
Gupax comes the latest version of P2Pool/XMRig already in the zip/tar
.
Standlone
only contains the Gupax executable.
How much memory does Gupax use?
Gupax itself uses around 100-300 megabytes of memory.
Gupax also holds up to 500,000 bytes of log data from P2Pool/XMRig
to display in the GUI terminals. These logs are reset once over capacity which takes around 1-2 hours.
Memory usage should never be above 400~ megabytes. If you see Gupax using more than this, please send a bug report.