Passer au contenu

Nous améliorons nos opérations pour mieux vous servir. Les commandes sont expédiées normalement depuis Laval, QC. Questions? Contactez-nous

Bitcoin accepté au paiement  |  Expédié depuis Laval, QC, Canada  |  Soutien expert depuis 2016

BRAIINS_FP_SV2 Warning

Braiins Farm Proxy SV2 Upgrade Handshake Fail

Braiins Farm Proxy SV1 to SV2 upgrade handshake fail — proxy refuses to start, downstream miners can't connect, upstream pool refuses subscribe, or mixed-fleet stock-firmware miners disconnect because the SV2 listener won't speak SV1 to them.

Warning — Should be addressed soon

Affected Models: Multi-miner farms running Braiins Farm Proxy in front of a mixed fleet — Antminer S9/S17/S19/S21 (stock bmminer + DCENT_OS + Braiins OS+ + LuxOS + Vnish), Whatsminer M30S/M50/M60 (stock BTMiner), Avalon 12xx/13xx/14xx (stock CGMiner-Avalon), Bitaxe Supra/Ultra/Hex/Gamma/GT (AxeOS), NerdMiner / NerdAxe / NerdQAxe / NerdNOS, PiAxe. Common symptom across any farm where one or more miners speak SV1-only and the proxy got cut over to SV2-only listener.

Symptoms

  • `systemctl restart braiins-farm-proxy` after switching SV1 to SV2 in config either fails to start, starts but logs `noise handshake failed`, or starts but never accepts a downstream miner
  • Workers that were hashing on the proxy's SV1 listener (`:3333`) are suddenly all idle on the SV2 listener (`:3336` typical)
  • Proxy log contains `upstream pool refused SV2 subscribe`, `pool returned SV1 banner`, `noise handshake KDF mismatch`, `extranonce negotiation failed`, `unsupported message type 0xNN`, or `frame too large`
  • Some miners reconnect, others don't — the don't group is uniformly your stock-firmware miners (Bitmain bmminer, Whatsminer BTMiner, Avalon CGMiner-Avalon, Bitaxe AxeOS <= 2.3.x)
  • `tcpdump -i any port 3336` shows downstream TCP SYN arriving but no application-layer payload — connection at socket level but noise XX handshake never completes
  • Pool dashboard shows your proxy's IP `subscribed` but worker count is zero or stuck at SV1-only-miner count
  • `connection reset by peer` after a 2-10s pause every time a miner attempts to connect to the SV2 listener
  • Hashrate sawtooth on pool side: full pre-upgrade rate, drop to zero, partial recovery (only SV2-capable workers), then drift
  • Proxy `RSS` / memory usage spikes at the moment of cutover (memory leak from a malformed-frame loop)
  • Per-pool reconnect counter in DCENT_OS / Braiins OS+ / LuxOS spikes for the affected farm at the exact cutover moment
  • `telnet proxy-host 3336` opens but nothing further happens — noise XX silently failing
  • Farm-wide TH/s drops by exactly the proportion that maps to your stock-firmware miner count

Step-by-Step Fix

1

Roll the proxy back to last-known-good SV1-only config and restart. Restore from `/etc/braiins-farm-proxy/farm-proxy.toml.bak` or comment out the `[[listener]]` block enabling SV2 and leave only SV1 active. `systemctl restart braiins-farm-proxy`. Confirm farm comes back online on SV1 within 5 minutes. This is your safe-state baseline. Never plan an SV2 cutover without a documented rollback that takes <5 minutes.

2

Verify upstream pool's native SV2 capability before re-attempting. Visit pool docs. Braiins Pool / DEMAND = native SV2 (endpoint typically `stratum2+tcp://v2.stratum.braiins.com:3336` — verify against current docs). F2Pool / Antpool / ViaBTC / NiceHash / Foundry / Luxor / Ocean = SV1-only as of 2026-Q1; plan for translator mode (SV2 downstream, SV1 upstream).

3

Inventory which miners can speak native SV2. Walk the farm. Note firmware on each miner. SV2-capable: DCENT_OS (any rev), Braiins OS+ >= 23.06, LuxOS >= 2024.1, recent Vnish, Bitaxe AxeOS >= 2.4.x. SV1-only: stock Bitmain bmminer, stock Whatsminer BTMiner, stock Avalon CGMiner-Avalon, stock NerdMiner, PiAxe stock. Mixed fleet = you need both listeners. Document the split before re-cutover.

4

Configure the proxy with both SV1 and SV2 listeners. Edit `/etc/braiins-farm-proxy/farm-proxy.toml`. Enable two `[[listener]]` blocks: one with `protocol = "sv1"` on `:3333`, one with `protocol = "sv2"` on `:3336`. Single shared `[upstream]` block. Restart the service. `ss -tlnp | grep braiins-farm-proxy` to confirm both ports are bound.

5

Set upstream mode correctly. Native SV2 pool: `[upstream] mode = "native"`, point at SV2 endpoint. SV1-only pool: `[upstream] mode = "translator"`, point at SV1 endpoint. Proxy speaks SV2 downstream regardless. Restart, watch the log for `upstream subscribe success`.

