connecting...
⛏ LATEST BLOCKS
— waiting for blocks —
[ TOTAL BTX PAID LIFETIME ]
ACCEPTED WORK
HEIGHT
-
SHARES
-
BLOCKS FOUND
-
MINERS ONLINE
-
PPLNS WINDOW
-
NODE LINK
JOB ENGINE
-
COINBASE READY
-
PEER HEALTH
PEERS
40
17 out / 23 in
SYNCED
36
reporting a tip
NEAR-TIP PEERS
17
guard ≥2
TIP GAP
+0
vs network
peer locations & latency (40)
ADDRESSLOCATIONPINGSTATUSDIR
node.btx.tools:19335Santa Clara, United States151 msnear-tipout
146.190.179.86:19335Frankfurt am Main, Germany242 msnear-tipout
206.189.253.106:19335North Bergen, United States218 msnear-tipout
173.249.52.142:19335Lauterbourg, France247 msnear-tipout
84.32.49.226:19335Stockholm, Sweden275 msnear-tipout
58.164.17.122:19335Sydney, Australia19 msnear-tipout
51.210.241.130:19335Strasbourg, France292 msnear-tipout
142.132.197.25:43804Falkenstein, Germany252 msbehindin
142.180.205.149:51324Toronto, Canada274 msbehindin
89.149.220.137:19335?274 msnear-tipout
144.6.236.38:57129?13 msbehindin
46.101.240.240:19335?243 msnear-tipout
141.105.65.144:35368?315 msbehindin
149.28.34.122:19335?274 msnear-tipout
104.233.161.130:19335?1767 msnear-tipout
179.184.38.19:49986?381 msbehindin
82.62.207.65:58958?258 msbehindin
152.53.240.222:19335?232 msnear-tipout
76.105.205.21:52785?187 msbehindin
134.215.62.166:54620?198 msbehindin
86.96.19.11:63926?177 msbehindin
170.64.203.192:34940?5 msbehindin
203.33.163.12:19335?25 msnear-tipout
154.26.159.186:44014?93 msbehindin
220.253.139.74:50481?22 msbehindin
91.199.137.209:19335?281 msnear-tipout
175.138.156.212:50886?108 msbehindin
168.144.165.255:19335?1 msnear-tipout
152.42.255.73:19335?94 msnear-tipout
195.91.14.178:14714?378 msbehindin
42.60.25.116:55094?244 msbehindin
65.181.14.102:25482?21 msbehindin
15.235.234.235:19335?96 msnear-tipout
172.59.120.36:52195?328 msbehindin
43.230.96.113:1541?191 msbehindin
100.64.0.174:47392?2 msbehindin
74.244.145.57:42514?322 mssyncingin
102.36.15.162:56585?327 mssyncingin
103.186.63.183:62162?131 mssyncingin
210.239.9.101:60586?40011 mssyncingin
BLOCKS (24H)
-
SHARES (24H)
-
WORKERS (24H)
-
POOL EFFORT
-
≈ approximate · under review
ACCEPT RATE · SESSION
-

Pool hashrate, live vs network share, expected-vs-actual blocks, and pool health → [ pool performance ]

[ MINERS AROUND THE WORLD ]

Where the pool's compute comes from — exact city for direct-connect miners + coarse relay region for tailnet miners, aggregated counts, anonymized (no worker · no wallet · no IP). Markers flare as miners submit shares; beams carry compute home to ⌂ Sydney.

[ POOL PERFORMANCE ]

POOL SHARE · LIVE
EXPECTED · /DAY
ACTUAL · 24H
MINERS ONLINE
RANGE

[ POOL SHARE OF NETWORK ]

pool hashrate ÷ network hashrate · this IS your per-block win probability

[ BLOCKS · ACTUAL vs EXPECTED ]

luck curve · solid = blocks actually found, dashed = statistically expected · above the dashed line = running lucky

[ BLOCKS PER DAY ]

how often the pool is winning blocks

[ MINERS ONLINE ]

fleet size over time

[ ACCEPT RATE ]

share of submitted work accepted · pool health

[ NETWORK HASHRATE ]

total power of the whole BTX network · the competition · this is the denominator of your pool share (real per-block difficulty lives on the explorer)

[ BLOCKS FOUND · LAST 24H ]

HEIGHTSTATUSMINERREWARDWHEN

