# 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 1. Install and start **Bitcoin Core**. Kamado requires it running and synced; mining on an unsynced node produces invalid work. 2. 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). 3. 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 — that setting is the network port your miners connect to. Check the **Stratum** interface after saving to see the port actually in use, since the OS assigns a different one if your choice is already claimed by another service. Point each miner at: ```text stratum+tcp://: ``` - **Username**: the Bitcoin address that should receive the block reward, optionally followed by `.workername` for 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 rebinds the interface without restarting the pool, so miners already connected on other ports keep hashing — but anything pointed at the old port must be updated. Setting both stratum ports to the same number is rejected when you save. ## 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 `). 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: