4.9 KiB
Kamado Pool
Kamado is a solo Bitcoin mining pool built on a patched fork of CKPool-solo, with a Go middleware API and a real-time Svelte dashboard. When a miner connected to your Kamado instance solves a block, the full block reward goes to the payout address that miner connected with — no pool fees, no splits, no share accounting.
What you get on StartOS
- A running solo pool: stratum server (ckpool), middleware API, and web dashboard, supervised as separate daemons with individual health checks.
- A real-time dashboard with live hashrate, per-miner stats, hardware detection, block history, best-share leaderboards, and a transaction accelerator.
- Direct LAN stratum access: StartOS 0.4.0 exposes the stratum TCP port on your network — no router port-forward or proxy needed (this was a 0.3.x limitation).
- Optional stratum TLS with a persisted self-signed certificate miners can pin.
Setup
- Install and start Bitcoin Core. Kamado requires it running and synced; mining on an unsynced node produces invalid work.
- Accept the suggested task to enable ZMQ on Bitcoin Core (recommended — it gives sub-second new-block detection; without it Kamado falls back to RPC polling).
- Start Kamado Pool and open the Web Dashboard from the interface list.
There is no payout address to configure. CKPool-solo pays the full block reward directly to whichever Bitcoin address the miner connects with as its stratum username — see Connecting miners below. Kamado validates worker usernames against Bitcoin Core and refuses to authenticate any worker whose username is not a valid address on the active network, so misconfigured miners fail loudly instead of silently mining to the wrong place.
Connecting miners
The stratum port defaults to 3333 and can be changed in the Configure action. StartOS tries to publish the pool on that same port number on your network, so it is normally the port you give your miners — but check the Stratum interface after saving to see the actual external port, since the OS assigns a different one if your choice is already in use. Point each miner at:
stratum+tcp://<your-server-lan-address>:<stratum-port>
- Username: the Bitcoin address that should receive the block reward, optionally followed by
.workernamefor labelling in the dashboard (e.g.bc1q....myBitaxe). - Password: ignored — anything works.
Stratum over TLS
Enable Stratum TLS in the Configure action to add an encrypted stratum endpoint, terminated by an stunnel sidecar on its own port (default 3334, also configurable). The certificate is self-signed, generated once, and persisted, so pinned fingerprints survive restarts and updates.
Run the Stratum TLS Certificate action to get:
- the SHA-256 fingerprint for firmwares that pin fingerprints, and
- the full PEM to paste into firmwares that accept a custom root (AxeOS exposes a Stratum SSL Cert field for exactly this).
Otherwise connect with stratum+ssl:// and certificate verification disabled. Use the Regenerate TLS Certificate action to rotate the certificate; miners that pin it will need the new fingerprint.
Configuration
Everything lives in the Configure action: the stratum and stratum-TLS ports, vardiff (starting/min/max difficulty), idle-client disconnect, the coinbase tag embedded in solved blocks, ZMQ, TLS, log level, and an optional self-hosted mempool explorer URL for dashboard links.
Changing a port restarts the pool and rebinds the interface, so miners will reconnect on the new port — update them accordingly. Port choices that cannot work (colliding with each other, with the dashboard, or with ckpool's internal TLS bind) are rejected when you save rather than failing at startup.
Actions
- Pool Status — full text snapshot: Bitcoin Core sync, ckpool health, miners, hashrate, found blocks, submit-gap diagnostics.
- Stratum TLS Certificate — fingerprint + PEM for miner setup.
- Regenerate TLS Certificate — clears the cert; a fresh one is generated on next start.
- Reset Block Latency — zeroes the block-update latency counters after tuning.
Troubleshooting
- No miners appear after connecting: check the Stratum interface for the right port, and confirm the miner reaches it (
telnet <server> <port>). Check the Kamado logs. - Bitcoin Core RPC errors: make sure Bitcoin Core is running and fully synced; Kamado's Bitcoin Core RPC health check shows the current state.
- Best share resets to 0 after a block is found: upstream CKPool zeroes the "current round" best diff on solve. Kamado ships a patch that also exposes the all-time best, so the dashboard has both columns.
- Miner rejects the TLS certificate: re-check that the PEM was pasted completely (including the BEGIN/END lines), or pin the SHA-256 fingerprint, or disable verification in the miner.
Upstream
CKPool-solo by Con Kolivas: https://bitbucket.org/ckolivas/ckpool