Hashrate
{formatHashrate(data.hashrate_hs_1m)}
5m {formatHashrate(data.hashrate_hs_5m)} · 1h {formatHashrate(data.hashrate_hs_1h)} · 24h {formatHashrate(data.hashrate_hs_24h)}
Best share
{formatDifficulty(data.best_diff)}
100} class:unlucky={luckPct > 0 && luckPct < 100} title="Luck = best share / total work. 100% means your best share matches the work done. Above 100% is lucky (found a harder share than expected), below is unlucky." > {luckLabel} luck
Block latency
{#if latencyCount > 0}
{latencyAvg}ms
last {latencyLast}ms · {formatWork(staleWork)} wasted ({latencyCount} blocks)
{:else}
waiting for the next block
{/if}
Network
{formatHashrate(data.network_hashrate_hs)}
pool share {(poolShare * 1e9).toFixed(2)} ppb
Difficulty
{formatDifficulty(data.chain?.difficulty ?? 0)}
network target
Block height
{height ? height.toLocaleString() : "—"}
{data.chain?.chain ?? "—"}
Block reward
{data.next_block_reward_btc ? data.next_block_reward_btc.toFixed(4) : "—"} BTC
subsidy + fees (next block)
Total work
{formatWork(totalHashes)}
round effort {roundEffort.toFixed(1)}% of current difficulty
Expected block
{formatDuration(expected)}
uptime {formatUptime(data.uptime_seconds)}
Next adjustment
0} class:down={diffPct < 0} >{diffPctLabel}
{retarget.remaining} blocks · ~{retarget.eta}