NerdMiner – Taproot bc1p Address Rejected by Pool
Warning — Should be addressed soon
Symptoms
- Configured wallet address starts with `bc1p` (4th character is `p`, not `q`)
- NerdMiner display shows `Pool: Connected` or cycles Connected → Disconnected every 10-30 seconds
- `Valid Shares` counter on the device stays at `0` indefinitely
- Hashrate briefly reads ~50-80 kH/s then drops to `0` on each reconnect
- Block height and BTC price refresh normally on idle screen — WiFi and API are healthy
- Serial console at `115200` baud shows `mining.authorize` followed by pool `"result": false` with `Invalid wallet`, `Invalid bech32 address`, or `bad-user-name`
- Pool dashboard (public-pool.io, solo.ckpool.org) reports 0 workers online / address not found when searching the `bc1p` string
- mempool.space loads the `bc1p` address page and reports script type `v1_p2tr` (Taproot)
- Other NerdMiners on the same LAN using `bc1q` addresses hash normally against the same pool
- Pattern often follows a fresh Sparrow / Nunchuk / Foundation Passport / recent Keystone wallet that defaulted to Taproot receive without explicit script-type selection
Step-by-Step Fix
Power on the NerdMiner and enter config mode. Hold BOOT while power-cycling (or BOOT+RESET on variants with both). Device should come up broadcasting `NerdMinerAP` WiFi. Connect your phone/laptop to that network, browse to `http://192.168.4.1`, locate the BTC Address field. Inspect the current value — the 4th character tells you everything: `q` = native SegWit (fine), `p` = Taproot (this is your bug). Delete the `bc1p` value entirely including trailing whitespace.
Generate a native SegWit (`bc1q`) receive address in a real wallet. Install Sparrow, Electrum, or Blue Wallet — all free and open-source. In Sparrow's new-wallet wizard, explicitly pick `Native Segwit (P2WPKH)` in the script-type dropdown. Write the seed on paper and store it offline. Go to Receive, copy the resulting address (should start `bc1q`). Verify at mempool.space — it should load an address page and report `v0_p2wpkh`.
Paste the fresh `bc1q...` address into NerdMiner's BTC Address field. Confirm the 4th character is `q`. Save / Apply. The device reboots and re-connects to the configured pool using the new stratum user. Within 30-90 seconds the display should flip to a live hashrate (50-80 kH/s typical on NerdMiner v2) and `Valid Shares` should begin incrementing from 0.
Cross-check on the pool-side dashboard. Browse to `https://web.public-pool.io/` or `https://solo.ckpool.org/`, paste your new `bc1q` address into the worker/address search box. Your NerdMiner should appear as an online worker reporting a hashrate figure. Bookmark this page — it's how you'll track lifetime share contribution and catch downtime early.
If display still reads 0 shares after the address swap, perform a full power-cycle (hold power 5+ seconds, release, plug back in). Give it 90 seconds. If still dead, the firmware's NVS may have cached the old bad value — jump to Tier 3 `esptool.py erase_flash`.
Attach a USB-to-serial capture. ESP32-S3 variants use `115200` baud; older WROOM builds may use `921600`. Open PuTTY / Tera Term / `screen` / `minicom`. Power-cycle the device and capture the boot log. Look for the `mining.subscribe` + `mining.authorize` JSON exchange with the pool. `"result": true` = authenticated; `"result": false, "error": [24, "Invalid wallet", null]` (or similar) = still rejected. This is definitive evidence for whether the address got through.
Validate the candidate address against two independent block explorers before trusting it in config. Paste into mempool.space — should load a valid address page (zero-balance is fine). Paste into blockstream.info as an independent cross-check. If either returns 404 or an error, the string is malformed (likely from a PDF / chat-app paste with hidden characters). Re-copy from wallet source and re-validate.
Test the address at the raw pool layer. From a laptop on the same LAN: `nc public-pool.io 21496` (macOS/Linux) or `Test-NetConnection public-pool.io -Port 21496` (Windows). Paste `{"id": 1, "method": "mining.subscribe", "params": ["NerdMinerTest"]}` then Enter, then `{"id": 2, "method": "mining.authorize", "params": ["YOUR_BC1Q_ADDRESS", "x"]}` then Enter. `"result": true` = address accepted by the pool; `"result": false` = pool rejects even a valid-looking bc1q, try a different pool for testing.
If you insist on Taproot for your mining payouts, try a pool that explicitly advertises bech32m support. Ocean pool and some newer ckpool forks accept `bc1p` in their stratum handlers. Swap Stratum URL/Port in NerdMiner config, keep the `bc1p` address, reboot, watch serial. If the device never even sends `mining.authorize` (firmware rejects locally before transmitting), no pool swap will help — the fix must be firmware-side.
Scan your config file for invisible garbage. Open `Config.json` (or your firmware's config path) in a monospace plaintext editor — VSCode, Notepad++, Sublime, `vim`. PDFs, Discord pastes, and screenshot-OCR sources embed zero-width spaces, curly quotes, and non-breaking hyphens that visually pass but break bech32 parsing. If suspect, retype the address by hand from your wallet's on-screen QR or display.
Build NerdMiner_v2 from source with verbose stratum logging. Clone `BitMaker-hub/NerdMiner_v2`, open `src/mining.cpp` and `src/stratum.cpp`, raise log level to DEBUG. In PlatformIO select the correct `env:` for your exact board variant (ESP32-S3, T-Display-S3, T-Dongle-S3, ESP32-WROOM-32) — flashing the wrong target bricks display and causes a boot loop. Flash via USB. Serial now shows every byte of the stratum exchange, including send and receive for `mining.authorize`.
Inspect the firmware's address validation in `src/mining.cpp`. Through 2025 most NerdMiner_v2 builds do a minimal check — length + lowercase + `bc` prefix — with no bech32m (BIP 350) checksum validator. Options: (a) accept the firmware will forward any plausibly-formatted string and let the pool reject, (b) add the bech32m validator so `bc1p` is flagged with a clear error at config time. The reference implementation is ~200 lines of C published by Pieter Wuille at `sipa/bech32` — prime low-stakes PR for a pleb with C skills.
Contribute upstream. Open an issue on `BitMaker-hub/NerdMiner_v2` titled `Firmware should validate or clearly reject bc1p / bech32m Taproot addresses at config time`. Include your config value, serial capture of the rejected `mining.authorize` exchange, and pool name. Attach the `sipa/bech32` reference C validator as a suggested implementation. This class of UX-trap fix is exactly what open-source firmware lives for — somebody will merge it if the ticket is clean.
Perform full flash erase if NVS cached a bad value. `esptool.py --chip esp32s3 --port /dev/ttyUSB0 erase_flash` (replace `esp32s3` with your exact chip and port accordingly). Then re-flash the NerdMiner_v2 firmware image for your board variant and reconfigure from scratch through NerdMinerAP. This resolves the edge case where the UI accepted a new address but the device kept authenticating with the old cached one.
Stop DIY and escalate: you validated a fresh wallet-generated `bc1q` on two block explorers, confirmed the pool accepts it via `nc` handshake, flashed known-good firmware, performed `erase_flash` — miner still won't authenticate. Open a D-Central support ticket at https://d-central.tech/contact/ with the full serial capture, firmware version string, pool hostname + port tested, and your exact board variant. This class of escalation is rare (~1/quarter across the Nerd family) and usually resolves to a damaged USB-serial bridge or a known-bad firmware build shipped briefly from a third-party reseller.
For D-Central-purchased Nerd-family devices, email a photo of your config screen to support@d-central.tech. D-Central pioneered the Bitaxe accessory ecosystem — original Bitaxe Mesh Stand, first Bitaxe and Bitaxe Hex heatsinks — and stocks the full Nerd family (NerdMiner, NerdAxe, NerdNOS, NerdQAxe, NerdQAxe++). We diagnose address-format mistakes in under 60 seconds, walk you through a `bc1q` generation in your specific wallet, and supply a known-good pool config. Free with any Nerd-family device purchased from us.
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.
