Skip to content

We're upgrading our operations to serve you better. Orders ship as usual from Laval, QC. Questions? Contact us

Bitcoin accepted at checkout  |  Ships from Laval, QC, Canada  |  Expert support since 2016

SOLO_CKPOOL_CFG Info

Solo CKPool vs Public Pool Stratum Differences

Solo CKPool (`solo.ckpool.org:3333`, 2% fee, single-finder reward) and Public Pool (`public-pool.io:21496` managed at 0% fee, or self-hosted on Umbrel/Start9 with operator-configurable share) are different solo-mining endpoints with different stratum hosts, ports, fee structures, and block-reward distribution rules. Both are SV1-only. Mismatched host:port, wrong-dashboard-for-configured-pool, or unverified operator-share assumptions produce silent zero-share or unexpected-payout outcomes.

Informational — Monitor and address as needed

Affected Models: Bitaxe Supra, Bitaxe Ultra, Bitaxe Gamma, Bitaxe GT, Bitaxe Hex, Bitaxe Max, NerdMiner, NerdAxe, NerdQAxe, NerdNOS, PiAxe, StealthMiner, stock Antminer (Bitmain), stock Whatsminer (MicroBT), stock Avalon (Canaan), and any miner running DCENT_OS / Braiins OS+ / LuxOS / Vnish pointed at solo.ckpool.org or web.public-pool.io

Symptoms

  • Two community-recommended endpoints (`solo.ckpool.org` and `public-pool.io`) and unclear which to pick or how they differ
  • Miner shows `Pool: Connected` for hours but the pool's worker page shows zero accepted shares
  • Worker name appears on `solo.ckpool.org/users/<addr>` but not on `web.public-pool.io/<addr>` — or vice versa — because the dashboard being checked does not match the configured host
  • Bitaxe / NerdMiner / NerdAxe / NerdQAxe / NerdNOS / PiAxe operator running an Umbrel or Start9 home node, unsure whether to use the local self-hosted Public Pool or the managed `web.public-pool.io` instance
  • Pool URL contains `:3333` and the miner won't connect — wrong port for the host (Public Pool uses `:21496`)
  • Pool URL contains `:21496` and the miner won't connect — wrong port for the host (Solo CKPool uses `:3333`)
  • Lightning address, Lightning invoice, or LNURL pasted into the username field instead of an on-chain BTC address — neither pool accepts that, shares never register
  • Worker name longer than the pool's display limit, or contains characters outside `[A-Za-z0-9._-]`, and silently does not register on the dashboard
  • Stock Antminer / Whatsminer / Avalon firmware URL field rejects the `stratum+tcp://` prefix and you don't know whether to drop it
  • Firmware log shows `mining.subscribe` traffic but `mining.notify` never arrives — wrong port, wrong host, ISP-blocked port, or firmware running SV2 against an SV1-only pool
  • Found a block (congratulations) on either pool and post-discovery realize you don't fully understand the fee, finder share, and operator share that applied
  • Self-hosted Public Pool is configured but you didn't verify the `node_operator_address` setting and don't know what percentage of any block reward routes to the operator

Step-by-Step Fix

1

Pick the pool that matches your intent before configuring anything. Solo CKPool (`solo.ckpool.org:3333`, 2% fee, single-finder takes the rest) for low-friction managed global solo mining. Public Pool managed (`public-pool.io:21496`, headline 0% fee — verify current policy in pool docs) for free public solo mining with a richer dashboard. Public Pool self-hosted (Umbrel / Start9 / Citadel / Raspiblitz) for sovereign mining where your own `bitcoind` assembles every block template from your own mempool. There is no objectively best choice — they serve different goals.

2

Open the miner's pool configuration page. AxeOS, NerdMiner web UI, NerdAxe / NerdQAxe / NerdNOS, PiAxe, StealthMiner, stock Antminer / Whatsminer / Avalon, DCENT_OS / Braiins OS+ / LuxOS / Vnish — every miner exposes a Pool config screen. Screenshot current settings before changing anything. If the firmware has multiple pool slots, plan to use Pool 0 for primary and Pool 1 for a failover entry to the other solo pool.

