Calculation Methodology
This page describes in detail how we calculate CPU mining profitability. All formulas are open — you can verify every number yourself.
Income Calculation
Formula
For each snapshot (every 15 minutes) we calculate theoretical daily income:
daily_coins = (hashrate × 86400 / difficulty) × block_reward # Losses: pool fee + stale shares daily_coins_net = daily_coins × (1 - pool_fee / 100) × (1 - stale_shares / 100) # Income in USD daily_income_usd = daily_coins_net × price_usd
24-Hour Averaging
Difficulty, price, and block reward change constantly. To show a realistic picture, we average the output result (income in USD), not the input parameters:
daily_income_usd = (1/N) × Σ daily_income_usd_i
Why not average difficulty/reward/price separately? The formula is nonlinear (difficulty is in the denominator). Averaging input parameters introduces systematic bias (Jensen's inequality) and can underestimate income by 1–5% during difficulty spikes. Averaging the output gives an accurate mean profitability.
Data Sources
| Data | Primary Source | Fallback | Frequency |
|---|---|---|---|
| Difficulty + Reward | Daemon RPC (get_last_block_header) | xmrig.com API | 15 min |
| Coin prices (USD) | CoinGecko API (batch) | — | 15 min |
| USD/RUB rate | CBR (cbr-xml-daily.ru) | Fallback 83.88 ₽ | 6 hours |
Losses Reducing Real Income
| Factor | Value | Description |
|---|---|---|
| Sustained mining discount | ×0.80 / ×0.88 | Difference between burst benchmark (60 sec) and real 24/7 mining. Built into hashrate_typical |
| Pool fee | 1% | Pool commission for processing shares and payouts |
| Stale shares | 0.5% | Share of submissions that arrived late and were not paid |
Example (Ryzen 9 5900X, Monero)
hashrate = 12,500 H/s (verified, sustained 24/7) difficulty = 740,634,183,284 (example) block_reward = 0.6 XMR (base reward, without tx fees from xmrig API) price = $342.62 daily_coins = (12500 × 86400 / 740634183284) × 0.6 = 0.000875 XMR after losses = 0.000875 × 0.99 × 0.995 = 0.000862 XMR daily_income = 0.000862 × $342.62 = $0.295/day
Power Consumption
CPU Power (mining_watts)
CPU power draw is stored per CPU + algorithm pair separately, because different algorithms stress the CPU differently (memory-bound vs compute-bound).
Power estimation formula: RandomX (memory-bound) ≈ TDP × 1.05. When measured data (wattmeter) is available, we use it instead of the formula.
System Power
overhead = 35W (consumer/workstation) or 50W (server) system_power_watts = (mining_watts + overhead) / 0.85 # PSU efficiency
Overhead Breakdown by Component
| Component | Consumer | Server |
|---|---|---|
| Motherboard | ~28W | ~40-50W |
| RAM (2× 8GB DDR4) | ~6W | ~16W |
| SSD SATA | ~1.5W | ~1.5W |
| Fans | ~4W | ~8W |
| Total overhead | 35W | 50W |
PSU efficiency: 85% (80 Plus at ~50% load). Minimal system without GPU. Verified by back-calculation from real wattmeter measurements.
Example (Ryzen 9 5900X, consumer)
mining_watts = 110W (verified, wattmeter) overhead = 35W (consumer) system_power = (110 + 35) / 0.85 = 171W from wall daily_kwh = 171 / 1000 × 24 = 4.1 kWh Real measurements: 113–120W — match
Electricity Cost
daily_electricity_usd = daily_kwh × electricity_price_usd Default: 6.1 ₽/kWh (83.88 ₽/$) = $0.0727/kWh Example: 4.1 kWh × $0.0727 = $0.298/day
Hashrate Calculation
Data Source
Hashrates come from xmrig.com Benchmark API — the largest CPU mining benchmark database.
Algorithm
- Fetch all results for the CPU via API
- Filter: single socket only (packages=1), reasonable thread count
- Take the median (P50) of filtered results
- Apply sustained mining discount:
| CPU Type | Discount | Reason |
|---|---|---|
| Consumer (Ryzen, Core) | ×0.80 | Aggressive turbo boost doesn't sustain 24/7, thermal throttling |
| Server (Xeon, EPYC) | ×0.88 | Stable frequencies, less performance drop |
Calibration Table
| CPU | xmrig median | Discount | Calculated | Actual | Δ |
|---|---|---|---|---|---|
| Ryzen 9 5900X | 15,719 | ×0.80 | 12,575 | 12,500 | +0.6% |
| Xeon E5-2683v4 | ~7,500 | ×0.88 | 6,600 | 6,500 | +1.5% |
| Xeon E5-2690v4 | ~7,539 | ×0.88 | 6,634 | 6,500 | +2.1% |
Dual Channel RAM Required
RandomX is a memory-bound algorithm. Single channel RAM creates a hard hashrate ceiling. That's why we always recommend at least 2 RAM sticks in the build.
| Memory | H/s ceiling (1 channel) |
|---|---|
| DDR4-2400 | ~4,000–4,500 |
| DDR4-3200 | ~5,500–6,000 |
| DDR5-5600 | ~7,000+ |
Payback Calculation
System Cost
For each CPU we store a minimal used build: CPU, motherboard, RAM (dual channel), SSD, PSU. All prices are minimal used hardware prices from the Russian market (in rubles).
Formula
# Net income daily_profit = daily_income - daily_electricity # Payback payback_cpu_days = cpu_price_usd / daily_profit payback_system_days = system_price_usd / daily_profit
Display Format
| Condition | Display |
|---|---|
| < 30 days | X days |
| 30–365 days | X.X mo |
| 1–30 years | X.X yr |
| > 30 years or loss | ∞ |
Assumptions and Limitations
- Calculations are for a single CPU (not dual-socket)
- Used prices are approximate, vary by region and time of purchase
- Stale shares 0.5% is an average — depends on pool and latency
- Not accounted for: system downtime, hardware wear, taxes
- Formula verified for CryptoNote coins (Monero). Other coins may define difficulty differently
- Default electricity price: 6.1 ₽/kWh (≈$0.0727/kWh) — average Russian tariff. Can be changed in settings
- Month = 30 days (fixed multiplier)
Data Freshness
A freshness indicator is displayed at the bottom of every page:
- Gray — data updated less than 1 hour ago
- Yellow — data updated more than 1 hour ago
- Red — data unavailable