Decentralized pool for Monero mining.
Pool status and monitoring pages can be found at https://p2pool.io/, https://p2pool.io/mini/ and https://p2pool.observer/, https://mini.p2pool.observer/
These are 3rd-party pages. If they are down, it doesn't mean there is a problem with P2Pool itself - it keeps mining always thanks to its decentralized nature.
<img alt="Coverity Scan Build Status"
src="https://scan.coverity.com/projects/23659/badge.svg"/>
Here's the comparison table of the different ways of mining. While pool mining is the easiest to setup, it centralizes Monero network and pool admin gets full power over your hashrate and your unpaid funds. Solo mining is 100% independent and the best for the network. P2Pool mining has all the advantages of solo mining, but also makes regular payouts possible.
Pool type | Payouts | Fee | Min. payout | Centralized? | Stability | Control | Setup |
---|---|---|---|---|---|---|---|
Centralized pool | Regular | 0-3% | 0.001-0.01 XMR | Yes | Less stable due to pool server outages | Pool admin controls your mined funds, what you mine and can execute network attacks | Only miner software is required |
Solo | Rare | 0% | 0.6 XMR or more | No | As stable as your Monero node | 100% under your control | Monero node + optional miner |
P2Pool | Regular | 0% | ~0.00027 XMR | No | Very stable: node failover and multiple Monero nodes are supported | 100% under your control | Monero node(s) + P2Pool node(s) + optional miner(s) |
First you need to find a pool share. This share will stay in PPLNS window for up to 2160 pool blocks (6 hours, auto adjustable to balance payout sizes and frequency). The moment P2Pool finds a Monero block and you have at least 1 pool share in PPLNS window, you'll get a payout! Monero block reward is split between all miner wallets in PPLNS window. Each miner gets a part of block reward proportional to the total difficulty of his/her shares in PPLNS window.
NOTE If P2Pool doesn't have enough hashrate to find Monero blocks faster than every 6 hours on average (~15 MH/s), not all your pool shares will result in a payout. Even if pool hashrate is higher, bad luck can sometimes result in a share going through PPLNS window without a payout. But in the long run it will be compensated by other shares receiving multiple payouts - your payouts will average out to what you'd get with regular pool mining.
In order to continue mining on P2Pool, you must update both Monero and P2Pool software to the latest available versions as soon as they are released.
Monero protocol version | Required Monero software version | Required P2Pool version |
---|---|---|
v15, v16 (active after August 13th, 2022) | v0.18.0.0 or newer, v0.18.3.3 is recommended | v4.0 or newer |
monerod
on your PC and wait until it's fully synced. Advanced Monero node setup instructions are here.4
) for mining. Subaddresses and integrated addresses are not supported, just like with monerod solo mining.--mini
parameter to your P2Pool command to connect to the p2pool-mini sidechain. Note that it will also change the default p2p port from 37889 to 37888.127.0.0.1
to appropriate IP addresses for your setup. Wallet software compatible with P2Pool payouts
Merge mining will be available in P2Pool after the fork on October 12th, 2024. Version 4.0 or newer is required to use it.
Blockchains that will support Merge mining RPC API
p2pool.exe --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine IP:port YOUR_WALLET_ADDRESS_ON_ANOTHER_BLOCKCHAIN
Tari uses their own gRPC API and requires a different command line:
p2pool.exe --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine tari://IP:port TARI_WALLET_ADDRESS
Merge mining is available for testing in Tari's v1.0.0-pre.14 release (Esmeralda testnet).
sudo sysctl vm.nr_hugepages=3072
monerod
with the following command/options:
./monerod --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --disable-dns-checkpoints --enable-dns-blocklist
Note:
The --zmq-pub
option is required for P2Pool to work properly.
--out-peers 32 --in-peers 64
is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's upload bandwidth is less than 10 Mbit, use --out-peers 8 --in-peers 16
instead.
--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080
is needed to have guaranteed good working nodes in your connected peers.
--disable-dns-checkpoints
is needed to avoid periodical lags when DNS is updated (it's not needed when mining)
--enable-dns-blocklist
is needed to ban known bad nodes
./p2pool --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS
./xmrig -o 127.0.0.1:3333
./xmrig -u x+10000 -o 127.0.0.1:3333
Additional Information:
grep -E 'WARNING|ERROR' p2pool.log
logrotate
with a config like this to control logfile growth:
<path-to-logfile>
{
rotate 7
daily
missingok
delaycompress
nocreate
}
Note: Windows SmartScreen may block incoming connections by files that are "Downloaded from the Internet". You can allow 'p2pool.exe' and 'monerod.exe' by double-clicking them, clicking "More Info", then click "Run Anyway" and then closing them immediately so you can run them from the command line. Advanced users can use the PowerShell cmdlet Unblock-File
to remove this flag.
%USERPROFILE%/bin
or C:/bin/
are good options)Note: When running the below commands, Windows Firewall may prompt to allow connections, click "Allow" if prompted.
monerod
with the following command/options:
.\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --disable-dns-checkpoints --enable-dns-blocklist
Note:
The --zmq-pub
option is required for P2Pool to work properly.
--out-peers 32 --in-peers 64
is needed to (1) have many connections to other nodes and (2) limit incoming connection count because it can grow uncontrollably and cause problems when it goes above 1000 (open files limit in Linux). If your network connection's upload bandwidth is less than 10 Mbit, use --out-peers 8 --in-peers 16
instead.
--add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080
is needed to have guaranteed good working nodes in your connected peers.
--disable-dns-checkpoints
is needed to avoid periodical lags when DNS is updated (it's not needed when mining)
--enable-dns-blocklist
is needed to ban known bad nodes
.\p2pool.exe --host 127.0.0.1 --wallet YOUR_WALLET_ADDRESS --mini
.\xmrig.exe -o 127.0.0.1:3333
xmrig.exe -u x+10000 -o 127.0.0.1:3333
xmrig.exe
.
@ECHO OFF
start cmd /k %~dp0\Monero\monerod.exe --zmq-pub tcp://127.0.0.1:18083 --out-peers 32 --in-peers 64 --add-priority-node=p2pmd.xmrvsbeast.com:18080 --add-priority-node=nodes.hashvault.pro:18080 --disable-dns-checkpoints --enable-dns-blocklist
ECHO Wait until the Monero daemon shows fully synced before continuing. This can take some time. Type 'status' in other window to check progress.
PAUSE
start cmd /k %~dp0\p2pool.exe --wallet YOUR_WALLET_ADDRESS --mini
ECHO Wait until the daemon shows fully synced before continuing. This can take some time.
PAUSE
%~dp0\xmrig.exe -o 127.0.0.1
Only 64-bit builds are supported, in particular ARMv7 or older CPUs are not supported. The reason is that RandomX hashing algorithm is too slow in 32-bit mode, and P2Pool needs to check new blocks very fast to keep up with other nodes.
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on Ubuntu 20.04:
sudo apt update && sudo apt install git build-essential cmake libuv1-dev libzmq3-dev libsodium-dev libpgm-dev libnorm-dev libgss-dev libcurl4-openssl-dev libidn2-0-dev
git clone --recursive https://github.com/SChernykh/p2pool
cd p2pool
mkdir build && cd build
cmake ..
make -j$(nproc)
pacman -S p2pool
This is a flake only project. So you have to use nixUnstable with nix flakes to build or install P2Pool.
The commands below use the new flake specific reference-format, so be sure to also set ca-references
in --experimental-features
.
Because this project has submodules which are not fixed in nixUnstable yet you have to use the nix/master
branch:
nix shell github:nixos/nix/master
Run the binary:
nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1
Run the binary with arguments:
nix run git+https://github.com/SChernykh/p2pool?ref=master&submodules=1 -- --help
P2Pool binary (Visual Studio Community 2019 build): NOTE: You need to have the "Desktop Development with C++" module installed.
git clone --recursive https://github.com/SChernykh/p2pool
cd p2pool
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019"
then open generated build\p2pool.sln in Visual Studio and build it there
Alternatively, you can select "Clone a repository" within the GUI, then select "Build" from the menu.
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on your Mac:
brew update && brew install git cmake libuv zmq libpgm curl
git clone --recursive https://github.com/SChernykh/p2pool
cd p2pool
mkdir build && cd build
cmake ..
make -j$(sysctl -n hw.logicalcpu)
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally on FreeBSD:
pkg install git cmake libuv libzmq4 curl
git clone --recursive https://github.com/SChernykh/p2pool
cd p2pool
mkdir build && cd build
cmake ..
make
Run the following commands to install the necessary prerequisites, clone this repo, and build P2Pool locally in Termux:
pkg install git build-essential cmake libuv libzmq libcurl
git clone --recursive https://github.com/SChernykh/p2pool
cd p2pool
mkdir build && cd build
cmake ..
make -j$(nproc)
If you'd like to support further development of Monero P2Pool, you're welcome to send any amount of XMR to the following address:
44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg