solo db-less bitcoin-only mining pool, meant for lan swarms
  • Go 93.9%
  • Shell 4.2%
  • JavaScript 1.1%
  • Dockerfile 0.8%
Find a file
2026-05-19 08:21:08 -04:00
constants feat: bip-323 compliance 2026-05-19 00:33:55 -04:00
contrib cleanup 2026-05-16 22:06:11 -04:00
mockdata test: fix TestSubmit after bip-54 compliance 2026-02-10 13:08:52 -05:00
.dockerignore add dockerfile 2026-01-30 17:19:19 -05:00
.gitignore minor cleanup 2025-12-16 17:13:10 -05:00
api.go chore: update stratum 2026-04-20 12:19:52 -04:00
config.go doc: specify env overrides in config file 2026-04-18 12:48:39 -04:00
config_test.go i really need to figure out why this freezes 2025-12-18 16:36:53 -05:00
go.mod fix go.mod 2026-05-17 11:53:31 -04:00
go.sum fix go.mod 2026-05-17 11:53:31 -04:00
jobtemplate.go update stratum package 2026-05-17 11:01:25 -04:00
jobtemplate_test.go feat: duplicate share detection 2026-03-03 15:02:46 -05:00
LICENSE rename license 2025-07-29 11:14:01 -04:00
main.go use pointers in blockSubmission struct 2026-05-19 08:21:08 -04:00
mockrecording_test.go chore: update deps 2026-02-24 10:51:08 -05:00
openapi.yaml doc(openapi): add blocksFound 2026-03-01 15:51:12 -05:00
README.MD doc: add expected stale job rate to readme 2026-04-19 21:14:53 -04:00
showoff.png doc: add showoff pic 2026-02-06 14:42:53 -05:00
stratumclient.go use pointers in blockSubmission struct 2026-05-19 08:21:08 -04:00
stratumclient_test.go update stratum package 2026-05-17 11:01:25 -04:00
util.go cleanup 2026-05-16 22:06:11 -04:00
util_test.go randomly pick between upper and lower 32 bits of the xx3 hash for double the extranonce1s 2026-05-01 16:59:08 -04:00

/pogolo - decentralize or die/

solo db-less bitcoin-only mining pool
meant for lan swarms, not the internet
think of this as public-pool but minimal and for self-sovereign nerds
infinite thanks to btcd for bitcoin tooling and public-pool for reference
start it, point your miners to it, and watch the logs roll by

cpuminer on regtest

want a go pool you can run on the public internet? check out https://github.com/Distortions81/M45-Core-goPool!

features

  • up to 4.3-5.2k shares/sec/client
  • set a default address to mine to, no more ctrl+c ctrl+v ctrl+v ctrl+v ctrl+v ctrl+v
  • btcd websocket support
  • colorful and detailed logs (respects NO_COLOR)
  • api (see api.go and swagger spec)

supported BIPs

  • 34
  • 41 (probably)
  • 54
  • 310 (minus subscribe-extranonce)
  • 320

supported miners

  • *axe family (bitaxe, nerd*axe, etc)
  • cpuminer
  • antminers

supported backends

pogolo has no tls support.

  • JSON-RPC (core, knots, etc)
  • btcd websocket

unsupported

  • miners requiring extranonce.subscribe
  • luckyminers/other non-foss axe clones
  • stratum v2

setup

docker

pogolo image at https://hub.docker.com/r/0xf0xx0/pogolo

copy the pogolo.toml from contrib/pkgs/docker, configure it to your needs, then run

docker run -d -v "./pogolo.toml:/config/pogolo.toml" 0xf0xx0/pogolo:latest

docker (+compose) files exist and work but likely need tweaks, theyre also under contrib/pkgs/docker

environment overrides

for easy config, eg umbrel

POGOLO_HOST: # overrides [pogolo].host
POGOLO_BACKEND_HOST: # overrides [backend].host
POGOLO_BACKEND_RPCAUTH: # overrides [backend].rpcauth

go

go install git.0xf0xx0.eth.limo/0xf0xx0/pogolo@latest

then follow manual install/configure.

manual install

build

git clone https://git.0xf0xx0.eth.limo/0xf0xx0/pogolo.git
cd pogolo
go build -trimpath -ldflags="-s -w -buildid="
go install

configure

mkdir "$XDG_CONFIG_HOME/pogolo"
pogolo --writedefaultconf "$XDG_CONFIG_HOME/pogolo/pogolo.toml"

or, copy contrib/pogolo.example.toml to $XDG_CONFIG_HOME/pogolo/pogolo.toml
then configure the interface, backend, and auth

run

pogolo

miner config

host: stratum+tcp://<your lan ip>:5661
username: [.]
password: [required if set in pogolo.toml]
suggested diff: [optional]

the onchain address is also optional if the pool has a default configured.
stale jobs are normal, the expected error rate is 0.2%.

benchmarking

to reproduce shares/s result:

  1. set benchmark = true in your config
  2. connect with cpuminer (preferably from a different machine) and watch the shares fly

TODO