3

Enter the host and port matching your chosen pool. Solo CKPool: host `solo.ckpool.org`, port `3333`. Public Pool managed: host `public-pool.io`, port `21496`. Self-hosted Public Pool: host `<your-umbrel>.local` or your home-node LAN IP, port per the app's config (`21496` is typical default; verify in the app's settings page). On firmware that uses a single Pool URL field, format as `stratum+tcp://<host>:<port>`. On firmware with separate host and port fields, paste the bare host into the host field and the bare port number into the port field — no prefix required.

4

Set username = your on-chain BTC address (legacy `1...`, P2SH `3...`, native segwit `bc1q...`, or taproot `bc1p...` — both pools accept any of the four). Optionally append `.workername` after a dot to label this specific device — alphanumerics, hyphens, and underscores only, keep it under 32 characters to avoid display truncation. Password = `x`. Both pools ignore the password but require a non-empty value. **Do not paste a Lightning address, Lightning invoice, or LNURL into the username field** — neither pool understands Lightning.

5

Disable Stratum V2 explicitly if your firmware supports it. Both Solo CKPool and Public Pool are SV1-only. DCENT_OS, Braiins OS+, LuxOS, and Vnish all default to SV2 against pools that announce SV2 support; against these two pools you must explicitly toggle SV2 off in pool settings before saving. Stock Antminer / Whatsminer / Avalon / AxeOS / NerdMiner firmware is SV1-only by design and needs no toggle. Save the config and reboot the miner.

6

Verify TCP reachability from a laptop on the same LAN. Run `nc -v solo.ckpool.org 3333` for Solo CKPool, then `nc -v public-pool.io 21496` for Public Pool managed. Both should return `Connection succeeded` within two seconds. If either fails, the issue is upstream of the miner — ISP-level port blocking (some Canadian and European residential ISPs block `:3333` outbound), IPv6 dual-stack misconfiguration, or DNS resolution failure. Route through Tailscale or a small VPS relay in an unfiltered region if the residential ISP filters the port.

7

Hand-test SV1 stratum reachability with `nc`. After the connection succeeds, paste literally `{"id": 1, "method": "mining.subscribe", "params": ["bitaxe"]}` followed by a newline. Both pools reply with a JSON-RPC `result` object containing extranonce metadata within a second. If TCP connects but stratum doesn't reply, the pool is up at the network layer but the stratum server is restarting or under load — try again in a few minutes.

8

Configure pool failover. Pool 0 = primary choice, Pool 1 = the other solo pool as backup. A common Bitaxe-friendly failover pair: Pool 0 = `public-pool.io:21496`, Pool 1 = `solo.ckpool.org:3333`. Both speak SV1, both accept the same `BTC_ADDRESS.workername` syntax, both accept any password — failover is essentially free and gives you uptime resilience against one pool going offline. Tertiary fallback to a self-hosted Umbrel Public Pool gives a third independent path.

9

Verify worker registration on the matching pool's dashboard within 5 minutes of the first share. Solo CKPool: `https://solo.ckpool.org/users/<YOUR_BTC_ADDRESS>`. Public Pool managed: `https://web.public-pool.io/<YOUR_BTC_ADDRESS>`. Self-hosted Public Pool: your Umbrel/Start9 app UI. Both dashboards show worker hashrate, accepted shares, best share difficulty, and last-share time. **Do not check Solo CKPool's dashboard for a worker pointed at Public Pool** — they are entirely separate services. Wrong dashboard for configured pool is the single most common false-positive failure on this page.

10

