Back to Documentation

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

  1. Coinbase Signature (scriptSig) — Most pools embed ASCII text identifying their pool name. Example: "/Foundry USA Pool #dropgold/"
  2. Payout Address — Some pools use consistent payout addresses that can be tracked over time.
  3. Block Template Patterns — Unique transaction ordering or template characteristics.
Data Source

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:

Market Share $$\text{Share}_i = \frac{B_i}{\sum_{j=1}^{n} B_j} \times 100\%$$
Where
$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":

Other Share $$\text{Share}_{Other} = \sum_{i=N+1}^{n} \text{Share}_i$$

Pool Hashrate Estimation

Since we can't directly measure pool hashrate, we estimate it from block share and network hashrate:

Estimated Pool Hashrate $$H_{pool} = H_{network} \times \text{Share}_{pool}$$
Where
$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:

Smoothed Pool Hashrate $$\bar{H}_{pool,t} = \frac{1}{7}\sum_{i=0}^{6} H_{pool,t-i}$$
Estimation Uncertainty

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

Total Fees by Pool $$F_{total,i} = \sum_{b \in \text{Pool}_i} F_b$$
Where
$F_b$
Transaction fees in block $b$ (satoshis)

Average Fee per Block

Average Fee $$\bar{F}_i = \frac{F_{total,i}}{B_i}$$

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 Ratio $$R_{zero,i} = \frac{|\{b \in \text{Pool}_i : F_b = 0\}|}{B_i} \times 100\%$$
Why Zero-Fee Blocks?

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

Mean Block Time $$\bar{T}_i = \frac{1}{B_i}\sum_{b \in \text{Pool}_i} T_b$$
Where
$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)
Interpretation

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:

Expected Streak $$E[\text{Streak}] = \frac{1}{1-s}$$
Examples
$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:

Streak Luck Ratio $$R_{streak} = \frac{\text{Actual Max Streak}}{E[\text{Max Streak}]}$$

Where expected max streak is derived from the total number of blocks mined and pool share.

Security Context

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.