Build a P2Pool Node

Venzen Khaosan @venzen
March 25, 2014

P2Pool is a decentralized mining pool that consists of a network of peer-to-peer miner nodes that anyone can mine or expand.

This guide will show you how to install the P2Pool software, create your own P2Pool node, and join it to the P2Pool network.

We will be using a fork of the original Bitcoin p2pool software, called zen2pool, that has been optimized for scrypt- and progressive-N scrypt-based altcoins. If you would like to install the Bitcoin specific node software, then use forrestv’s version (instead of zen2pool) and substitute references to ‘zen2pool’ with p2pool throughout the rest of this guide.

If you want try P2Pool by just mining at an existing pool, rather than installing and configuring your own node, the see the Test Drive P2Pool guide.


This installation process is illustrated with Ubuntu Linux and Execoin, although the latter can be substituted with any other coin such as Anoncoin or Litecoin. It is assumed that you already have a local instance of the coin daemon running with the following parameters:

$ ./execoind -daemon -server -rpcallowip=

The P2Pool software will later connect to execoind in server mode and will relay mining software RPC communication via the localhost.

If you don’t have the execoind daemon, then you can fetch it from GitHub, compile and start with the command above. Execoin source code is available from GitHub with:

$ git clone


Install Linux package dependencies:

$ sudo apt-get install git python-zope.interface python-twisted python-twisted-web

Now clone the zen2pool source code from GitHub to a local directory (git will automatically create the source directory):

$ git clone

Change into the directory and have a look around:

$ cd ./zen2pool
$ ls -l

Build the Scrypt modules

Both the generic and progressive-N scrypt modules are included in the py_modules directory. Let’s build both while we’re at it:

cd py_modules

cd litecoin_scrypt
sudo python install

cd ../vertcoin_scrypt
sudo python install

Start the node

Ensure execoind is running as described above and that a RPC username and password are set in the execoin.conf file that execoind would have prompted you to create upon the first run:

$ cat ~/.execoin/execoin.conf

Make sure you’re in the zen2pool application root directory. We’re going to start zen2pool with the following parameter:

--net execoin_zen

–net tells zen2pool to use the ‘execoin_zen’  definition listed in the file p2pool/

Execute the complete command:

$ python  --net execoin_zen

You should see zen2pool start up and connect to execoind as well as the wider P2Pool network.

If zen2pool complains about “bitcoind taking a long time” – this is a generic message warning that zen2pool cannot make a connection to the coind daemon. Make sure execoind is running and that you are not passing it a -maxconnections= parameter. Stop and restart zen2pool.

If you see the message “Success” and lots of messages with “???” declarations, don’t worry, this is normal – zen2pool is bootstrapping the sharechain, and we have yet to point a miner at this node. Bootstrapping can take anywhere from a few minutes to an hour.

Web Statistics

Test your zen2pool web interface by pointing your browser at

Alternatively, if you’re running zen2pool on a remote server/VPS, substitute with the remote IP address.

Once the sharechain has finished downloading, stop and restart zen2pool. At startup, it will display its progress loading the sharechain from its local disk cache and then indicate that it’s ready for mining by displaying empty local P2Pool stats but a non-zero global hash rate. Startup your mining software and once it has submitted work for about an hour, the statics will be meaningfully populated, and you can monitor your mining in relation to the wider P2Pool network as well as other useful metrics.

Mining your P2Pool Node

You now have the option to point your mining software at your P2Pool node, as well as invite other people to mine the pool.

See the Mining P2Pool article for mining instructions and configuration settings.


Last modified (UTC): March 25, 2014 11:02

Show comments