Skip to content

We're upgrading our operations to serve you better. Orders ship as usual from Laval, QC. Questions? Contact us

Bitcoin accepted at checkout  |  Ships from Laval, QC, Canada  |  Expert support since 2016

@import url(‘https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Barlow+Condensed:wght@600;700&display=swap’);

.solo-calc {
–bg-primary: #0D0D0D;
–bg-secondary: #1E1E2E;
–bg-tertiary: #242432;
–accent: #FF6E00;
–accent-glow: rgba(255, 110, 0, 0.15);
–accent-glow-strong: rgba(255, 110, 0, 0.35);
–text-primary: #E8E8E8;
–text-secondary: #8A8A8A;
–border: #333333;
–border-subtle: #2A2A2A;
–green: #00FF41;
–green-dim: rgba(0, 255, 65, 0.15);
–yellow: #FFD600;
–yellow-dim: rgba(255, 214, 0, 0.15);
–orange: #FF6E00;
–orange-dim: rgba(255, 110, 0, 0.15);
–red: #FF3B3B;
–red-dim: rgba(255, 59, 59, 0.15);
–terminal-bg: #0A0A0A;
–mono: ‘JetBrains Mono’, ‘Fira Code’, ‘Courier New’, monospace;
–sans: ‘Inter’, -apple-system, BlinkMacSystemFont, sans-serif;
–heading: ‘Barlow Condensed’, ‘Inter’, sans-serif;

max-width: 1280px;
margin: 0 auto;
padding: 0 20px;
font-family: var(–sans);
color: var(–text-primary);
line-height: 1.7;
-webkit-font-smoothing: antialiased;
}

.solo-calc *,
.solo-calc *::before,
.solo-calc *::after {
box-sizing: border-box;
}

/* ── Typography ─────────────────────────────── */

.solo-calc h1 {
font-family: var(–heading);
font-weight: 700;
font-size: clamp(2rem, 5vw, 3rem);
color: var(–text-primary);
text-transform: uppercase;
letter-spacing: 0.02em;
margin: 0 0 0.5em 0;
line-height: 1.15;
}

.solo-calc h1 .accent {
color: var(–accent);
}

.solo-calc h2 {
font-family: var(–heading);
font-weight: 700;
font-size: clamp(1.5rem, 3.5vw, 2rem);
color: var(–text-primary);
text-transform: uppercase;
letter-spacing: 0.02em;
margin: 2em 0 0.75em 0;
line-height: 1.2;
}

.solo-calc h3 {
font-family: var(–heading);
font-weight: 600;
font-size: clamp(1.15rem, 2.5vw, 1.4rem);
color: var(–text-primary);
text-transform: uppercase;
margin: 1.5em 0 0.5em 0;
}

.solo-calc p {
color: var(–text-secondary);
margin: 0 0 1em 0;
font-size: 1rem;
line-height: 1.7;
}

.solo-calc a {
color: var(–accent);
text-decoration: none;
transition: color 0.2s, text-shadow 0.2s;
}

.solo-calc a:hover {
color: #ff8c33;
text-shadow: 0 0 8px var(–accent-glow);
}

/* ── Intro Section ──────────────────────────── */

.solo-calc__intro {
margin-bottom: 2.5em;
padding-bottom: 2em;
border-bottom: 1px solid var(–border-subtle);
}

.solo-calc__intro p {
max-width: 900px;
}

.solo-calc__intro .pioneer-badge {
display: inline-flex;
align-items: center;
gap: 8px;
background: var(–accent-glow);
border: 1px solid rgba(255, 110, 0, 0.3);
border-radius: 6px;
padding: 6px 14px;
font-family: var(–mono);
font-size: 0.8rem;
color: var(–accent);
margin-top: 0.5em;
}

.solo-calc__intro .pioneer-badge::before {
content: ’25C8′;
}

/* ── Calculator Card ────────────────────────── */

.solo-calc__card {
background: var(–bg-secondary);
border: 1px solid var(–border);
border-radius: 12px;
padding: clamp(20px, 4vw, 40px);
margin-bottom: 2.5em;
position: relative;
overflow: hidden;
}

.solo-calc__card::before {
content: ”;
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(–accent), transparent);
}

.solo-calc__card-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 1.5em;
padding-bottom: 1em;
border-bottom: 1px solid var(–border-subtle);
}

.solo-calc__card-header .terminal-prompt {
font-family: var(–mono);
font-size: 0.85rem;
color: var(–green);
}

.solo-calc__card-header .terminal-cmd {
font-family: var(–mono);
font-size: 0.85rem;
color: var(–text-secondary);
}

.solo-calc__blink {
display: inline-block;
width: 8px;
height: 16px;
background: var(–green);
margin-left: 4px;
animation: blink 1s step-end infinite;
vertical-align: middle;
}

@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}

/* ── Form Grid ──────────────────────────────── */

.solo-calc__grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 1.5em;
}

@media (max-width: 700px) {
.solo-calc__grid {
grid-template-columns: 1fr;
}
}

.solo-calc__field {
display: flex;
flex-direction: column;
gap: 6px;
}

.solo-calc__field.full-width {
grid-column: 1 / -1;
}

.solo-calc__label {
font-family: var(–mono);
font-size: 0.75rem;
text-transform: uppercase;
color: var(–text-secondary);
letter-spacing: 0.08em;
}