6

Re-point each miner to the listener matching its firmware. SV1-only miner -> `stratum+tcp://proxy-host:3333`. SV2-capable miner -> `stratum+tcp://proxy-host:3336` (or `stratum2+tcp://` if firmware requires that scheme). Move 1 SV1 + 1 SV2 miner first, confirm shares flow, then bulk-migrate in batches of 10-20 to keep blast radius small.

7

Watch hashrate convergence on the pool side for 30 minutes. Pre-cutover hashrate should return within 30 minutes. If it returns to <90% of baseline and stays there, one batch of miners is silently failing — check the proxy log for which workers' authorize is missing, route them back to the protocol-matching listener.

8

Check NTP on proxy host and every miner. `timedatectl status` on proxy. On miners: DCENT_OS dashboard System->NTP, Braiins OS+ Status->System Time, LuxOS Settings->Time. Any miner more than 5 seconds off real time may fail SV2 handshake — fix NTP first.

9

Capture the failing handshake. `tcpdump -i any -w sv2-fail.pcap 'port 3336 or port 3337'` on proxy host. Trigger one miner reconnect. Stop capture. Open in Wireshark. SV2 noise XX starts non-printable; SV1 starts with `{`. SV1-style payload arriving on SV2 port = miner is misconfigured, not the proxy.

10

Roll the proxy version forward (or back). `apt-cache madison braiins-farm-proxy` to list available, or `docker pull braiinssystems/farm-proxy:<tag>`. Read the changelog at academy.braiins.com/en/farm-proxy/release-notes/ for handshake / noise / extranonce fixes. Roll forward; if forward breaks something, roll back one and read again.

11

Audit static-key pinning. Both ends must agree on proxy's static pubkey. Proxy: `cat /etc/braiins-farm-proxy/keys/proxy.pub`. Pool: log into pool dashboard, navigate to SV2 settings, find authorized-proxy-keys list, confirm proxy's pubkey is registered. If proxy was upgraded and regenerated keys, re-register. Same audit for downstream miners that pin proxy's key.

12

Update miner firmware to a known-SV2-stable build. DCENT_OS — D-Central's open-source Antminer firmware — is the Mining Hackers' choice for SV2 on Antminer fleets: native noise XX, current spec compliance, public source code, no licensing fees. Alternatives: Braiins OS+ >= 23.06, LuxOS >= 2024.1, recent Vnish. Whatsminer / Avalon / Bitaxe / NerdMiner: use those families' native SV2-capable builds. Stage one miner at a time, validate shares, then bulk-flash.

13

Switch the proxy from native to translator mode (or vice versa) as a one-shot test. Native upstream against SV1-only pool = handshake fails — flip to translator. Translator against native-SV2 pool = leaves JD/extranonce features on the table — flip to native. Restart, watch log, watch hashrate. Either is valid; the right one depends on what the pool actually supports.

14

Profile the proxy under cutover load. `ps aux | grep farm-proxy` and watch RSS as you re-introduce miners in batches. RSS climbing >50 MB/min as you add miners = memory-leak-on-handshake bug, typically a malformed-frame parse loop. File a GitHub issue at github.com/stratum-mining/stratum with the packet capture from Step 9 attached.

15

Stop DIY. Mixed-fleet farm with >50 miners, SV2 cutover stuck >24 hours, AND you've isolated to `noise handshake fails on a subset of miners we can't identify`. Or you're deploying JD-Server-on-a-Bitcoin-node SV2 for full job-declaration sovereignty. Either way you're in operator-engineering territory — book a D-Central Mining Consulting slot.

16

What D-Central does on the consulting bench: lab-bench reproduce of your farm topology (proxy version, upstream pool, miner firmware mix), packet-capture analysis of every failing handshake leg, recommended config diff with rollback plan, optional staged on-site cutover with a Mining Hacker in the room, optional DCENT_OS flash-and-tune across the Antminer fleet, optional self-hosted JD-Server stand-up so the farm declares its own work end-to-end (max-decentralization config).

17

What we recommend for new farm builds: deploy DCENT_OS on every Antminer-class miner from day zero, stand up Braiins Farm Proxy in dual-listener mode (SV1 on `:3333` for legacy, SV2 on `:3336` for everything else), upstream to Braiins Pool or your own self-hosted SV2 endpoint with JD enabled. 2026 Mining-Hackers-default farm topology — open-source firmware, open-source proxy, end-to-end SV2 with optional self-declared work.

18

Document the rollback before you cut over. Save the working SV1 config to `/etc/braiins-farm-proxy/farm-proxy.toml.sv1-baseline`. Write a one-line `rollback.sh`: `cp farm-proxy.toml.sv1-baseline farm-proxy.toml && systemctl restart braiins-farm-proxy`. Test rollback during a low-traffic hour BEFORE the production cutover. SV2 cutovers without a tested rollback are how operators end up calling D-Central at 2 AM.

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.