Mining Pool Analytics
Pool identification, market share, and performance metrics
Pool Identification
Mining pools are identified by analyzing the coinbase transaction in each block. Pools typically embed identifying information in two locations:
Identification Methods
- Coinbase Signature (scriptSig) — Most pools embed ASCII text identifying their pool name. Example: "/Foundry USA Pool #dropgold/"
- Payout Address — Some pools use consistent payout addresses that can be tracked over time.
- Block Template Patterns — Unique transaction ordering or template characteristics.
ELEKTRON maintains a curated database of pool signatures, updated as pools change their tags or new pools emerge. Blocks without identifiable signatures are marked as "Unknown."
Known Limitations
- Unknown pools: Some miners don't tag blocks (solo miners, stealth pools)
- Tag spoofing: Anyone can include any text in coinbase (rare in practice)
- Pool rebranding: Pools change names or merge, requiring database updates
- Sub-pools: Some pools operate multiple sub-entities with different tags
Market Share Calculation
Pool market share is calculated from the number of blocks mined in a given period:
- $B_i$
- Blocks mined by pool $i$ in the period
- $n$
- Total number of identified pools
Aggregation Options
| Method | Formula | Best For |
|---|---|---|
| All-time | All blocks in dataset | Historical overview |
| Date range | Blocks within date filter | Period comparison |
| Rolling window | Last N days/blocks | Current state tracking |
"Other" Category
For visualization, pools below a threshold (default: top 10) are grouped into "Other":
Pool Hashrate Estimation
Since we can't directly measure pool hashrate, we estimate it from block share and network hashrate:
- $H_{network}$
- Network hashrate (see Blockchain docs)
- $\text{Share}_{pool}$
- Pool's block share (as decimal, 0-1)
7-Day Rolling Average
To smooth daily variance, ELEKTRON applies a 7-day rolling average to pool hashrate estimates:
Pool hashrate estimates have significant uncertainty, especially for smaller pools with fewer blocks. Daily estimates can vary ±30% or more from actual hashrate. Use longer averaging periods for more reliable estimates.
Fee Collection Analysis
Each block collects transaction fees in addition to the block subsidy. We track fee collection by pool:
Total Fees
- $F_b$
- Transaction fees in block $b$ (satoshis)
Average Fee per Block
Zero-Fee Blocks
Blocks with only the coinbase transaction (no other transactions) collect zero fees. These are tracked as indicators of mining behavior:
Zero-fee (empty) blocks typically occur when a pool finds a block before fully validating the mempool — often during the first few seconds after a new block is announced. High rates may indicate aggressive SPV mining.
Block Time Metrics
We analyze block times for each pool to detect patterns:
Average Block Time
- $T_b$
- Time between block $b$ and previous block (seconds)
Block Time Statistics
| Metric | Formula | Interpretation |
|---|---|---|
| Median | $\tilde{T}_i$ | Typical block time (robust to outliers) |
| Std Dev | $\sigma_{T,i}$ | Consistency of block timing |
| Min | $\min(T_b)$ | Fastest block (luck indicator) |
Pool-specific block times should average close to 10 minutes regardless of pool size (over large samples). Persistent deviations may indicate hashrate changes or unusual mining behavior.
Consecutive Blocks
We track "streaks" — consecutive blocks mined by the same pool. These are interesting for several reasons:
- Luck indicator: Long streaks indicate good fortune
- 51% attack simulation: Shows theoretical attack windows
- Pool dominance: Larger pools naturally have longer average streaks
Expected Streak Length
For a pool with share $s$, the expected number of consecutive blocks follows a geometric distribution:
- $s = 10\%$
- Expected streak ≈ 1.1 blocks
- $s = 25\%$
- Expected streak ≈ 1.3 blocks
- $s = 50\%$
- Expected streak = 2 blocks
Maximum Streak by Pool
We track the longest consecutive block streak for each pool. Comparing to expected values:
Where expected max streak is derived from the total number of blocks mined and pool share.
Long streaks (e.g., 6+ consecutive blocks) by a single pool enable short-term reorganization attacks. While normal for large pools, persistent long streaks warrant monitoring.