.solo-calc__label .live-dot {
display: inline-block;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(–green);
margin-left: 6px;
animation: pulse-dot 2s ease infinite;
}

@keyframes pulse-dot {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}

.solo-calc select,
.solo-calc input[type=”number”],
.solo-calc input[type=”text”] {
background: var(–terminal-bg);
border: 1px solid var(–border);
border-radius: 6px;
color: var(–text-primary);
font-family: var(–mono);
font-size: 0.95rem;
padding: 12px 14px;
width: 100%;
transition: border-color 0.2s, box-shadow 0.2s;
-moz-appearance: textfield;
}

.solo-calc select {
cursor: pointer;
appearance: none;
-webkit-appearance: none;
background-image: url(“data:image/svg+xml,%3Csvg xmlns=’http://www.w3.org/2000/svg’ width=’12’ height=’8′ fill=’%238A8A8A’%3E%3Cpath d=’M6 8L0 0h12z’/%3E%3C/svg%3E”);
background-repeat: no-repeat;
background-position: right 14px center;
padding-right: 36px;
}

.solo-calc select option {
background: var(–bg-secondary);
color: var(–text-primary);
}

.solo-calc input::-webkit-outer-spin-button,
.solo-calc input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}

.solo-calc input:focus,
.solo-calc select:focus {
outline: none;
border-color: var(–accent);
box-shadow: 0 0 0 3px var(–accent-glow);
}

.solo-calc__input-group {
display: flex;
gap: 0;
}

.solo-calc__input-group input {
border-radius: 6px 0 0 6px;
border-right: none;
flex: 1;
min-width: 0;
}

.solo-calc__input-group select {
border-radius: 0 6px 6px 0;
width: auto;
min-width: 90px;
padding-left: 10px;
}

.solo-calc__input-group input:focus {
border-right: none;
}

.solo-calc__input-group input:focus + select {
border-color: var(–accent);
}

.solo-calc__hint {
font-size: 0.72rem;
color: var(–text-secondary);
font-family: var(–mono);
margin-top: 2px;
}

/* ── Calculate Button ───────────────────────── */

.solo-calc__btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 10px;
background: var(–accent);
color: #ffffff;
font-family: var(–heading);
font-weight: 700;
font-size: 1.1rem;
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 14px 36px;
border: none;
border-radius: 8px;
cursor: pointer;
transition: background 0.2s, box-shadow 0.2s, transform 0.15s;
box-shadow: 0 0 20px var(–accent-glow);
width: 100%;
margin-top: 0.5em;
}

.solo-calc__btn:hover {
background: #ff8c33;
box-shadow: 0 0 30px var(–accent-glow-strong);
transform: translateY(-1px);
}

.solo-calc__btn:active {
transform: translateY(0);
}

/* ── Results ────────────────────────────────── */

.solo-calc__results {
display: none;
margin-top: 2em;
}

.solo-calc__results.visible {
display: block;
animation: fadeInResults 0.5s ease;
}

@keyframes fadeInResults {
from { opacity: 0; transform: translateY(12px); }
to { opacity: 1; transform: translateY(0); }
}

.solo-calc__results-header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 1.5em;
padding-bottom: 1em;
border-bottom: 1px solid var(–border-subtle);
}

.solo-calc__results-header .terminal-prompt {
font-family: var(–mono);
font-size: 0.85rem;
color: var(–green);
}

.solo-calc__results-header .terminal-cmd {
font-family: var(–mono);
font-size: 0.85rem;
color: var(–text-secondary);
}

/* ── Probability Hero ───────────────────────── */

.solo-calc__prob-hero {
background: var(–terminal-bg);
border: 1px solid var(–border);
border-radius: 10px;
padding: clamp(20px, 4vw, 32px);
text-align: center;
margin-bottom: 1.5em;
position: relative;
overflow: hidden;
}

.solo-calc__prob-hero::after {
content: ”;
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, var(–accent), transparent);
}

.solo-calc__prob-label {
font-family: var(–mono);
font-size: 0.75rem;
text-transform: uppercase;
color: var(–text-secondary);
letter-spacing: 0.1em;
margin-bottom: 8px;
}

.solo-calc__prob-value {
font-family: var(–mono);
font-weight: 700;
font-size: clamp(2rem, 6vw, 3.5rem);
line-height: 1.1;
margin-bottom: 8px;
transition: color 0.3s;
}

.solo-calc__prob-value.prob-green { color: var(–green); text-shadow: 0 0 20px var(–green-dim); }
.solo-calc__prob-value.prob-yellow { color: var(–yellow); text-shadow: 0 0 20px var(–yellow-dim); }
.solo-calc__prob-value.prob-orange { color: var(–accent); text-shadow: 0 0 20px var(–orange-dim); }
.solo-calc__prob-value.prob-red { color: var(–red); text-shadow: 0 0 20px var(–red-dim); }

.solo-calc__prob-period {
font-family: var(–mono);
font-size: 0.85rem;
color: var(–text-secondary);
}

/* ── Lottery Ticket ─────────────────────────── */

.solo-calc__ticket {
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #1a1a2e 100%);
border: 2px dashed var(–accent);
border-radius: 12px;
padding: clamp(16px, 3vw, 24px);
margin-bottom: 1.5em;
position: relative;
overflow: hidden;
}

