Mining Geography: What Can Be Measured and What Cannot

BSAHI — reducing third-party dependence, item 3 Produced: 2026-09-19

Claim tested

The independence scorecard lists Mining geography as "inherently external — pools don't disclose". This note tests that claim: can mining's geographic distribution be measured or reverse-engineered FIRST-PARTY, the way we did for the node population (crawler), geography (offline ASN DB) and validation cost (reindex)?

Methods surveyed (literature + practice)

MethodWhat it yieldsWho uses itVerdict here
Pool-declared facility IPs, aggregated by the poolhashrate by country/regionCBECI / CCAF mining mapNeeds pool cooperation. Not reproducible.
Pool stratum endpoint IP → geolocate"where the pool is"common shortcutDead — measured below.
Miner Entanglement: connect to pools as a sub-miner, time their block notificationspool block-reception latencyCao et al., Characterizing the Impact of Network Delay on Bitcoin Mining, SRDS 2021Needs a miner/worker registration; gives latency, not location.
On-chain exchange-flow inference: trace coinbase → where miners cash out → exchange's regionminer region, majority of hashrateMakarov & Schoar, Blockchain Analysis of the Bitcoin Market, NBER w29396Real, first-party-capable — but needs full address clustering + exchange labelling (research-scale).
Passive topology / minimum-spanning-tree from broadcast timinginfer the broadcasting (mining) nodeMariem et al., Vivisecting Blockchain P2P Networks, 2018Needs many vantage points + RTT matrix. Single-vantage here.
Published supplementary dataset (desensitized, per-location hashrate)2018–2019 monthly gridSun et al., Spatial analysis of global Bitcoin mining, Sci. Rep. 2022Historical only; importable but not current.

Measured evidence (this environment, 2026-09-19)

tools/net/pool_infrastructure.py resolves each pool's public stratum hostname, geolocates it with the offline ip2asn DB, and probes TCP RTT:

PoolHostnameCountryASN orgCDN
F2Poolbtc.f2pool.comUSCLOUDFLARENETyes
ViaBTCbtc.viabtc.comUSCLOUDFLARENETyes
AntPoolstratum.antpool.comUSCLOUDFLARENETyes
Binance Poolstratum.binance.comUSAMAZON-02yes
Braiins/Slushstratum.braiins.comUSCLOUDFLARENETyes
Foundry USAfoundryusapool.comUSCLOUDFLARENETyes
Kanojp.kano.isUSAS-VULTRno

10 of 14 resolved addresses are CDN-fronted. The country/ASN returned is the edge's, not the pool's origin — and the pool's workers (the miners we actually want) never appear in any of it. Pool-endpoint geolocation is therefore not a mining-geography method at all; it is a CDN-geography method.

Verdict

Mining geography is not first-party measurable from a single node. Two paths exist and both are out of reach here:

  1. Pool cooperation (the CBECI method) — the only direct measurement. Not obtainable without partner-pool agreements.
  2. On-chain exchange-flow inference (the Makarov–Schoar method) — genuinely first-party in principle, and the strongest available substitute. It requires (a) full historical transaction-graph clustering and (b) a labelled exchange-address corpus. Neither is buildable in this repo today, and both are blocked while the node reindexes.

Everything a single node can measure about mining — pool block share via coinbase tags — is concentration, not geography. That distinction is the honest boundary, and it is why the scorecard keeps this row external.

What is in use instead

An automatic source ladder in tools/research/mining_geography.py:

  1. CBECI mining-map CSV in captured-data/cbeci/ (monthly, authoritative, pool sample ~32–38%) — preferred if the operator drops one in; the CBECI API itself is reCAPTCHA-gated and is deliberately not scraped.
  2. Hashrate Index (Luxor) quarterly heatmap — public HTML, parsed automatically (currently Q3 2026: US 36.7%, Russia 17.2%, China 12.2%, covering 85.1% of global hashrate). Both are labelled estimates.

What would unblock a first-party answer

← All research · ← Back to Learn