Frontend, backend of and P2Pool consensus reimplementation
Go to file
DataHoarder 1714e701de
continuous-integration/drone/push Build is passing Details
Listen on for tor-proxy
2024-03-01 02:51:36 +01:00
cmd Fix settings on miner_webhooks endpoint 2024-03-01 02:38:29 +01:00
docker Use new Go 1.22 features: newinliner and math/rand/v2 2024-02-26 19:07:14 +01:00
monero Upgrade to new logger format 2024-02-26 21:24:37 +01:00
p2pool Upgrade to new logger format 2024-02-26 21:24:37 +01:00
testdata Added tests for pre-fork p2pool, generalize tests, added patched missing blocks for old mini sidechain test 2023-05-23 21:19:42 +02:00
types Encode types.Difficulty as uint64 if Difficulty.Hi is zero 2023-07-30 20:45:02 +02:00
utils Partially implement #11 Cumulative Share Effort on calculator, added mean shares per day 2024-02-28 05:11:11 +01:00
.dockerignore Overhaul PGO profile gathering per-command 2023-07-21 00:48:28 +02:00
.drone.yml Use new Go 1.22 features: newinliner and math/rand/v2 2024-02-26 19:07:14 +01:00
.env.example Update Libera.Chat IRC links to be able to point to plumbed Matrix rooms 2023-07-20 07:37:45 +02:00
.gitignore Overhaul PGO profile gathering per-command 2023-07-21 00:48:28 +02:00
LICENSE Initial commit 2022-10-08 20:55:01 +02:00 Refactor block_by_* api calls to reuse code, reword API docs with more information. 2023-08-01 08:03:39 +02:00
docker-compose.yml Listen on for tor-proxy 2024-03-01 02:51:36 +01:00
go.mod Update all dependencies 2024-02-25 20:13:27 +01:00
go.sum Update all dependencies 2024-02-25 20:13:27 +01:00 Update to Go 1.22 2024-02-23 13:11:58 +01:00 Update all dependencies 2024-02-25 20:13:27 +01:00 Index database, archivetoindex, database schema 2023-04-11 04:26:24 +02:00

P2Pool Observer

This repository contains several libraries and utilities to produce statistics and historical archives of Monero P2Pool decentralized pool, including consensus-compatible reimplementation of a P2Pool server instance.

Other general tools to work with Monero cryptography are also included.

Reporting issues

You can give feedback or report / discuss issues on:

Maintainer-run Observer Instances

Host Onion Address IRC Channel Notes
P2Pool.Observer p2pool2giz2r5cpqicajwoazjcxkfujxswtk3jolfk2ubilhrkqam2id.onion #p2pool-log or Matrix Tracking up-to-date Main P2Pool on Mainnet
MINI.P2Pool.Observer p2pmin25k4ei5bp3l6bpyoap6ogevrc35c3hcfue7zfetjpbhhshxdqd.onion #p2pool-mini or Matrix [2] Tracking up-to-date Mini P2Pool on Mainnet
OLD.P2Pool.Observer temp2p7m2ddclcsqx2mrbqrmo7ccixpiu5s2cz2c6erxi2lppptdvxqd.onion #p2pool-log or Matrix Tracking old fork pre-v3.0 Main P2Pool on Mainnet
OLD-MINI.P2Pool.Observer temp2pbud6av2jx3lh3yovrj4mjjy2k4p5rxydviosp356ndzs4nd6yd.onion #p2pool-mini or Matrix [2] Tracking old fork pre-v3.0 Mini P2Pool on Mainnet


This project is provided for everyone to use, for free, as a hobby project. Any support is appreciated.

Donate to support this project, its development, and running the Observer Instances on 4AeEwC2Uik2Zv4uooAUWjQb2ZvcLDBmLXN4rzSn3wjBoY8EKfNkSUqeg5PxcnWTwB1b2V39PDwU9gaNE5SnxSQPYQyoQtr7

You can also use the OpenAlias directly on the GUI.

Operational instructions

A docker-compose setup is provided and documented.

If desired each tool can be run individually, but that is left to the user to configure, refer to Docker setup as reference.


  • docker-compose or similar
  • git installed
  • Disk space for new incoming historic data. Assume a few tens of MiB per day
  • A monerod non-pruned node running in unrestricted mode preferably, but can work with restricted mode.
  • Enough RAM to fit state and incoming queries. It can run with lower with adjustment of settings, but 8 GiB per instance should be fine.

Initial setup

$ git clone test-instance
$ cd test-instance
$ cp .env.example .env

Edit .env via your preferred editor, specifically around the monerod host options and generate keys for the Tor hidden service.

If you want to make changes to additional docker-compose settings, do not edit docker-compose.yml. Instead create docker-compose.override.yml and place new settings there. See Multiple Compose files documentation.

Update / Apply new settings

Within the instance folder, run this command

$ git checkout -- '*/default.pgo'; \
git pull && \
docker-compose build --pull && \
docker-compose up -d && \
docker-compose restart tor site pgo-p2pool pgo-daemon pgo-web pgo-api

docker-compose restart tor is necessary due to the tor server not refreshing DNS of the containers.

It is recommended to run docker system prune regularly or after update to cleanup no longer used images.

Backfill likely sweep transactions

When a new instance starts with previously imported archives you might want to backfill sweep transactions. For new instances this is not necessary, and you can also skip this step and just rely on future data.

$ docker-compose exec --workdir /usr/src/p2pool daemon \
go run -v \
-api-host "http://p2pool:3131" \
-db="host=db port=5432 dbname=p2pool user=p2pool password=p2pool sslmode=disable"

Can also specify -e TRANSACTION_LOOKUP_OTHER=https://OTHER_INSTANCE just before daemon to query other instances additionally with alternate or longer history.

Development notes

Requires using CGO when running the main modes where RandomX hashes are used, but can be used with CGO_ENABLED=0 specifically as a library.

You can install the RandomX dependency via this command:

$ git clone --depth 1 --branch master /tmp/RandomX && cd /tmp/RandomX && \
    mkdir build && cd build && \
    cmake .. -DCMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX:PATH=/usr && \
    make -j$(nproc) && \
    sudo make install && \
    cd ../ && \
    rm -rf /tmp/RandomX

To generate web templates, run this command:

$ go run

To update module dependencies, use these commands:

$ for f in $(find . -name go.mod); do (cd $(dirname $f); GOPROXY=direct go get -u ./...); done
$ for f in $(find . -name go.mod); do (cd $(dirname $f); GOPROXY=direct go mod tidy); done
$ go work sync