.solo-calc__ticket::before,
.solo-calc__ticket::after {
content: ”;
position: absolute;
width: 24px;
height: 24px;
background: var(–bg-secondary);
border-radius: 50%;
top: 50%;
transform: translateY(-50%);
}

.solo-calc__ticket::before { left: -12px; }
.solo-calc__ticket::after { right: -12px; }

.solo-calc__ticket-header {
text-align: center;
font-family: var(–heading);
font-size: 1rem;
text-transform: uppercase;
color: var(–accent);
letter-spacing: 0.15em;
margin-bottom: 16px;
padding-bottom: 12px;
border-bottom: 1px dashed rgba(255, 110, 0, 0.3);
}

.solo-calc__ticket-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
gap: 12px;
text-align: center;
}

.solo-calc__ticket-item {
padding: 8px;
}

.solo-calc__ticket-item-label {
font-family: var(–mono);
font-size: 0.65rem;
text-transform: uppercase;
color: var(–text-secondary);
letter-spacing: 0.08em;
margin-bottom: 4px;
}

.solo-calc__ticket-item-value {
font-family: var(–mono);
font-weight: 700;
font-size: clamp(1rem, 2.5vw, 1.3rem);
color: var(–text-primary);
}

.solo-calc__ticket-item-value.highlight {
color: var(–accent);
}

/* ── Results Grid ───────────────────────────── */

.solo-calc__stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 16px;
margin-bottom: 1.5em;
}

.solo-calc__stat {
background: var(–terminal-bg);
border: 1px solid var(–border-subtle);
border-radius: 8px;
padding: 20px;
transition: border-color 0.2s, box-shadow 0.2s;
}

.solo-calc__stat:hover {
border-color: var(–border);
box-shadow: 0 0 12px rgba(0, 0, 0, 0.3);
}

.solo-calc__stat-label {
font-family: var(–mono);
font-size: 0.7rem;
text-transform: uppercase;
color: var(–text-secondary);
letter-spacing: 0.08em;
margin-bottom: 8px;
}

.solo-calc__stat-value {
font-family: var(–mono);
font-weight: 700;
font-size: 1.4rem;
color: var(–text-primary);
line-height: 1.2;
}

.solo-calc__stat-value .unit {
font-size: 0.75rem;
font-weight: 400;
color: var(–text-secondary);
margin-left: 4px;
}

.solo-calc__stat-sub {
font-family: var(–mono);
font-size: 0.72rem;
color: var(–text-secondary);
margin-top: 4px;
}

/* ── Hashrate Comparison Bar ────────────────── */

.solo-calc__hashbar {
background: var(–terminal-bg);
border: 1px solid var(–border-subtle);
border-radius: 8px;
padding: 20px;
margin-bottom: 1.5em;
}

.solo-calc__hashbar-title {
font-family: var(–mono);
font-size: 0.75rem;
text-transform: uppercase;
color: var(–text-secondary);
letter-spacing: 0.08em;
margin-bottom: 16px;
}

.solo-calc__hashbar-track {
position: relative;
height: 36px;
background: var(–bg-secondary);
border-radius: 6px;
overflow: hidden;
margin-bottom: 12px;
}

.solo-calc__hashbar-network {
position: absolute;
inset: 0;
background: linear-gradient(90deg, rgba(255, 110, 0, 0.08), rgba(255, 110, 0, 0.03));
border-radius: 6px;
}

.solo-calc__hashbar-you {
position: absolute;
left: 0;
top: 0;
bottom: 0;
min-width: 3px;
background: var(–accent);
border-radius: 6px 0 0 6px;
box-shadow: 0 0 12px var(–accent-glow-strong);
transition: width 0.8s cubic-bezier(0.22, 1, 0.36, 1);
}

.solo-calc__hashbar-you-label {
position: absolute;
right: -4px;
top: 50%;
transform: translate(100%, -50%);
font-family: var(–mono);
font-size: 0.65rem;
color: var(–accent);
white-space: nowrap;
padding-left: 8px;
}

.solo-calc__hashbar-legend {
display: flex;
justify-content: space-between;
font-family: var(–mono);
font-size: 0.7rem;
color: var(–text-secondary);
}

.solo-calc__hashbar-legend .you-label {
color: var(–accent);
}

.solo-calc__hashbar-note {
font-family: var(–mono);
font-size: 0.65rem;
color: var(–text-secondary);
margin-top: 8px;
font-style: italic;
}

/* ── Every Hash Counts Banner ───────────────── */

.solo-calc__ethos {
background: linear-gradient(135deg, rgba(255, 110, 0, 0.08), rgba(255, 110, 0, 0.02));
border: 1px solid rgba(255, 110, 0, 0.2);
border-radius: 10px;
padding: clamp(20px, 3vw, 28px);
text-align: center;
margin-top: 1.5em;
}

.solo-calc__ethos-slogan {
font-family: var(–heading);
font-size: clamp(1.3rem, 3vw, 1.8rem);
font-weight: 700;
color: var(–accent);
text-transform: uppercase;
letter-spacing: 0.04em;
margin-bottom: 8px;
}

.solo-calc__ethos-text {
font-size: 0.9rem;
color: var(–text-secondary);
max-width: 700px;
margin: 0 auto;
line-height: 1.6;
}

