| ADDRESS | LOCATION | PING | STATUS | DIR |
| node.btx.tools:19335 | Santa Clara, United States | 151 ms | near-tip | out |
| 146.190.179.86:19335 | Frankfurt am Main, Germany | 242 ms | near-tip | out |
| 206.189.253.106:19335 | North Bergen, United States | 218 ms | near-tip | out |
| 173.249.52.142:19335 | Lauterbourg, France | 247 ms | near-tip | out |
| 84.32.49.226:19335 | Stockholm, Sweden | 275 ms | near-tip | out |
| 58.164.17.122:19335 | Sydney, Australia | 19 ms | near-tip | out |
| 51.210.241.130:19335 | Strasbourg, France | 292 ms | near-tip | out |
| 142.132.197.25:43804 | Falkenstein, Germany | 252 ms | behind | in |
| 142.180.205.149:51324 | Toronto, Canada | 274 ms | behind | in |
| 89.149.220.137:19335 | ? | 274 ms | near-tip | out |
| 144.6.236.38:57129 | ? | 13 ms | behind | in |
| 46.101.240.240:19335 | ? | 243 ms | near-tip | out |
| 141.105.65.144:35368 | ? | 315 ms | behind | in |
| 149.28.34.122:19335 | ? | 274 ms | near-tip | out |
| 104.233.161.130:19335 | ? | 1767 ms | near-tip | out |
| 179.184.38.19:49986 | ? | 381 ms | behind | in |
| 82.62.207.65:58958 | ? | 258 ms | behind | in |
| 152.53.240.222:19335 | ? | 232 ms | near-tip | out |
| 76.105.205.21:52785 | ? | 187 ms | behind | in |
| 134.215.62.166:54620 | ? | 198 ms | behind | in |
| 86.96.19.11:63926 | ? | 177 ms | behind | in |
| 170.64.203.192:34940 | ? | 5 ms | behind | in |
| 203.33.163.12:19335 | ? | 25 ms | near-tip | out |
| 154.26.159.186:44014 | ? | 93 ms | behind | in |
| 220.253.139.74:50481 | ? | 22 ms | behind | in |
| 91.199.137.209:19335 | ? | 281 ms | near-tip | out |
| 175.138.156.212:50886 | ? | 108 ms | behind | in |
| 168.144.165.255:19335 | ? | 1 ms | near-tip | out |
| 152.42.255.73:19335 | ? | 94 ms | near-tip | out |
| 195.91.14.178:14714 | ? | 378 ms | behind | in |
| 42.60.25.116:55094 | ? | 244 ms | behind | in |
| 65.181.14.102:25482 | ? | 21 ms | behind | in |
| 15.235.234.235:19335 | ? | 96 ms | near-tip | out |
| 172.59.120.36:52195 | ? | 328 ms | behind | in |
| 43.230.96.113:1541 | ? | 191 ms | behind | in |
| 100.64.0.174:47392 | ? | 2 ms | behind | in |
| 74.244.145.57:42514 | ? | 322 ms | syncing | in |
| 102.36.15.162:56585 | ? | 327 ms | syncing | in |
| 103.186.63.183:62162 | ? | 131 ms | syncing | in |
| 210.239.9.101:60586 | ? | 40011 ms | syncing | in |
| HEIGHT | STATUS | MINER | REWARD | WHEN |
|---|
| STATUS | Rank | WORKER | ACCEPTED WORK | CREDITED WORK | GPU% avg | GPU% raw | RAW SUBMIT/s | REPORTED RATE | LAST SHARE | REJECTS | BALANCE (sats) |
|---|
Paste your BTX payout address, your address.worker string, or just a worker name to see only your own rig's data. Other miners are hidden. All lookups happen in your browser — nothing is sent to the pool beyond the existing dashboard poll. Address and txid links go to explorer.btxbyronbay.com.
| Blocks/day ↓ | Net 1× | Net 2× | Net 5× |
|---|
Self-heal in plain language. If your GPU briefly drops to ~0% then recovers on its own, that's the watchdog respawning a stuck solver — no action needed. Just wait ~20 s.
Self-heal watchdog (continuous-mode rigs). Recent byron-miner builds run a built-in
liveness watchdog (default ON). If the solver signals ready but makes no GPU progress
within --watchdog-secs (default 20 s) — the classic CUDA stop-then-relaunch swap-race where
GPU% sits at 0 while the process looks alive — the watchdog kills and respawns the solver automatically.
A brief 0% GPU dip that recovers on its own within ~20 s is the watchdog working; no manual restart needed.
It quick-retries up to --watchdog-max-retries (default 4) times,
then backs off ~30 s so a genuinely unavailable GPU doesn't thrash. Caveats: the watchdog only covers the
continuous solver path — one-result rigs and Mac/Metal rigs have no watchdog arm, and it
does not rescue a network-unreachable or stale-job rig (those still need the recipes below). Set
--watchdog-secs 0 to disable (not recommended in production). Only intervene manually if the 0% state
persists past ~30 s (watchdog hit its retry cap) or you're on a one-result/Mac rig.
Pressing [Q] only closes the menu — your miner keeps mining in the background.
To bring the menu back you do not need the install URL again; run the local saved copy:
# Linux: bash ~/.byron/byron.sh # Mac: bash ~/.byron/byron-mac.sh # Windows (PowerShell): & "$env:USERPROFILE\.byron\byron.ps1"
The menu also exposes [P] Payouts (this rig's earnings & payout
history) and the always-on local [W] cockpit (see the next panel).
The menu's [W] action opens a local cockpit for this rig at
http://127.0.0.1:476xx (a port in the 476xx range, printed when it starts). It is
loopback-only — it serves only to this machine, needs no internet, and exposes nothing to the network.
It is live the moment it opens and persists after you quit the menu with [Q], so you can
leave it running in a browser tab. Available on Mac and Windows today; Linux is coming.
Rigs auto-update hourly. To force an update now, use menu [1] Install / Update (on
Windows: byron.ps1 -Update). An upgrade is a ~few-second mining blip and is auto-reverting
— if the new build doesn't start healthy the rig rolls back to the previous one. Downloads come from Cloudflare.
1) Install / re-install — runs the menu, then press [0] first-time setup:
# Linux bash <(curl -fsSL https://btxbyronbay.com/dl/byron.sh) # macOS bash <(curl -fsSL https://btxbyronbay.com/dl/byron-mac.sh) # Windows (PowerShell) irm https://btxbyronbay.com/dl/byron.ps1 | iex
The Windows, Linux, and macOS menu installers are all live now.
# Linux BYRON_BASE_URL=https://btxbyronbay.com/dl/staging bash <(curl -fsSL https://btxbyronbay.com/dl/staging/byron.sh) # macOS BYRON_BASE_URL=https://btxbyronbay.com/dl/staging bash <(curl -fsSL https://btxbyronbay.com/dl/staging/byron-mac.sh) # Windows (PowerShell) $env:BYRON_BASE_URL="https://btxbyronbay.com/dl/staging"; irm "https://btxbyronbay.com/dl/staging/byron.ps1" | iex
Prerelease = for testing with the operator. Auto-update tracks GOLDEN, so a staging rig reverts on its next hourly update unless auto-update is paused.
2) Update now (manual) — or just press [1] Install / Update in the menu:
# Linux / macOS curl -fsS https://btxbyronbay.com/dl/byron-updater.sh | bash # Windows (PowerShell) & "$env:USERPROFILE\.byron\byron.ps1" -Update
3) Does my rig auto-update? Yes — every platform updates itself hourly:
| PLATFORM | AUTO-UPDATE | MECHANISM |
| Linux (systemd) | yes · hourly | systemd timer → byron-updater.sh |
| macOS (launchd) | yes · hourly | launchd timer → byron-updater.sh |
| Windows | yes · hourly | Scheduled Task ByronUpdate |
| CUDA (tmux, no systemd/cron) | yes · hourly | detached background loop (re-arms on login after a pod restart) |
Auto-update pulls the latest binaries from Cloudflare hourly — SHA-verified and auto-reverting if a build does not start healthy. The menu script itself refreshes only on re-install or [1]. Each rig in the MINERS table shows a 🔄 auto / manual badge.
Force an update now — if a rig is not auto-updating, push the latest build immediately.
The easiest way is menu [1] Install / Update; the equivalent paste-in command per OS:
# Linux / macOS (or press [1] Install / Update in the menu): curl -fsS https://btxbyronbay.com/dl/byron-updater.sh | bash # Windows (PowerShell) (or press [1] in the menu): & "$env:USERPROFILE\.byron\byron.ps1" -Update
Rigs normally auto-update hourly — this just forces it now. Downloads come from Cloudflare; the miner restart is a ~few-second blip.
Back out an update — if a new build misbehaves. First: updates are auto-reverting — if a new binary does not start healthy within ~30–60 s the updater automatically rolls back to the previous one, so usually no action is needed. To roll back by hand, restore the pre-update backup the updater saved:
# Linux / macOS (restore the previous binary, then restart): cp -f ~/byron/byron-miner.bak-pre-update-* ~/byron/byron-miner # ...and the matching solver too, only if the solver also changed: cp -f ~/byron/byron-solve2.bak-pre-update-* ~/byron/byron-solve2 # then in the menu: [5] Stop, then [4] Start (or restart the service) # Windows: use [U] (revert) in the menu, or restore the backup by hand: copy /Y "%USERPROFILE%\.byron\byron-miner.exe.bak-pre-watchdog" "%USERPROFILE%\.byron\byron-miner.exe" # then restart the miner
The updater also prints the exact cp revert command at the end of every run.
If you are unsure, the operator can roll the whole fleet back from the server — contact the operator.
Read your row above: if GPU% avg > 0 but MATMUL/s = 0
and LAST SHARE keeps climbing while ● live stays on,
something other than byron-solve is using your GPU. Almost always a solo mining loop that restarted.
Quick orientation:
byron-miner + byron-solve = the pool miner;
btxd alone = your BTX node, not solo mining (safe to leave);
live-mining-loop.sh or btx-cli ... generatetoaddress = a solo mining loop (what to stop).
# 1) See what is running: ps auxww | grep -iE 'byron-miner|byron-solve|live-mining-loop|generatetoaddress|btxd' | grep -v grep # 2) Stop the solo loop: pkill -f 'btx-cli .*generatetoaddress' pkill -f 'live-mining-loop.sh' # 3) Disable it at login (find a matching LaunchAgent, then bootout + rename): grep -RIlE 'live-mining-loop|generatetoaddress|btx-cli' ~/Library/LaunchAgents 2>/dev/null PLIST="$HOME/Library/LaunchAgents/com.btx.mining.plist" LABEL="$(basename "$PLIST" .plist)" launchctl bootout "gui/$(id -u)/$LABEL" 2>/dev/null mv "$PLIST" "$PLIST.disabled-by-byron-pool" # Re-enable later: mv "$PLIST.disabled-by-byron-pool" "$PLIST" launchctl bootstrap "gui/$(id -u)" "$PLIST"
# 1) See what is running: pgrep -af 'byron-miner|byron-solve|btxd|btx-cli|generatetoaddress|cpuminer|ccminer|t-rex|lolminer|xmrig|gminer' # 2) Stop the solo loop: pkill -f 'btx-cli .*generatetoaddress' pkill -f 'live-mining-loop.sh' # 3) Disable a matching systemd unit (substitute the real unit name): systemctl list-units --type=service | grep -iE 'btx|mining' sudo systemctl stop <UNIT> sudo systemctl disable <UNIT> # Re-enable later: sudo systemctl enable --now <UNIT>
btxd stays running throughout — the recipe only stops solo mining, never the node.
Full copy-paste version (with section headings + reasoning) lives on the public page:
/dl/ → TROUBLESHOOTING.
After running step 2, MATMUL/s on your row should climb from 0 to its normal range within ~30 s; if it stays at 0, the solver itself may be wedged. On a recent continuous build the self-heal watchdog (see the panel at the top of this tab) respawns a 0%-GPU solver automatically within ~20 s, so wait first; only if it is still 0 after ~30 s (or you are on a one-result / Mac rig with no watchdog) run pkill -f byron-miner and your installer-installed agent will respawn it cleanly.
If a Mac rig's REPORTED RATE looks low for its chip class, or you want
to A/B a setting (--gpu-inputs, --solver-threads, --batch-size,
--prepare-workers, --slice-seconds) without re-running the full installer,
send the miner one of these one-liners:
# Flip GPU inputs ON (operator-measured on M4 Max; M4 base = unmeasured tune): curl -fsS https://btxbyronbay.com/dl/retune-mac.sh | bash -s -- --gpu-inputs 1 # Bump batch size: curl -fsS https://btxbyronbay.com/dl/retune-mac.sh | bash -s -- --batch-size 32 # More solver threads (> 6 risks a Metal hang): curl -fsS https://btxbyronbay.com/dl/retune-mac.sh | bash -s -- --solver-threads 6
Reads the running byron-miner's command line, swaps
one flag value (must already be present — tunes, doesn't add), pkills byron-miner +
byron-solve (never btxd), restarts via the same tmux session, and waits ≤20 s for the
solver-ready log line. On hang or failure it prints the exact revert one-liner. Source:
/dl/retune-mac.sh
(SHA256SUMS-listed). Linux/CUDA equivalent shipped 2026-06-01 as
/dl/retune-cuda.sh —
see the Optimization view's "Quick Action — CUDA Retune" subsection.
CUDA here means Linux + NVIDIA + byron-miner CUDA backend. This is
not for Mac/Metal rigs — use /dl/retune-mac.sh on Apple Silicon.
/dl/retune-cuda.sh shipped 2026-06-01 as the Linux/NVIDIA counterpart to
retune-mac.sh. It is a parameter retune tool, not an installer — it does not download
binaries and does not change the solver backend. Single-knob retune; reads cmdline + env from
/proc/PID/{cmdline,environ}; auto-detects layout (Runpod-style /workspace/byron-pool-rig +
supervise.sh OR vanilla ~/byron + tmux); edits the right persistence file
(miner.env or tune.conf); pkills only byron-miner +
byron-solve(2) (never btxd); generates a timestamped rollback script next to the rig dir
on every apply.
Supported knobs: --batch-size, --prepare-workers,
--solver-threads, --gpu-inputs, --slice-seconds, --slice-nonces.
Refuses --solver-backend and points operators at /dl/apply-continuous.sh — backend or
binary-aware changes belong there, not here.
If the rig is on btx-gbt-solve fallback (Pascal/Turing/older Ampere/Hopper
— archs where byron-solve2 isn't built native), retune-cuda.sh will not convert it to continuous. The
btx-gbt-solve binary has no --continuous mode; the script can only retune its existing knobs.
Full inspect / dry-run / apply commands live on the Optimization view under "Quick Action — CUDA Retune". Rigs in scope: every CUDA box on the pool (runpod-1 RTX 5090, runpod-2 RTX 4090, RunpodA4500 Ampere — both Runpod-style + vanilla layouts validated).
NODE LINK tracks the age of the most recent successful getblocktemplate RPC call from the pool's
internal job_pump (which polls every 10s). Green when <30s old, amber 30-90s, red >90s.
The sub-line shows rpc_error_count_session — cumulative RPC failures since the pool process started.
Red here usually means btxd is down, the cookie auth path is broken, or there's a network partition between the
pool box and the BTX node.
JOB ENGINE tracks how long since the pool broadcast a clean=true mining.notify — i.e. when a
new block was last detected on the chain. Green <5 min (well within BTX's ~2 min target block time), amber 5-15 min,
red >15 min. Sub-line shows the current job_id. Red usually means the chain is stuck or the job_pump
task has stalled; cross-check NODE LINK to disambiguate.
COINBASE READY is a boolean: green ● yes when the current job's coinbase script has resolved (block submission
is enabled), red ● NO when it hasn't (found blocks will be detected but won't be assembled and submitted to btxd).
Red here means the operator should check the coinbase_address in pool.toml — either it's
unset or btxd's validateaddress rejected it.
Green ≥99%, amber 97-99%, red <97%. The metric is accepted ÷ (accepted + rejected) over the
current pool session (resets on every pool restart). Rejects are mostly stale shares from a small set of contention-affected
rigs, so the pool-wide rate is dominated by the worst offenders. If this drops below 97% during normal operation, drill into
the MINERS view and look at the REJECTS column to identify which worker is producing the bursts.
The pool rejects shares for four reasons (all logged at DEBUG level in journalctl -u byron-pool with
note=<reason>):
stale share — the share's job is no longer current (a new block was found and the pool moved on). Most common reject class on rigs with network jitter or GPU contention. Bursty pattern: e.g. 9 shares in 200ms all for the same old job.
duplicate — the share's fingerprint matches one the pool already credited. Indicates a buggy or replaying miner; very rare on byron-miner. Single hits, not bursts.
digest above share_target — the miner submitted a nonce whose recomputed digest doesn't actually meet the pool's share target. Indicates either a buggy verifier on the rig OR a corrupted nonce in transit. Investigate if it's more than ~1 per 10k shares.
malformed/structural — the submit message itself was invalid (bad job_id, bad nonce hex, wrong arity). Indicates a protocol bug. Should be zero in steady state.
Restart a rig's miner without touching the system (Linux/CUDA, has supervise.sh):
pkill -x byron-miner # supervise.sh respawns within ~30s
Retune a Mac knob without re-onboarding:
curl -fsS https://btxbyronbay.com/dl/retune-mac.sh | bash -s -- --gpu-inputs 1
Move a rig from one-result to continuous mode:
curl -fsS https://btxbyronbay.com/dl/apply-continuous.sh | bash
(Requires the rig's running cmdline to already have the Step-B flagship knobs: --gpu-inputs 1,
--batch-size 512, --solver-threads 8, --prepare-workers >0. Otherwise the script
aborts with a clear error.)
Check what your rig is doing:
tail -f ~/byron-miner.log # apply-continuous's log path tail -f /workspace/byron-pool-rig/miner.log # Runpod supervise.sh path journalctl -u byron-pool -f # pool-side, requires SSH to pool box
Rollback apply-continuous on a rig:
bash /workspace/byron-pool-rig/rollback-continuous.sh # or wherever rig dir is
Only pool-accepted shares count. The pool runs PPLNS (Pay-Per-Last-N-Shares): when btxd accepts a block we submit, the full block reward (minus the pool fee, default 1.5%) is split across the last N accepted shares in the rolling window, weighted by who submitted them. The window size is shown as PPLNS WINDOW on Overview.
Rejects don't dock your balance — they're observability only. Submitting more rejects just means your rig burned compute that didn't translate into PPLNS weight.
Three different tools for three different jobs — do not cross-run them between platforms:
byron-solve on Metal): use
/dl/retune-mac.sh for parameter retunes.byron-solve2 or btx-gbt-solve on Linux): use
/dl/retune-cuda.sh for parameter retunes. This is a parameter retune tool, not an installer — it
does not change binaries or solver backend./dl/install.sh (clean install / re-install with current default pins) or
/dl/apply-continuous.sh (legacy upgrade helper that swaps in .continuous binaries on
top of an existing install). Which one depends on rollout stage: post-Phase 2e, install.sh ships
continuous-capable binaries by default, so re-running it is the canonical upgrade path.Running the wrong tool on a platform doesn't silently work — the scripts refuse cross-platform invocations:
retune-cuda.sh refuses on macOS with a pointer at retune-mac.sh, and
retune-mac.sh only runs from a Darwin shell. apply-continuous.sh validates the rig's existing
cmdline and refuses if Step-B flagship knobs aren't present.
ACCEPTED MATMUL/s is share-derived: your_share_rate × (2^256 / share_target). It's
pool-verified (the pool recomputes every accepted share's digest from the nonce) and is the
payout-trusted contribution metric. Goes to 0 during a single rig's normal share gap (because
share_rate is a 5-min EMA and short-tailed at small share counts).
REPORTED RATE is whatever the rig's solver says it's doing — raw nonces examined per second,
EMA-smoothed. The pool cannot verify this value. Units depend on the solver (nonce/s for
byron-solve and byron-solve2; unknown/s for btx-gbt-solve
or older clients). NEVER used for payouts — it's a health indicator only.
See the reject-class breakdown under Troubleshooting. Tl;dr: the dominant reject class on this pool today is stale shares — the rig submitted work for a block that's already been superseded. Almost always caused by either GPU contention (something else is sharing your GPU) or network jitter (notify→cancel→submit round-trip is too slow to keep up with the chain).
Short 0% dips that recover on their own (within ~20 s) are normal — it's the self-heal watchdog. → see Troubleshooting → GPU 0% self-heal for the full explanation.
OWED and PAID are for your WHOLE WALLET — the sum of every worker mining to your payout address — while the PROJECTION below them is for this rig only. One wallet can power many rigs, so on a shared address the wallet-level owed/paid will look much larger than a single rig's projection. On the dashboard's #/myrig view use the "show combined for all N workers" toggle to make the projection match the wallet scope.
Three places: the menu's [P] Payouts screen (earnings + payout history for this rig), the always-on
local [W] cockpit (http://127.0.0.1:476xx, loopback-only), and the public dashboard's
#/myrig view.
No. [Q] only closes the menu; the miner keeps running. Re-open the menu from the local saved
copy without the install URL: Linux bash ~/.byron/byron.sh, Mac bash ~/.byron/byron-mac.sh,
Windows (PowerShell) & "$env:USERPROFILE\.byron\byron.ps1".
An always-on local, loopback-only dashboard for this rig (http://127.0.0.1:476xx).
→ see Troubleshooting → Local [W] cockpit for details.
Rigs auto-update hourly; force one via menu [1] Install / Update. Upgrades are a ~few-second blip and auto-reverting.
→ see Troubleshooting → How updating works for details.
A brief lighthouse welcome screen the menu shows on launch. Suppress it with BYRON_NO_SPLASH=1 (or
-NoSplash on Windows).
When a new BTX block is found anywhere on the network, the pool detects it on its next 10s poll and sends every
connected miner a mining.notify with clean_jobs=true. Your solver should immediately cancel
its current work and start on the new job. Any shares still in flight for the old job will be rejected as stale.
BTX target block time is ~2 min, so clean jobs arrive every ~2 min on average. The pool also sends
keepalive clean_jobs=false notifies every ~45s to surface dead connections.
The pool's solver (byron-solve2) can run in two modes: one-result (default, the legacy path) and
continuous (Phase 2c v2+, behind --solver-backend continuous).
In one-result mode the solver spawns a fresh process for every share slice. That has per-spawn overhead and GPU warmup cost on each cycle. In continuous mode the solver runs as a long-lived daemon, accepting jobs over stdin and emitting shares + progress events over stdout. No per-share spawn cost; smoother throughput; the share-rate EMA reads steadier.
Continuous mode requires a continuous-capable byron-miner + byron-solve2 (the current
golden pins on /dl/ — check
/dl/SHA256SUMS for the exact shas; do not rely on a sha quoted here) and the byron-miner's
ContinuousDaemon adapter. The Mac solver (byron-solve) does NOT have a continuous arm yet
— macOS rigs always run one-result. Linux/CUDA rigs get continuous by default from a fresh
install.sh (Phase 2e); older installs can opt in via apply-continuous.sh.
/dl/install.sh is the bootstrap installer. Downloads binaries to the rig's current directory,
runs the platform's join-pool*.sh launcher, brings up Tailscale via a Headscale preauth key, and starts
the miner under whatever supervisor pattern is appropriate (Runpod supervise.sh, macOS launchd, etc.). This is what
every new rig runs.
As of Phase 2e, install.sh installs continuous-capable binaries by default on CUDA rigs
— so for an existing rig the canonical upgrade path is simply to re-run install.sh (it pulls
the current golden pins from /dl/SHA256SUMS). The legacy /dl/apply-continuous.sh
helper still exists for older installs: run on top of an install.sh-installed rig, it swaps in the
.continuous binaries (sha-verified), preserves your BTX_MATMUL_* env, and relaunches with
--solver-backend continuous appended, generating a one-line rollback recipe next to the binary.
(Historically install.sh shipped one-result binaries and apply-continuous.sh was the only path to continuous; Phase 2e folded continuous into the default install, so the second step is no longer required for fresh installs.)
This page lists operator-run commands and source-backed tuning knobs only. The dashboard does not execute
anything on your behalf — every command below is a manual copy-paste. Knob defaults and platform profiles below
are read directly from scripts/join-pool.sh, scripts/join-pool-mac.sh,
scripts/retune-mac.sh, scripts/apply-continuous.sh, byron-miner/src/cli.rs,
byron-miner/src/solver.rs and byron-solve/byron-solve2.cpp — not guessed.
Always inspect scripts before running. Pipe through less first; pipe through bash
once you've read it.
Change one knob at a time, watch the rig for 5–10 min, decide keep or revert. Multi-knob changes confound the result.
Some changes are canary / non-persistent and may revert on container restart or full re-install.
Purpose: flip a single Metal-tuning knob on a running Mac rig and restart, without re-running the full installer.
Script: /dl/retune-mac.sh
Inspect command:
curl -fsS https://btxbyronbay.com/dl/retune-mac.sh | less
Example apply command:
curl -fsS https://btxbyronbay.com/dl/retune-mac.sh | bash -s -- --gpu-inputs 1
Supported knobs: --gpu-inputs, --solver-threads, --batch-size,
--prepare-workers, --slice-seconds. Single-variable contract — to change multiple
knobs, run once per knob.
Persistence: the running tmux session and ~/byron-miner.log get the new value immediately;
on Mac reboot the LaunchAgent or operator-installed start path may revert. Re-run after reboot if needed.
Use when: a Mac rig's REPORTED RATE / ACCEPTED MATMUL/s looks low for its chip class, or operator wants to A/B a single value.
Purpose: switch one NVIDIA rig from the default one-result solver path to the Phase 2c continuous path (long-lived solver session, streamed shares, stdin-cancel).
Script: /dl/apply-continuous.sh
Inspect command:
curl -fsS https://btxbyronbay.com/dl/apply-continuous.sh | less
Apply command:
curl -fsS https://btxbyronbay.com/dl/apply-continuous.sh | bash
Refuses to run unless the current cmdline already has the Step-B flagship knobs:
--solver-backend continuous --batch-size 512 --prepare-workers 16 --solver-threads 8 --gpu-inputs 1
Ampere-workstation (sm_86 / A4500) rigs use a smaller profile by default and need a manual relaunch with the flagship knobs first — this script will refuse otherwise.
Persistence: this canary helper predates Phase 2e. As of Phase 2e, /dl/install.sh ships
continuous-capable binaries by default on CUDA rigs, so for a fresh/re-run install you no longer need this step —
re-running install.sh is the canonical path. Use this helper only to flip an older install in
place; it remains canary / non-persistent across a container rebuild that re-runs the old launch path, so re-apply
after such a rebuild.
Warning: run one rig at a time; paste back the stage-complete output block and a tail -30 of
the rig's miner log so we can confirm a clean start.
Linux/NVIDIA CUDA rigs only. Tunes an already-installed CUDA rig's launch parameters
without reinstalling or changing binaries. retune-cuda.sh is a parameter retune tool, not an
installer — it does not download binaries, does not change the solver backend, and does not make
btx-gbt-solve continuous. It only changes supported knobs that are already present in the current
byron-miner command line.
Do not run on Mac/Metal rigs. Use /dl/retune-mac.sh for Apple Silicon.
Script: /dl/retune-cuda.sh
Inspect command:
curl -fsSL https://btxbyronbay.com/dl/retune-cuda.sh | less
Help command:
curl -fsSL https://btxbyronbay.com/dl/retune-cuda.sh | bash -s -- --help
Dry-run example:
curl -fsSL https://btxbyronbay.com/dl/retune-cuda.sh | bash -s -- --dry-run --prepare-workers 16
Apply example:
curl -fsSL https://btxbyronbay.com/dl/retune-cuda.sh | bash -s -- --prepare-workers 16
Supported knobs (one per invocation):
--batch-size --prepare-workers --solver-threads --gpu-inputs --slice-seconds --slice-nonces (only if already present in the current cmdline)
About --slice-nonces: Only tunable if --slice-nonces is already present in the current
command line; most installs use the miner default and omit it, in which case the script refuses with
"not present in current cmdline — can't tune what isn't set already." To add the flag for the first time,
re-run join-pool.sh with it explicitly.
Persistence: auto-detects layout. On Runpod-style rigs (active supervise.sh) it edits
miner.env and lets supervise.sh respawn the miner; on vanilla install.sh rigs (~/byron/ +
tmux) it edits tune.conf and relaunches the tmux session. Generates timestamped
rollback-retune-cuda-<TS>.sh next to the rig directory on every apply — never overwrites a prior
rollback.
Warnings:
--dry-run first./dl/apply-continuous.sh instead. Specifically: this script does not make btx-gbt-solve continuous;
btx-gbt-solve has no --continuous mode and the script refuses --solver-backend regardless of
which solver basename is in use./dl/retune-mac.sh for Apple Silicon. This script is not for
Mac/Metal.| Knob | Where set | What it changes | Safe start | When to ↑ | When to ↓ | Persistence | Example |
|---|---|---|---|---|---|---|---|
--gpu-inputs |
byron-miner CLI; env BTX_MATMUL_GPU_INPUTS |
0 = CPU prepares solver inputs; 1 = GPU prepares them (Apple-Silicon performance path) | 1 on M4 Max/Ultra; 0 elsewhere (conservative-apple-silicon profile) | Try 1 on unmeasured chips (M1/M2/M3 base, M3/M4 Pro) to A/B | Revert to 0 if shares reject or rate drops | retune-mac.sh edits running cmd; reboot may revert | bash -s -- --gpu-inputs 1 |
--solver-threads |
byron-miner CLI; env BTX_MATMUL_SOLVER_THREADS |
Metal solver worker threads inside byron-solve | 6 (M4 Max/Ultra) / 4 (conservative) | DO NOT raise above 6 — observed multi-minute Metal hang at 8 on production M4 Max | Drop to 4 if hangs or persistent Metal-degraded state appear | retune-mac.sh; reboot may revert | bash -s -- --solver-threads 6 |
--prepare-workers |
byron-miner CLI; env BTX_MATMUL_PREPARE_WORKERS |
CPU-side workers preparing solver input batches | 8 (M4 Max/Ultra) / 4 (conservative) | Raise if matmul is GPU-bound and CPU has free cores | Drop if CPU saturated; oversubscription past physical cores starves the GPU | retune-mac.sh; reboot may revert | bash -s -- --prepare-workers 8 |
--batch-size |
byron-miner CLI; env BTX_MATMUL_SOLVE_BATCH_SIZE |
Solver matmul batch size (nonces per kernel launch) | 32 (M4 Max/Ultra) / 16 (conservative) | Try larger only if GPU% is high AND rate has plateaued | Drop if you see Metal command-buffer pressure | retune-mac.sh; reboot may revert | bash -s -- --batch-size 32 |
--slice-seconds |
byron-miner CLI | Seconds per solver slice before re-checking the job | 5 | Raise for better GPU saturation between job changes | Lower if you see stale-share rejects on clean-job boundaries | retune-mac.sh; reboot may revert | bash -s -- --slice-seconds 5 |
BTX_MATMUL_METAL_POOL_SLOTS |
env (set by join-pool-mac.sh; no CLI flag) | Metal command-buffer parallelism inside btx core | 8 (M4 Max/Ultra) / 4 (conservative) | Operator-measured only — no safe ceiling published | Drop if Metal command-buffer pressure appears | Re-export in launch env; retune-mac.sh preserves it from the running process | set in launch env, not CLI |
BTX_MATMUL_CPU_CONFIRM |
env (set by join-pool-mac.sh; no CLI flag) | 0 = skip in-solver CPU re-verification (pool re-verifies anyway); 1 = redundant CPU check | 0 — pool re-verifies every share, so this is wasted cost | Do not raise | Already 0 | Re-export in launch env; retune-mac.sh preserves it from the running process | set in launch env, not CLI |
Source: scripts/join-pool-mac.sh (profile selection, env exports), scripts/retune-mac.sh (single-knob edit), byron-miner/src/cli.rs (CLI arg parser).
| Knob | Where set | What it changes | Safe start | Encoded profile | When to ↑ | When to ↓ | Persistence |
|---|---|---|---|---|---|---|---|
--gpu-inputs |
byron-miner CLI; env BTX_MATMUL_GPU_INPUTS |
0 = CPU prepares inputs (the Pascal+ correctness fix); 1 = GPU prepares (Ada/Blackwell/A4500 native byron-solve2 path) | 1 on Ada/Blackwell + Ampere-workstation; 0 on the btx-gbt-solve reference fallback | 1 for sm_89, sm_120, sm_86 (native byron-solve2); 0 otherwise | Already 1 on native byron-solve2 archs | Drop to 0 if shares reject after a binary swap | ~/byron/tune.conf + miner.env (supervise.sh re-sources every loop) |
--batch-size |
byron-miner CLI; env BTX_MATMUL_SOLVE_BATCH_SIZE |
Solver matmul batch size (nonces per kernel launch) | 512 flagship / 128 sm_86 / 128 stock fallback | 512 (sm_89, sm_120) · 128 (sm_86) · 128 (everything else) | Larger only if VRAM has headroom AND rate plateaus | Drop on OOM or kernel-launch failures | tune.conf + miner.env |
--prepare-workers |
byron-miner CLI; env BTX_MATMUL_PREPARE_WORKERS |
CPU workers preparing input batches (fed to GPU via PIPELINE_ASYNC) | 16 flagship / 8 sm_86 / PHYS-clamped (min 4, max 32) stock | 16 (sm_89, sm_120) · 8 (sm_86, A4500-proven) · PHYS-clamped otherwise | Raise if matmul is GPU-bound and CPU has cores free | Drop if oversubscribing past physical cores starves the GPU (see GPU contention diagnostic) | tune.conf + miner.env |
--solver-threads |
byron-miner CLI; env BTX_MATMUL_SOLVER_THREADS |
Solver worker threads inside byron-solve2 / btx-gbt-solve | 8 flagship / 4 sm_86 / 8 stock | 8 (sm_89, sm_120) · 4 (sm_86) · 8 (fallback) | Raise only after measuring CPU + GPU headroom | Drop on constrained-CPU + high-end-GPU rigs (see profile below) | tune.conf + miner.env |
--slice-seconds |
byron-miner CLI | Seconds per solver slice before re-checking the job (one-result mode) | 5 | 5 across all CUDA profiles | Higher = better GPU saturation between jobs | Lower = fewer stale shares on clean-job boundaries | tune.conf + miner.env |
--slice-nonces |
byron-miner CLI | Hard ceiling on nonces per slice (safety cap; slice-seconds usually binds first) | 20,000,000 (cli.rs default) | — | — | — | CLI only |
--watchdog-secs |
byron-miner CLI | Continuous-solver liveness self-heal: if the solver signals ready but makes no GPU progress within this many seconds (the CUDA stop-then-relaunch swap-race / 0%-GPU-but-alive case), kill + respawn it. Continuous mode only. | 20 (default; ON) | 20 everywhere (binary default; no script sets it) | Raise if a slow-starting solver trips it spuriously on a cold rig | Set 0 to DISABLE (not recommended — loses self-heal) |
CLI only (binary-defaulted; no tune.conf/miner.env entry today) |
--watchdog-max-retries |
byron-miner CLI | Max consecutive quick watchdog respawns before a longer (~30 s) cooldown, so a genuinely unavailable GPU doesn't thrash. | 4 (default) | 4 everywhere (binary default) | Raise on a flaky GPU that recovers after several respawns | Lower to cool down sooner on a hard-dead GPU | CLI only (binary-defaulted) |
--solver-backend continuous |
byron-miner CLI | Switches solver driver from one-result (default) to a long-lived solver session that streams shares and accepts stdin-cancel (Phase 2c). Requires a continuous-capable byron-solve2 binary. |
off (default = one-result). Opt-in via /dl/apply-continuous.sh |
continuous canary on runpod-1 (sm_120) + RunpodA4500 (sm_86); rest one-result | One rig at a time — never blanket-flip | Revert to one-result if reject rate climbs or solver wedges | Phase 2e install.sh now writes continuous into the default launch path, so a fresh install is persistent. On an OLDER install flipped via apply-continuous.sh it can be non-persistent across a Runpod container restart (supervise.sh respawns from a miner.env that omits the flag) — re-run install.sh to make it permanent |
--socks5 |
byron-miner CLI | SOCKS5 proxy for Stratum (used in containers without /dev/net/tun — Runpod, k8s) | auto-set by join-pool.sh to 127.0.0.1:1055 in userspace-Tailscale mode |
— | — | — | miner.env (Runpod) / launch env |
BTX_MATMUL_PIPELINE_ASYNC |
env (auto-set by byron-miner and byron-solve2 if unset) | Async pipeline: overlaps CPU input-prep with the matmul kernel (double-buffered submit/wait) | 1 (auto if unset) | 1 everywhere | Already 1 | Do not disable — would halve GPU utilization | env auto-set; operator can override by pinning in launch env |
BTX_MATMUL_PREPARE_PREFETCH_DEPTH |
env (auto-set by byron-miner and byron-solve2 if unset) | Depth of the CPU→GPU input queue. Keeps the GPU from stalling between batches. | 8 (auto if unset) | 8 everywhere | Mid-range cards may benefit from a deeper queue | Smaller if VRAM-constrained | env; override by pinning in launch env |
BTX_MINER_HEADER_TIME_REFRESH_ATTEMPTS |
env (auto-set to 4294967295 by byron-solve2) | Disables SolveMatMul's internal nTime refresh. CRITICAL: without this, shares reject because nTime drifts from the job's value before the pool re-verifies the digest. | 4294967295 (effectively never) | 4294967295 everywhere | Do not change | Do not change | env auto-set by byron-solve2; do not override |
Source: scripts/join-pool.sh (profile selection, tune.conf), scripts/apply-continuous.sh (continuous canary), scripts/rig-boot/supervise.sh (miner.env re-source loop), byron-miner/src/cli.rs (CLI arg parser), byron-miner/src/solver.rs (env forwarding), byron-solve/byron-solve2.cpp (env auto-set in main()).
| Profile | Applies to | --gpu-inputs | --batch-size | --prepare-workers | --solver-threads | Other | Source |
|---|---|---|---|---|---|---|---|
| fast-m4-max-ultra | Apple M4 Max + M4 Ultra ONLY | 1 | 32 | 8 | 6 (cap — >6 risks Metal hang) | POOL_SLOTS=8, CPU_CONFIRM=0, slice=5 | join-pool-mac.sh profile block |
| conservative-apple-silicon | Every other arm64 Apple chip (M1/M2/M3 all variants, M4 base/Pro, unknown new) | 0 | 16 | 4 | 4 | POOL_SLOTS=4, CPU_CONFIRM=0, slice=5 | join-pool-mac.sh profile block |
| flagship CUDA | Ada (sm_89: 4060Ti–4090) + Blackwell (sm_120: 5070–5090) — runpod-1 baseline | 1 | 512 | 16 | 8 | byron-solve2 native; daemon_ready smoke test | join-pool.sh flagship branch |
| Ampere workstation (A4500-proven) | sm_86 (A4500, 3060Ti–3090, A-series workstation) — RunpodA4500 baseline | 1 | 128 | 8 | 4 | byron-solve2 native; smoke test falls back to btx-gbt-solve on driver mismatch | join-pool.sh ampere-workstation branch |
| CUDA reference fallback | Pascal (6.1), Turing (7.5), older Ampere (8.0/8.7), Hopper (9.0), and anything where the native byron-solve2 smoke test failed | 0 (Pascal+ correctness fix) | 128 stock | PHYS-clamped (min 4, max 32, capped at physical cores) | 8 stock | btx-gbt-solve binary; safe known-good | join-pool.sh fallback branch |
| Constrained CPU + high-end GPU | operator-observed (e.g. WSL2-on-laptop 8 cores driving a 4090 — TeoRig2 pattern) | 1 | 512 or 256 | 4–6 (≤ physical cores) | 6–8 | Lower slice-seconds to 3; CPU input-prep is the bottleneck | operator-observed, verify before use |
Encoded profiles come directly from the installer scripts. "Constrained CPU + high-end GPU" is operator-observed only and should be tested rig-by-rig.
/dl/apply-continuous.sh generates local rollback scripts next to the rig install path. The exact
rollback path is printed by the script at the end of the apply output (e.g.
/workspace/byron-pool-rig/rollback-continuous.sh on Runpod-style rigs, or wherever the rig dir is).
Use the path the script gives you — do not guess.
/dl/retune-mac.sh: on a successful run it prints the exact one-liner to revert (the previous flag
value). On failure (solver did not signal ready within 20 s) it prints the same revert one-liner and exits
non-zero.
/dl/retune-cuda.sh: on each apply it backs up the persistence file
(miner.env on Runpod or tune.conf on vanilla) with a timestamped suffix and writes
rollback-retune-cuda-<TS>.sh next to the rig directory — never overwrites prior rollbacks. The
exact rollback path is printed at the end of every successful run AND at the start of every failure path. On
smoke-check failure (no solver daemon ready within 30 s) the script auto-invokes its own rollback
before exiting non-zero.
--gpu-inputs — 0|1 toggle for GPU-vs-CPU solver input preparation. 0 = CPU prepares (the
Pascal+ correctness fix; in-CPU input streams). 1 = GPU prepares (in-flight GPU input streams/buffers; the
Ada/Blackwell/sm_86/M4 Max performance path). Wrong setting per arch costs 2–5× throughput.
--batch-size — solver matmul batch size (nonces per kernel launch). Bigger = better GPU
saturation up to VRAM limits.
--prepare-workers — CPU-side workers preparing solver input batches. Installer clamps to
physical cores (oversubscribing thrashes the CPU and starves the GPU).
--solver-threads — solver worker threads inside the solver binary. Mac: hard cap at 6 (Metal
hang risk above). CUDA: 8 default with one exception (sm_86 A4500-proven at 4).
--slice-seconds — solver slice length in seconds. Higher = better GPU saturation; lower =
fewer stale shares on clean-job boundaries.
--slice-nonces — hard ceiling on nonces per slice. Safety cap; slice-seconds usually binds
first.
--watchdog-secs (default 20, ON) — continuous-solver self-heal. If the solver signals ready but
makes no GPU progress within this window (the CUDA stop-then-relaunch swap-race / 0%-GPU-but-alive case), the miner
kills + respawns it. Continuous mode only; one-result and Mac/Metal rigs have no watchdog arm. 0 disables
(don't, in production).
--watchdog-max-retries (default 4) — max quick watchdog respawns before a ~30 s cooldown, so a
genuinely unavailable GPU doesn't thrash.
--solver-backend continuous — switches the solver driver from one-result (the default) to
a long-lived solver session that streams shares and accepts stdin-cancel (Phase 2c). Requires a
continuous-capable byron-solve2 binary.
BTX_MATMUL_PIPELINE_ASYNC=1 (env, auto) — async pipeline overlapping CPU prep with the matmul
kernel.
BTX_MATMUL_PREPARE_PREFETCH_DEPTH=8 (env, auto) — depth of the CPU→GPU input queue.
BTX_MATMUL_METAL_POOL_SLOTS (env, Mac only) — Metal command-buffer parallelism inside btx
core.
BTX_MATMUL_CPU_CONFIRM=0 (env, Mac) — disable in-solver CPU re-verification (the pool
re-verifies every share).
BTX_MINER_HEADER_TIME_REFRESH_ATTEMPTS=4294967295 (env, auto-set by byron-solve2) — disables
internal nTime refresh. CRITICAL: without it, every share rejects because nTime drifts before pool re-verification.
Do not run these from the dashboard host unless you are intentionally tuning that host.
Run commands on the target rig only. Inspect first, run second.
Change one rig at a time. Change one knob at a time.
Watch ACCEPT RATE, REJECTS, ACCEPTED MATMUL/s, REPORTED RATE, GPU% (avg + raw) and POOL HEALTH after every change.
Higher REPORTED RATE is not useful if ACCEPT RATE drops — the pool only credits accepted shares.
Do NOT run Mac retune commands on CUDA rigs (they pkill byron-solve not byron-solve2,
and assume a tmux launch pattern).
Do NOT run CUDA canary commands on Mac rigs (they verify CUDA-specific cmdline knobs and download Linux-x86_64 binaries).
These tools do not change payouts directly; they only affect rig behavior.