[ LIVE · moves with the network · what's true right now ]

POOL HASHRATE · LIVE
-
NETWORK HASHRATE · LIVE
-

7-DAY TREND — valuation / network-strength basis, NOT "right now". Use LIVE above for what to expect now; use 1W for long-run valuation. Every share % divides pool ÷ network AT THE SAME WINDOW.
POOL HASHRATE · 1W
-
matmul/s
NETWORK HASHRATE · 1W
-
matmul/s
POOL SHARE · 1W
-
trend, not a forecast

[ BLOCKS & POOL HEALTH ]

BLOCKS FOUND
-
lifetime
MATURE
-
credited
ORPHANED
-
SHARES (24H)
-
pool throughput
ACCEPT RATE · SESSION
-

[ MINERS ]

⛏ LATEST BLOCKS
— waiting for blocks —
STATUSRankWORKERACCEPTED WORKCREDITED WORKGPU% avgGPU% rawRAW SUBMIT/sREPORTED RATELAST SHAREREJECTSBALANCE (sats)
ACCEPTED WORK is pool-verified and payout-trusted (difficulty-normalized accepted work, 30m window / live-5m while warming) — the contribution the pool pays on. CREDITED WORK = weighted PPLNS credit / raw submitted: under VarDiff a harder-target share counts as several credited shares, so a low submit count is NOT lower pay. RAW SUBMIT/s = raw share-submission rate, NOT the pay signal under VarDiff. REPORTED RATE is miner-reported health telemetry; units depend on solver/backend (nonce/s for byron-solve*; unknown/s for btx-gbt-solve or older clients) and are not used for payouts. ACCEPT RATE · SESSION (Overview) = accepted shares ÷ (accepted + rejected) since the last pool restart; operational health only, not used for payouts. NODE LINK / JOB ENGINE / COINBASE READY (Overview) = pool/node health signals derived from in-process state (no extra RPC calls); operational only, not used for payouts. GPU% avg = smoothed utilization; GPU% raw = instantaneous sample.

[ 🔍 FIND MY RIG ]

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.

Tip: an address can power multiple workers (one row per worker). Searching by address shows the first matching worker; click "Show all my workers" on the result card to list them all.
— enter an address or worker above to begin —

[ GROWTH CALC ]

How many more miners to hit N blocks/day — accounts for self-dilution and external network growth. Live figures come from this dashboard's own stats poll (no extra network call).
Pool Growth Calculator
Network self-adjusts to ~960 blocks/day; your share = your hashrate ÷ network. Adding miners also grows the network, so this accounts for self-dilution.
Network h/s
Pool h/s
Pool share
Current blk/day
Active miners
Avg per-miner
H/s each (prefilled = live fleet avg)
Waiting for pool stats…
Scenario grid — additional miners needed
Blocks/day ↓ Net 1×Net 2×Net 5×
Estimate. Block-finding is Poisson — actual daily counts vary widely around the average. "Miners" assumes each adds ~the current fleet-average hashrate; a 5090 counts as several M4s. Network hashrate is external and keeps changing.

[ HELP ]

Troubleshooting recipes, FAQ, and optimization / tuning tools — all in one place.

### TROUBLESHOOTING

GPU briefly dropped to 0%? On recent builds that is normal — the solver self-heals. Click to expand.

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.

Re-open the byron menu after pressing [Q]? (it only closed the menu — you're still mining) Click to expand.

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).

Local [W] cockpit — an always-on dashboard for this rig (no internet needed). Click to expand.

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.

How updating works (auto hourly; force it from the menu). Click to expand.

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.

Install & update — full commands by platform (open)

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.

Prerelease / testing channel (operator-coordinated) — click
# 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:

PLATFORMAUTO-UPDATEMECHANISM
Linux (systemd)yes · hourlysystemd timer → byron-updater.sh
macOS (launchd)yes · hourlylaunchd timer → byron-updater.sh
Windowsyes · hourlyScheduled Task ByronUpdate
CUDA (tmux, no systemd/cron)yes · hourlydetached 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 / roll back manually (paste-in commands). Click to expand.

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.

Slow miner? Solo loop competing for the GPU? Click to expand.

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).

macOS recipe
# 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"
Linux recipe
# 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.

Tune a Mac rig without re-onboarding? (single-knob retune via /dl/retune-mac.sh) Click to expand.

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.

Tune a Linux / NVIDIA CUDA rig without re-onboarding? (shipped as /dl/retune-cuda.sh) Click to expand.

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).

What the POOL HEALTH cells mean

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.

What ACCEPT RATE thresholds mean

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.

How to read reject classes

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.

Common runbook snippets

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

### FAQ · DOCS

What counts for payout?

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.

Which retune script should I use?

Three different tools for three different jobs — do not cross-run them between platforms:

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.

REPORTED RATE vs ACCEPTED MATMUL/s

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.

Why shares can reject

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).

Why did my GPU briefly show 0%?

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.

Why is my "owed" so high?

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.

Where do I see this rig's earnings and payout history?

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.

I pressed [Q] — did I stop mining?

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".

What is the [W] cockpit?

An always-on local, loopback-only dashboard for this rig (http://127.0.0.1:476xx). → see Troubleshooting → Local [W] cockpit for details.

How do updates work?

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.

What is the welcome splash?

A brief lighthouse welcome screen the menu shows on launch. Suppress it with BYRON_NO_SPLASH=1 (or -NoSplash on Windows).

What clean jobs / cancels mean

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.

What continuous mode does

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.

install.sh vs 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.)

### OPTIMIZATION · TUNING TOOLS

Intro

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.

Quick Action — Mac Retune

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.

Quick Action — NVIDIA Continuous Canary

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.

Quick Action — CUDA Retune

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:

[ Mac / Metal tuning — all supported knobs ]

KnobWhere setWhat it changesSafe startWhen to ↑When to ↓PersistenceExample
--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).

[ CUDA / NVIDIA tuning — all supported knobs ]

KnobWhere setWhat it changesSafe startEncoded profileWhen 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()).

[ Platform profiles (encoded in installer scripts) ]

ProfileApplies to--gpu-inputs--batch-size--prepare-workers--solver-threadsOtherSource
fast-m4-max-ultra Apple M4 Max + M4 Ultra ONLY 13286 (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) 01644 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 1512168 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 112884 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 stockPHYS-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) 1512 or 2564–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.

Rollback Notes

/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.

What each knob means

--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.

Safety notes

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.