/* ── Content Sections ───────────────────────── */

.solo-calc__section {
margin-top: 3em;
padding-top: 2em;
border-top: 1px solid var(–border-subtle);
}

.solo-calc__section p {
max-width: 900px;
}

/* ── FAQ ─────────────────────────────────────── */

.solo-calc__faq {
margin-top: 2em;
}

.solo-calc__faq details {
background: var(–bg-secondary);
border: 1px solid var(–border-subtle);
border-radius: 8px;
margin-bottom: 10px;
transition: border-color 0.2s;
}

.solo-calc__faq details[open] {
border-color: var(–border);
}

.solo-calc__faq details summary {
padding: 16px 20px;
cursor: pointer;
font-weight: 600;
color: var(–text-primary);
font-size: 0.95rem;
list-style: none;
display: flex;
align-items: center;
gap: 12px;
transition: color 0.2s;
}

.solo-calc__faq details summary::-webkit-details-marker { display: none; }
.solo-calc__faq details summary::marker { display: none; content: ”; }

.solo-calc__faq details summary::before {
content: ‘+’;
font-family: var(–mono);
font-size: 1.2rem;
color: var(–accent);
flex-shrink: 0;
width: 20px;
text-align: center;
transition: transform 0.2s;
}

.solo-calc__faq details[open] summary::before {
content: ‘2212’;
}

.solo-calc__faq details summary:hover {
color: var(–accent);
}

.solo-calc__faq details .faq-answer {
padding: 0 20px 16px 52px;
color: var(–text-secondary);
font-size: 0.9rem;
line-height: 1.7;
}

.solo-calc__faq details .faq-answer p {
margin-bottom: 0.75em;
}

.solo-calc__faq details .faq-answer p:last-child {
margin-bottom: 0;
}

/* ── Success Stories ────────────────────────── */

.solo-calc__stories {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 16px;
margin-top: 1.5em;
}

.solo-calc__story {
background: var(–bg-secondary);
border: 1px solid var(–border-subtle);
border-radius: 8px;
padding: 20px;
position: relative;
overflow: hidden;
}

.solo-calc__story::before {
content: ‘201C’;
position: absolute;
top: 8px;
left: 16px;
font-size: 3rem;
font-family: Georgia, serif;
color: var(–accent);
opacity: 0.3;
line-height: 1;
}

.solo-calc__story-text {
font-size: 0.9rem;
color: var(–text-primary);
margin-bottom: 12px;
padding-top: 8px;
line-height: 1.6;
}

.solo-calc__story-source {
font-family: var(–mono);
font-size: 0.72rem;
color: var(–text-secondary);
text-transform: uppercase;
letter-spacing: 0.05em;
}

.solo-calc__story-source .block-emoji {
color: var(–accent);
}

/* ── CTA Section ────────────────────────────── */

.solo-calc__cta {
background: linear-gradient(135deg, var(–bg-secondary), var(–bg-tertiary));
border: 1px solid var(–border);
border-radius: 12px;
padding: clamp(28px, 5vw, 48px);
text-align: center;
margin-top: 3em;
position: relative;
overflow: hidden;
}

.solo-calc__cta::before {
content: ”;
position: absolute;
inset: 0;
background: radial-gradient(ellipse at center, var(–accent-glow) 0%, transparent 70%);
pointer-events: none;
}

.solo-calc__cta h2 {
margin-top: 0;
position: relative;
}

.solo-calc__cta p {
position: relative;
max-width: 600px;
margin: 0 auto 1.5em;
}

.solo-calc__cta-link {
display: inline-flex;
align-items: center;
gap: 10px;
background: var(–accent);
color: #ffffff !important;
font-family: var(–heading);
font-weight: 700;
font-size: 1.1rem;
text-transform: uppercase;
letter-spacing: 0.05em;
padding: 16px 40px;
border-radius: 8px;
text-decoration: none;
transition: background 0.2s, box-shadow 0.2s, transform 0.15s;
box-shadow: 0 0 24px var(–accent-glow);
position: relative;
}

.solo-calc__cta-link:hover {
background: #ff8c33;
box-shadow: 0 0 36px var(–accent-glow-strong);
transform: translateY(-2px);
color: #ffffff !important;
text-shadow: none;
}

.solo-calc__cta-link::after {
content: ‘2192’;
transition: transform 0.2s;
}

.solo-calc__cta-link:hover::after {
transform: translateX(4px);
}

/* ── Related Links ──────────────────────────── */

.solo-calc__related {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 1.5em;
}

.solo-calc__related a {
display: inline-flex;
align-items: center;
gap: 6px;
background: var(–bg-secondary);
border: 1px solid var(–border-subtle);
border-radius: 6px;
padding: 10px 18px;
font-family: var(–mono);
font-size: 0.8rem;
color: var(–text-secondary);
transition: border-color 0.2s, color 0.2s, box-shadow 0.2s;
}

.solo-calc__related a:hover {
border-color: var(–accent);
color: var(–accent);
box-shadow: 0 0 12px var(–accent-glow);
text-shadow: none;
}

.solo-calc__related a::before {
content: ’25B8′;
color: var(–accent);
}

/* ── API Status ─────────────────────────────── */

