Dataset · v1 · sealed 2026-07-29
The Scaling War
Bitcoin's governance history, read out of one 4-byte field.
Every block carries a version number. For six years, miners used it as a ballot — voting on Bitcoin XT, Bitcoin Classic, CSV, SegWit and Taproot. Then the machines took the field over and turned it into extra mining entropy.
This is that entire history, extracted block by block from genesis to tip, with each signal bounded to the era in which it actually meant something.
Price
$19
Tables
4
Rows
1,037,870
Download
14.6 MB
Formats
Parquet + CSV
One-time purchase. Instant download, no account, no subscription.
Send exactly this amount to this address. It is derived fresh for your order, from our own wallet — no payment processor sits in between.
Amount
Address
Order — keep this. It is the only
record, and it re-derives your address and download link at any time.
Watching the chain…
Everything needed to judge this dataset — manifest, samples, verifier, Bitcoin timestamp — is free below, right now.
Why this isn't free data
The era bound is the product
A block's height and version are in every free chain dump on the internet. Extracting them is worth nothing. Knowing what they meant, and when, is the whole job.
Bit 28 is the clearest case. In 2016 it means "I vote for Bitcoin Classic." From 2018 the same bit is mining entropy, because BIP320's version-rolling mask covers bits 13 through 28. Ask the obvious question — how many blocks signalled Classic? — and the answer depends entirely on whether you knew that:
Era-bounded (correct)
2,176
Unbounded (wrong)
64,928
Error factor
29.8×
Thirty times wrong — and the wrong number looks completely reasonable. We know because our own first query returned it. Both figures ship in the manifest, side by side, so you can run them yourself and see exactly what the bound is worth.
Bits 0, 1 and 2 — CSV, SegWit and Taproot — sit outside the rolling mask and need no such restriction. Knowing which bits need bounding is the same job.
Check us before you pay
Free downloads
Sample rows
1,000 real rows of the era-bounded signal table, and the complete version-rolling-by-year series.
The manifest
Schemas, per-column digests, and every figure with the exact SQL behind it — including the deliberately wrong one.
The proof
Root hash and OpenTimestamps receipt, committing this dataset to the Bitcoin blockchain.
The verifier
Recomputes everything from the files alone, and re-runs every control against your own copy.
6a9e8c9543e1aae312c561333b6a1ab206a018ba40b657e37d23027c67a2bd98
Contents
What's in the box
| Table | Rows | Parquet | CSV | What it is |
|---|---|---|---|---|
| block_versions | 960,044 | 6.72 MB | 41.36 MB | The raw seam: height, time, version (signed and unsigned) |
| signal_blocks | 77,597 | 0.57 MB | 6.55 MB | Every era-bounded signalling block, per proposal |
| bip9_signalling_monthly | 211 | < 0.01 MB | 0.01 MB | Monthly signalling share per bit |
| version_rolling_by_year | 18 | < 0.01 MB | < 0.01 MB | Rolling share and distinct version count per year |
signal_blocks carries an era_rule column stating, in plain
text on every row, the exact rule that admitted it. The bounds are not buried in our
code — they travel with the data.
Schema
block_versions height BIGINT · block_time TIMESTAMP · version INTEGER
version_unsigned BIGINT
signal_blocks proposal VARCHAR · height BIGINT · block_time TIMESTAMP
version BIGINT · era_rule VARCHAR
bip9_signalling_monthly month · blocks · csv_bit0_pct · segwit_bit1_pct
taproot_bit2_pct (and companions)
version_rolling_by_year year INTEGER · blocks BIGINT · rolled_pct DOUBLE
distinct_versions BIGINT
Use version_unsigned for any bit masking. The version field is stored
signed, and the signed form silently inverts every high-bit test — a trap we ship
pre-sprung rather than let you find.
Quality
The controls this build had to pass
The export deletes its own output if any of these fail. All four run against the delivered files — not our internal database — so you can re-run every one of them:
- classic_bit28_absent_in_2015 — Bitcoin Classic did not exist in 2015, so its bit must be unset for the whole year. This is the control that proves the era bound does real work instead of being decoration.
- taproot_silent_before_deployment — April 2021, the month before signalling opened: zero of 4,073 blocks.
- versions_normalise_unsigned — if normalisation failed, every mask in the dataset would invert.
- seam_is_gapless — one row per block from genesis, no holes. A gapped seam under-counts every signal without ever looking wrong.
Honest limits
What this is not
- Signalling records stated intent, not identity. A set bit says a block template carried it, not who ran the miner.
- Pool attribution is not included in this dataset. Coinbase tags are self-reported and proxy pools blur them.
- It is a snapshot to block 960,043. The chain keeps moving.
- Era bounds are our judgement, stated explicitly in the
era_rulecolumn. Disagree with one, and you can re-derive the whole table fromblock_versionsunder your own rule.