Confirm reward economics for your specific deployment before depositing serious hashrate. Solo CKPool: `2%` fee, single-finder receives `(block_reward + fees) × 0.98`. Public Pool managed: published policy at the time of writing is `0%` fee — verify the current policy on `web.public-pool.io` docs / FAQ before assuming it still holds. Public Pool self-hosted: read the operator's `node_operator_address` configuration. Friendly home-node operators typically take `0%`, but the value is configurable per deployment. If you are pointing at someone else's Umbrel Public Pool, confirm their policy before mining.

11

Self-host Public Pool on Umbrel / Start9 / Citadel / Raspiblitz for full sovereignty. Install the Public Pool app from the home-node app store (one tap on Umbrel and Start9). After install, the pool exposes a stratum endpoint on your LAN. The pool ties into your local `bitcoind` for block-template assembly: every block your miners try to find is built from your own mempool. Set `node_operator_address` to your own BTC address if you want the operator share (default `0%`, configurable) flowing back to you on any block. Read `github.com/benjamin-wilson/public-pool` README before adjusting.

12

Run your own `ckpool-solo` instance for ultra-low-overhead self-hosted solo mining. Source: `github.com/ckolivas/ckpool-solo`. Compiles cleanly on a `bitcoind` host. Configure with your own pool address and operator settings; point miners at `<your-host>:3333`. You now have a Solo CKPool-style endpoint with `0%` fee instead of `2%`, and you control template assembly. Trade-off: you operate the pool, you eat the uptime. Budget a weekend for first deployment plus ongoing maintenance.

13

Combine SRI Translation Proxy with self-hosted Public Pool for the maximum-sovereignty home setup. Stock-firmware Antminers / Whatsminers / Avalons speak SV1 to a local SRI translation proxy on a Raspberry Pi. The proxy speaks SV2 upstream to a local Job Negotiator. The Job Negotiator pulls templates from a local `bitcoind`. Public Pool handles accounting and the dashboard. Stock SV1 miners on the front, sovereign templates on the back, no firmware flashing required on the miners themselves. SRI: `github.com/stratum-mining/stratum`.

14

Monitor solo-mining luck via the best-share-difficulty metric, not just hashrate. Solo mining is a Poisson process — the time between blocks is exponentially distributed around `total_network_difficulty / your_hashrate`. A Bitaxe Hex at `~3 TH/s` against current network difficulty has an expected time-to-block measured in millennia, which is not the actual time. Both Solo CKPool and Public Pool dashboards display best-share-difficulty over time. Trending up = your firmware is healthy and submitting full-range nonces. Best-share-diff approaching network difficulty = you're hashing well; pool-side accounting is fine.

15

Stop DIY and escalate to D-Central support if configuration is correct, network reachability is confirmed via `nc`, firmware logs show stratum traffic, and the worker still doesn't register on the matching pool's dashboard after 30+ minutes — and you have ruled out the wrong-dashboard error in Step 9. Open a D-Central support ticket at `https://d-central.tech/contact/` with your firmware version, pool selection, and ideally a `tcpdump` capture of the first 60 seconds of stratum traffic. At this point the most likely causes are a rare firmware-version-specific URL-parsing bug or an upstream pool issue.

16

For Bitaxe and Nerd-family solo-pool advice in particular, talk to D-Central directly. D-Central is a pioneer in the Bitaxe ecosystem — original Bitaxe Mesh Stand manufacturer, first heatsinks for Bitaxe and Bitaxe Hex, full stock of every Bitaxe variant (Supra, Ultra, Hex, Gamma, GT, Max) plus the full Nerd family (NerdMiner, NerdAxe, NerdQAxe, NerdNOS) and the PiAxe / StealthMiner ecosystem. Open a support ticket or post in the D-Central Discord — Mining Hacker community is the right place to ask, and we'll walk you through pool config in real time.

When to Seek Professional Repair

If the steps above do not resolve the issue, or if you are not comfortable performing these repairs yourself, professional service is recommended. Attempting advanced repairs without proper equipment can cause further damage.

Related Error Codes

Still Having Issues?

Our team of Bitcoin Mining Hackers has been repairing ASIC miners since 2016. We have seen it all and fixed it all. Get a professional diagnosis.