.solo-calc__api-status {
display: flex;
align-items: center;
gap: 8px;
font-family: var(–mono);
font-size: 0.7rem;
color: var(–text-secondary);
margin-bottom: 8px;
}

.solo-calc__api-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(–text-secondary);
transition: background 0.3s;
}

.solo-calc__api-dot.live { background: var(–green); }
.solo-calc__api-dot.error { background: var(–red); }

/* ── Loading Spinner ────────────────────────── */

.solo-calc__spinner {
display: none;
justify-content: center;
align-items: center;
padding: 40px;
}

.solo-calc__spinner.visible {
display: flex;
}

.solo-calc__spinner::after {
content: ”;
width: 32px;
height: 32px;
border: 3px solid var(–border);
border-top-color: var(–accent);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}

@keyframes spin {
to { transform: rotate(360deg); }
}

/* ── Mobile Adjustments ─────────────────────── */

@media (max-width: 480px) {
.solo-calc {
padding: 0 12px;
}

.solo-calc__card {
padding: 16px;
}

.solo-calc__stats-grid {
grid-template-columns: 1fr;
}

.solo-calc__ticket-grid {
grid-template-columns: 1fr 1fr;
}

.solo-calc__hashbar-legend {
flex-direction: column;
gap: 4px;
}

.solo-calc__related {
flex-direction: column;
}

.solo-calc__related a {
justify-content: center;
}

.solo-calc__prob-value {
font-size: 2rem;
}
}

@media (max-width: 360px) {
.solo-calc__ticket-grid {
grid-template-columns: 1fr;
}
}

Solo Mining Probability Calculator

Solo mining is the purest form of Bitcoin mining: your miner, the network, and a direct shot at the full block reward. No pools, no middlemen, no dilution. It is often called “lottery mining” because finding a block with a small miner is statistically unlikely over short periods — but it is never impossible. Every hash your miner computes is a valid attempt at solving the next block. This calculator helps you understand your real odds. Whether you are running a Bitaxe on your desk or an Antminer in your garage, you will see exactly what your chances look like over any time horizon. Solo mining is not about guaranteed returns — it is about sovereignty, supporting decentralization, and the thrill of the hunt.
D-Central Technologies — Bitaxe Ecosystem Pioneer Since Day One
$ solo-mine –calculate-probability
— Select your miner — Bitaxe Ultra — 500 GH/s Bitaxe Supra — 600 GH/s Bitaxe Gamma — 1.2 TH/s Bitaxe Hex — 3 TH/s Bitaxe GT — 5 TH/s NerdAxe — 500 GH/s NerdQAxe++ — 2 TH/s NerdOctaxe — 4 TH/s Antminer S9 — 14 TH/s Antminer S19 — 95 TH/s Antminer S21 — 200 TH/s Custom Hashrate
GH/s TH/s PH/s EH/s
EH/s
Fetching live data…
BTC
Current epoch: 3.125 BTC (next halving ~2028)
1 Day 1 Week 1 Month 6 Months 1 Year 5 Years 10 Years
BTC price: loading…
> results:
Probability of Finding at Least 1 Block
in the selected period
⚙ Your Solo Mining Ticket
Network Share
Expected Wait
Expected Blocks
Block Reward
Your Share of Network
Expected Time to Block
Expected Blocks in Period
Block Reward Value
Hashrate Comparison (Logarithmic Scale)
You: — Network: —
Bar uses a logarithmic scale so tiny hashrates remain visible. Actual ratio is displayed above.
Every Hash Counts.
Even the smallest miner strengthens Bitcoin’s decentralization. Your hashrate is your vote for a censorship-resistant monetary network. Solo mining is not about optimizing for profit — it is about sovereignty, independence, and the chance to validate a block with your own hardware. No pool. No middleman. Just you and the network.

Understanding Solo Mining Probability

Bitcoin mining is a probabilistic process. Each hash your miner computes is an independent attempt to find a value below the network’s current target. The probability that any single hash solves a block is your hashrate divided by the total network hashrate. With the network exceeding 700 EH/s, even a powerful ASIC represents a vanishingly small fraction of total compute — but the math is clear: every hash has the same chance as any other. Mining follows a Poisson process, which means it has the “memoryless” property. Whether your miner has been running for one hour or one year, the probability of finding a block in the next ten minutes is exactly the same. There is no “building up” of luck. Each moment is a fresh roll of the dice. This also means that finding a block faster than your expected time is just as possible as finding one much later. The probability displayed by this calculator uses the formula: P(at least 1 block) = 1 – (1 – p)n, where p is your probability of solving any given block and n is the number of blocks the network is expected to produce in your chosen time period. At approximately 144 blocks per day, even a small hashrate accumulates thousands of “attempts” over months and years. For Bitaxe and other small solo miners, the expected time to find a block is measured in hundreds or thousands of years. But this is the expected average — it does not mean you will wait that long. Blocks have been found by solo miners with as little as a single Bitaxe unit, proving that probability and certainty are very different things. This is why the solo mining community rallies around the phrase: every hash counts.

Frequently Asked Questions

What does “probability of finding a block” actually mean?
It means the statistical likelihood that your miner will solve at least one Bitcoin block within the given time period. A 0.01% probability over one year means that if 10,000 identical miners each ran for one year, on average about one of them would find a block. It does not mean you need to wait 10,000 years — you could find one tomorrow or never. Each moment is an independent event.
Can a Bitaxe really find a block?
Yes, and it has happened. Solo miners running single Bitaxe units have found full Bitcoin blocks, earning the entire block reward (currently 3.125 BTC). The probability per day is extremely low, but it is never zero. As long as your miner is hashing and submitting valid work to a solo mining pool or directly to the network, every hash is a legitimate chance at the full block reward.
Is solo mining profitable?
In expected-value terms, solo mining has the same expected return per hash as pool mining (minus pool fees). However, the variance is enormous. Pool mining gives you small, predictable payouts. Solo mining gives you nothing for potentially years, then a massive windfall if you find a block. Most solo miners are not optimizing for expected profit — they mine for sovereignty, decentralization, education, and the thrill. Many also use their miners as space heaters, so the electricity cost serves double duty.
What happens to my odds after the next halving?
Your probability of finding a block does not change with the halving. The halving reduces the block reward (from 3.125 to 1.5625 BTC, expected around 2028), not the difficulty. Your odds of solving a block depend on your share of the network hashrate. However, the value of finding a block is cut in half, which may cause some miners to shut down, potentially lowering difficulty and slightly improving your odds.
Why does the calculator show scientific notation for my network share?
Because your share of the network is extremely small. A Bitaxe at 500 GH/s against a 750 EH/s network represents 0.0000000667% of total hashrate. Scientific notation (like 6.67 x 10-10) is the clearest way to express these tiny fractions. Do not let the small numbers discourage you — remember that the network produces 144 blocks per day, and each one is a new chance.
Does running my miner longer increase my cumulative odds?
Yes. While each individual hash has the same probability regardless of history (the memoryless property), the cumulative probability of having found at least one block increases with time. Running a Bitaxe for 10 years gives you a meaningfully higher cumulative probability than running it for 1 day. This is the power of persistence in solo mining: time is your ally. The calculator lets you explore different time periods to see how your odds accumulate.

Join the Solo Mining Revolution

D-Central carries the full lineup of Bitaxe solo miners, accessories, and open-source mining hardware. As pioneers in the Bitaxe ecosystem from day one, we know these machines inside and out. Start your solo mining journey today. Shop Bitaxe Miners
(function() { ‘use strict’; // ── State ───────────────────────────────────── var btcPriceUSD = 0; var btcPriceCAD = 0; var networkHashrateEH = 750; // fallback var liveDataLoaded = false; // ── DOM refs ────────────────────────────────── var elMiner = document.getElementById(‘sc-miner’); var elHashrate = document.getElementById(‘sc-hashrate’); var elHashunit = document.getElementById(‘sc-hashunit’); var elNetwork = document.getElementById(‘sc-network’); var elReward = document.getElementById(‘sc-reward’); var elPeriod = document.getElementById(‘sc-period’); var elBtn = document.getElementById(‘sc-calculate’); var elResults = document.getElementById(‘sc-results’); var elNetworkHint = document.getElementById(‘sc-network-hint’); var elLiveDot = document.getElementById(‘sc-live-dot’); var elPriceDot = document.getElementById(‘sc-price-dot’); var elPriceStatus = document.getElementById(‘sc-price-status’); // ── Miner presets ───────────────────────────── elMiner.addEventListener(‘change’, function() { var val = this.value; if (val === ‘custom’) { elHashrate.value = ”; elHashrate.focus(); return; } var parts = val.split(‘:’); var hr = parseFloat(parts[0]); var unit = parts[1]; // Display in most readable unit if (hr >= 1000) { elHashrate.value = hr / 1000; elHashunit.value = ‘TH/s’; } else { elHashrate.value = hr; elHashunit.value = ‘GH/s’; } }); // ── Fetch BTC price ─────────────────────────── function fetchPrice() { fetch(‘https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd,cad’) .then(function(r) { return r.json(); }) .then(function(data) { if (data && data.bitcoin) { btcPriceUSD = data.bitcoin.usd || 0; btcPriceCAD = data.bitcoin.cad || 0; elPriceDot.className = ‘solo-calc__api-dot live’; elPriceStatus.textContent = ‘BTC price: $’ + formatNumber(btcPriceUSD, 0) + ‘ USD / $’ + formatNumber(btcPriceCAD, 0) + ‘ CAD’; } }) .catch(function() { elPriceDot.className = ‘solo-calc__api-dot error’; elPriceStatus.textContent = ‘BTC price: API unavailable (enter manually after calculating)’; }); } // ── Fetch network hashrate from blockchain.info ── function fetchNetworkData() { // Try mempool.space API for difficulty fetch(‘https://mempool.space/api/v1/mining/hashrate/1d’) .then(function(r) { return r.json(); }) .then(function(data) { if (data && data.currentHashrate) { // currentHashrate is in H/s networkHashrateEH = data.currentHashrate / 1e18; applyNetworkData(); return; } throw new Error(‘no data’); }) .catch(function() { // Fallback: try blockchain.info difficulty fetch(‘https://blockchain.info/q/getdifficulty’) .then(function(r) { return r.text(); }) .then(function(text) { var diff = parseFloat(text); if (diff && diff > 0) { // hashrate (H/s) = difficulty * 2^32 / 600 networkHashrateEH = (diff * 4294967296) / 600 / 1e18; applyNetworkData(); } else { throw new Error(‘bad data’); } }) .catch(function() { elNetworkHint.textContent = ‘Live data unavailable. Using ~750 EH/s estimate.’; elLiveDot.style.background = ‘#FF3B3B’; }); }); } function applyNetworkData() { elNetwork.value = networkHashrateEH.toFixed(1); elNetworkHint.textContent = ‘Live network hashrate loaded’; elLiveDot.style.background = ‘#00FF41’; liveDataLoaded = true; } // ── Utility formatters ──────────────────────── function formatNumber(num, decimals) { if (typeof decimals === ‘undefined’) decimals = 2; return num.toLocaleString(‘en-US’, { minimumFractionDigits: decimals, maximumFractionDigits: decimals }); } function formatHashrate(ghps) { if (ghps >= 1e9) return formatNumber(ghps / 1e9, 2) + ‘ EH/s’; if (ghps >= 1e6) return formatNumber(ghps / 1e6, 2) + ‘ PH/s’; if (ghps >= 1e3) return formatNumber(ghps / 1e3, 2) + ‘ TH/s’; return formatNumber(ghps, 2) + ‘ GH/s’; } function formatTime(days) { if (days < 1) { var hours = days * 24; if (hours < 1) return formatNumber(hours * 60, 1) + ' minutes'; return formatNumber(hours, 1) + ' hours'; } if (days < 30) return formatNumber(days, 1) + ' days'; if (days < 365) { var months = days / 30.44; return formatNumber(months, 1) + ' months'; } var years = days / 365.25; if (years < 1000) return formatNumber(years, 1) + ' years'; if (years < 1e6) return formatNumber(years / 1000, 1) + 'K years'; if (years < 1e9) return formatNumber(years / 1e6, 1) + 'M years'; if (years = 0.9999) return ‘~100%’; if (prob >= 0.01) return formatNumber(prob * 100, 2) + ‘%’; if (prob >= 0.0001) return formatNumber(prob * 100, 4) + ‘%’; if (prob >= 1e-10) return prob.toExponential(2).replace(‘e’, ‘ x 10^’).replace(‘+’, ”).replace(‘^-0’, ‘^-‘); return prob.toExponential(2).replace(‘e’, ‘ x 10^’).replace(‘+’, ”).replace(‘^-0’, ‘^-‘); } function formatNetworkShare(fraction) { if (fraction >= 0.01) return formatNumber(fraction * 100, 4) + ‘%’; if (fraction >= 1e-8) { var exp = fraction.toExponential(2); return exp.replace(‘e’, ‘ x 10^’).replace(‘+’, ”).replace(‘^-0’, ‘^-‘); } return fraction.toExponential(2).replace(‘e’, ‘ x 10^’).replace(‘+’, ”).replace(‘^-0’, ‘^-‘); } function getProbClass(prob) { if (prob >= 0.5) return ‘prob-green’; if (prob >= 0.01) return ‘prob-yellow’; if (prob >= 0.0001) return ‘prob-orange’; return ‘prob-red’; } function getPeriodLabel(days) { if (days === 1) return ‘in 1 day’; if (days === 7) return ‘in 1 week’; if (days === 30) return ‘in 1 month’; if (days === 182) return ‘in 6 months’; if (days === 365) return ‘in 1 year’; if (days === 1825) return ‘in 5 years’; if (days === 3650) return ‘in 10 years’; return ‘in ‘ + days + ‘ days’; } // ── Hashrate to GH/s converter ──────────────── function toGHps(value, unit) { switch (unit) { case ‘GH/s’: return value; case ‘TH/s’: return value * 1000; case ‘PH/s’: return value * 1e6; case ‘EH/s’: return value * 1e9; default: return value; } } // ── Core calculation ────────────────────────── function calculate() { var userHashGH = toGHps(parseFloat(elHashrate.value), elHashunit.value); var netHashEH = parseFloat(elNetwork.value); var reward = parseFloat(elReward.value); var periodDays = parseInt(elPeriod.value, 10); if (isNaN(userHashGH) || userHashGH <= 0 || isNaN(netHashEH) || netHashEH GH/s // Core math var share = userHashGH / netHashGH; var blocksPerDay = 144; var blocksInPeriod = blocksPerDay * periodDays; var expectedTimeDays = 1 / (share * blocksPerDay); var expectedBlocks = share * blocksInPeriod; // Probability of at least 1 block: 1 – (1-p)^n // For very small p, use log for precision: 1 – exp(n * ln(1 – p)) var probAtLeastOne; if (share = 0.01 ? formatNumber(expectedBlocks, 4) : expectedBlocks.toExponential(2); document.getElementById(‘sc-ticket-reward’).textContent = formatNumber(reward, 4) + ‘ BTC’; // Stats document.getElementById(‘sc-share’).innerHTML = formatNetworkShare(share); document.getElementById(‘sc-share-sub’).textContent = formatHashrate(userHashGH) + ‘ / ‘ + formatNumber(netHashEH, 1) + ‘ EH/s’; document.getElementById(‘sc-expected-time’).textContent = formatTime(expectedTimeDays); document.getElementById(‘sc-expected-time-sub’).textContent = ‘Average. Could be sooner or later.’; var expBlockStr = expectedBlocks >= 0.001 ? formatNumber(expectedBlocks, 6) : expectedBlocks.toExponential(3); document.getElementById(‘sc-expected-blocks’).textContent = expBlockStr; document.getElementById(‘sc-expected-blocks-sub’).textContent = getPeriodLabel(periodDays) + ‘ at ‘ + formatHashrate(userHashGH); if (btcPriceUSD > 0) { var rewardUSD = reward * btcPriceUSD; var rewardCAD = reward * btcPriceCAD; document.getElementById(‘sc-reward-value’).innerHTML = ‘$’ + formatNumber(rewardUSD, 0) + ‘USD‘; document.getElementById(‘sc-reward-value-sub’).textContent = reward + ‘ BTC = $’ + formatNumber(rewardCAD, 0) + ‘ CAD’; } else { document.getElementById(‘sc-reward-value’).textContent = reward + ‘ BTC’; document.getElementById(‘sc-reward-value-sub’).textContent = ‘BTC price unavailable’; } // Hashrate bar (logarithmic) var logUser = Math.log10(userHashGH); var logNet = Math.log10(netHashGH); // Map to percentage: user as fraction of the log range // Use a range from 0 (1 GH/s) to logNet var logMin = 0; // 1 GH/s var barPercent = Math.max(0.5, Math.min(95, ((logUser – logMin) / (logNet – logMin)) * 100)); var hashbarFill = document.getElementById(‘sc-hashbar-fill’); hashbarFill.style.width = barPercent + ‘%’; var hashbarLabel = document.getElementById(‘sc-hashbar-you-label’); // Hide label if it would overlap if (barPercent < 60) { hashbarLabel.textContent = formatHashrate(userHashGH); } else { hashbarLabel.textContent = ''; } document.getElementById('sc-hashbar-legend-you').textContent = 'You: ' + formatHashrate(userHashGH); document.getElementById('sc-hashbar-legend-net').textContent = 'Network: ' + formatNumber(netHashEH, 1) + ' EH/s'; // Smooth scroll to results setTimeout(function() { elResults.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 100); } // ── Event listeners ─────────────────────────── elBtn.addEventListener('click', calculate); // Auto-calculate on input change (after first calculation) var firstCalcDone = false; function autoCalc() { if (firstCalcDone) calculate(); } elHashrate.addEventListener('input', autoCalc); elHashunit.addEventListener('change', autoCalc); elNetwork.addEventListener('input', autoCalc); elReward.addEventListener('input', autoCalc); elPeriod.addEventListener('change', autoCalc); elMiner.addEventListener('change', function() { // Small delay so hashrate field updates first setTimeout(autoCalc, 50); }); elBtn.addEventListener('click', function() { firstCalcDone = true; }); // Enter key triggers calculation document.getElementById('soloCalc').addEventListener('keydown', function(e) { if (e.key === 'Enter' && (e.target.tagName === 'INPUT' || e.target.tagName === 'SELECT')) { e.preventDefault(); firstCalcDone = true; calculate(); } }); // ── Init ────────────────────────────────────── fetchPrice(); fetchNetworkData(); })();

What does “probability of finding a block” actually mean?

It means the statistical likelihood that your miner will solve at least one Bitcoin block within the given time period. A 0.01% probability over one year means that if 10,000 identical miners each ran for one year, on average about one of them would find a block. It does not mean you need to wait 10,000 years — you could find one tomorrow or never. Each moment is an independent event.

Can a Bitaxe really find a block?

Yes, and it has happened. Solo miners running single Bitaxe units have found full Bitcoin blocks, earning the entire block reward (currently 3.125 BTC). The probability per day is extremely low, but it is never zero. As long as your miner is hashing and submitting valid work to a solo mining pool or directly to the network, every hash is a legitimate chance at the full block reward.

Is solo mining profitable?

In expected-value terms, solo mining has the same expected return per hash as pool mining (minus pool fees). However, the variance is enormous. Pool mining gives you small, predictable payouts. Solo mining gives you nothing for potentially years, then a massive windfall if you find a block. Most solo miners are not optimizing for expected profit — they mine for sovereignty, decentralization, education, and the thrill. Many also use their miners as space heaters, so the electricity cost…

What happens to my odds after the next halving?

Your probability of finding a block does not change with the halving. The halving reduces the block reward (from 3.125 to 1.5625 BTC, expected around 2028), not the difficulty. Your odds of solving a block depend on your share of the network hashrate. However, the value of finding a block is cut in half, which may cause some miners to shut down, potentially lowering difficulty and slightly improving your odds.

Why does the calculator show scientific notation for my network share?

Because your share of the network is extremely small. A Bitaxe at 500 GH/s against a 750 EH/s network represents 0.0000000667% of total hashrate. Scientific notation (like 6.67 x 10-10) is the clearest way to express these tiny fractions. Do not let the small numbers discourage you — remember that the network produces 144 blocks per day, and each one is a new chance.

Does running my miner longer increase my cumulative odds?

Yes. While each individual hash has the same probability regardless of history (the memoryless property), the cumulative probability of having found at least one block increases with time. Running a Bitaxe for 10 years gives you a meaningfully higher cumulative probability than running it for 1 day. This is the power of persistence in solo mining: time is your ally. The calculator lets you explore different time periods to see how your odds accumulate.