Key Takeaways
- What it is: The controls required to make a blockchain metric reproducible, reviewable, and resistant to silent data changes.
- How it is built: A reliable pipeline records node version, chain height, extraction query, transformations, labels, price source, time zone, exclusions, and revision history.
- Core expression: Reproducible metric = versioned source data + versioned transformation + versioned reference data + testable output.
- Best use: Quality is not merely accuracy at one moment. It includes completeness, consistency, lineage, revision handling, anomaly detection, and the ability for another analyst to reproduce the result.
- Main limitation: Public ledgers can still contain ambiguous intent; third-party labels and prices introduce external dependencies; historical chain support and archive-node access can be costly.
- Practical rule: Before trusting the headline value, confirm the data lineage is documented, the transformation steps are reproducible, and any third-party labels or price feeds it depends on are disclosed.
Who this guide is for
Blockchain data is often described as immutable, and analysts then assume the numbers derived from it are stable. They are not. A metric can change value for a date in the past for at least five distinct reasons, none of which involve the chain being rewritten.
Read this page if you publish anything with a date on it. It covers the specific mechanisms by which historical figures move, and the controls that catch each one. Where the sources page covers where a number came from, this page covers what happens to it afterwards.
Educational content. Not individualized financial advice.
What does on-chain data quality measure?
Data quality here means one specific property: whether a figure you recorded yesterday will still be the same figure tomorrow, and if not, whether you can tell.
The chain itself is append-only, but almost nothing you read is raw chain data. It has passed through selection, decoding, labeling, pricing, and aggregation, and each of those can be corrected after the fact. A corrected input rewrites the output for every past date it touched. The chart changes shape in the past, usually silently.
Plain-language definition
On-chain data quality is the discipline of knowing which of your numbers can still change, by how much, and why.
The five revision mechanisms
- Chain reorganization. Recent blocks are replaced. Affects only the most recent data and is bounded by finality.
- Backfill. A gap in ingestion is filled later, raising values for a past period that previously read low.
- Decoder correction. A contract interface is fixed, and activity that was previously invisible or misattributed appears.
- Label revision. An entity attribution changes, moving historical volume between categories.
- Price correction. A feed error is fixed, changing every currency-denominated value that used it.
Only the first is bounded in time. The other four can reach arbitrarily far back.
How is on-chain data quality constructed?
Reorganization and finality
A block that is valid now can be replaced if a longer or heavier chain appears. Proof-of-work chains have probabilistic finality, so confidence grows with depth but never reaches certainty; a policy of waiting a fixed number of confirmations is a risk choice, not a guarantee. Proof-of-stake chains with explicit finality gadgets provide a defined point after which reversal requires a large, penalized minority to act, which is a stronger property but still not an absolute one. Either way, the most recent data is the least stable, and any pipeline needs a stated policy for how deep to trust.
Backfill asymmetry
Ingestion gaps produce a characteristic signature: a period that reads low and then rises when the gap is filled. Because gaps produce undercounts rather than overcounts, an unexplained dip in a recent series is more likely to be a pipeline artifact than a real decline. Treat sudden drops in fresh data as suspect by default.
Decoder dependency
Contract activity is only visible if the interface is known. A newly deployed contract with no published interface is invisible to indexers until someone adds it, so a growing protocol can show near-zero activity purely because nobody has decoded it yet. When the interface is added, history is rewritten upward.
Label churn and price gaps
Entity labels are inferences that improve over time, and improvements are applied retroactively, so historical exchange flow series change shape as clustering gets better. Price feeds have outages, and how a pipeline fills them determines the artifact: zero-filling creates false collapses in value-denominated series, and forward-filling creates false stability that hides real volatility.
Formula and measurement logic
The relevant artifact is not a formula but a vintage: the value of a series as of a particular retrieval date.
Revision(d, v1, v2) = value(d, as of v2) − value(d, as of v1)
Storing each retrieval as a vintage rather than overwriting turns an invisible problem into a measurable one. After a few months of vintages you can state how much a given series typically revises and at what age it settles, which converts an unknown risk into a documented error band.
| Mechanism | Direction | How far back | Control |
|---|---|---|---|
| Reorganization | Either | Recent blocks only | Confirmation depth policy |
| Backfill | Upward | Any past gap | Completeness checks per block range |
| Decoder correction | Upward | To contract deployment | Track interface coverage |
| Label revision | Either | Entire history | Snapshot label sets with dates |
| Price correction | Either | Entire history | Archive the price series used |
How should on-chain data quality be interpreted?
The practical consequence is that the most recent data point on any chart is the least reliable one, and it is also the one everybody reads. Analysis reverses the usual reading order for good reason.
Reading rules
- Discount the newest points explicitly. The final few observations are provisional. Marking them as such on a chart is a one-line change that prevents most revision-driven errors.
- Treat fresh dips as suspect. Backfill produces undercounts, so a sharp recent decline should be checked for completeness before being interpreted.
- Distrust an unchanged historical shape after a label update. If a provider announces improved clustering and the historical series looks identical, either the improvement was trivial or you are looking at a cached chart.
- Separate value revisions from quantity revisions. A currency-denominated series can revise purely from a price correction with no change to the underlying activity.
Two figures for the same date from different retrieval dates are not a contradiction and do not mean one source is wrong. They are two vintages, and the difference is information about how much that series moves. Recording it is more valuable than resolving it.
Step-by-step workflow
- Set and document a confirmation depth before trusting recent blocks.
- Run completeness checks per block range to detect ingestion gaps rather than discovering them as apparent declines.
- Snapshot the label set with a date whenever an entity-based series is produced.
- Archive the price series used, not just the resulting currency values.
- Store each retrieval as a dated vintage instead of overwriting.
- Mark provisional points explicitly on any published chart.
- Re-pull a sample of past dates periodically and record the revision size.
- State the missing-data policy, since zero-fill and forward-fill create opposite artifacts.
Worked hypothetical scenario
A daily transfer volume series is pulled on three occasions. The value for a single date, 3 March, is recorded each time.
| Retrieved | Value for 3 March | Change | Cause identified |
|---|---|---|---|
| 4 March | $4.10bn | Initial | Provisional; indexing incomplete |
| 11 March | $5.60bn | +37% | Backfill of an ingestion gap |
| 2 June | $4.95bn | −12% | Label revision reclassified internal transfers |
Three values for one unchanging day. The chain did not change; the blocks of 3 March are exactly as they were.
An analyst who pulled on 4 March and published would have understated by 21 percent against the June figure. One who pulled on 11 March and published would have overstated by 13 percent. Neither would have known, because neither kept a second vintage.
The analyst who stored all three learns something the others cannot: this series revises upward in the first week and can revise either way for months, so any conclusion resting on a difference smaller than about 15 percent is not supported by data of this quality. That error band is the actual output of the exercise, and it is only obtainable by keeping vintages.
What can make the interpretation wrong?
- Assuming immutable chain means immutable metrics. The chain is append-only; the derived series is not, because selection, decoding, labeling, and pricing all revise.
- Publishing the newest point without marking it provisional. It is the least reliable observation on the chart and the most read.
- Reading a backfill gap as a decline. Ingestion gaps undercount, so fresh dips are suspect by default.
- Overwriting rather than versioning. Without vintages, revisions are invisible and unquantifiable.
- Undecoded contracts read as inactivity. A protocol can appear dormant purely because no interface definition exists yet.
- Zero-filling price gaps. Creates false collapses in currency-denominated series. Forward-filling creates the opposite artifact.
- Not archiving the label set. Retroactive clustering improvements change historical category series with no notice.
- Confusing a vintage difference with a source error. Two dates of retrieval produce two legitimate values.
Cross-network and provider comparison
Which revision mechanism dominates depends on the chain.
On Bitcoin, reorganization is the main concern and it is shallow and infrequent. There is almost no decoding, so decoder correction is nearly absent. Label revision is the largest residual issue because exchange clustering drives most of the interesting series.
On account chains with heavy contract activity, decoder correction becomes the dominant mechanism. The set of contracts with published interfaces grows continuously, and every addition rewrites history upward for whatever that contract does. Coverage is therefore a first-class quality measure and is rarely disclosed.
Chains with explicit finality gadgets bound the reorganization problem more tightly than probabilistic finality does, which shifts the risk profile toward the other four mechanisms rather than eliminating revision.
Rollups introduce a distinct timing question: a transaction can be sequenced, then published to the base layer, then finalized there, and different sources treat different points as authoritative. A figure can legitimately differ between sources purely because they draw the line at different stages of that pipeline.
Advanced analytical methods
Vintage archives
Storing every retrieval with its date is the foundational control. It converts revision from an invisible hazard into a measurable property with a documentable error band.
Completeness assertions
Asserting expected block counts and transaction counts per range catches ingestion gaps at load time rather than months later when a chart looks odd. This is a cheap check that catches the most common silent failure.
Interface coverage tracking
Measuring what share of contract calls in a period could be decoded gives a direct quality figure for account chains. A rising coverage percentage explains a rising activity series without any change in real activity.
Dual-lineage reconciliation
Computing a critical series through two independent paths and monitoring the spread turns silent divergence into an alert. The spread is a better error estimate than any single provider's stated precision.
Revision-aware backtesting
Any historical test of a rule must use the data as it existed at the time, not as it is now. Testing on revised data uses information that was not available then, which inflates apparent performance for reasons that have nothing to do with the rule.
Practical checklist
- I set and documented a confirmation depth.
- I ran completeness checks on the block ranges involved.
- I snapshotted the label set with a date.
- I archived the price series, not just the currency values.
- I stored this retrieval as a dated vintage.
- I marked provisional points on anything published.
- I stated the missing-data policy.
- I checked interface coverage if the chain has contract activity.
- I used point-in-time data for any historical test.
Frequently Asked Questions
If blockchains are immutable, why do on-chain metrics change?
The chain is append-only but almost nothing you read is raw chain data. It has passed through selection, decoding, labeling, pricing, and aggregation, and each of those can be corrected after the fact. A corrected input rewrites the output for every past date it touched, usually silently.
What are the ways a historical figure can change?
Five mechanisms: chain reorganization, which affects only recent blocks; backfill of an ingestion gap; decoder correction when a contract interface is fixed; label revision when an entity attribution changes; and price correction. Only reorganization is bounded in time. The other four can reach arbitrarily far back.
Why is a sudden drop in recent data usually suspicious?
Because ingestion gaps produce undercounts rather than overcounts. A period missing data reads low and then rises when the gap is backfilled. An unexplained dip in fresh data is therefore more likely to be a pipeline artifact than a real decline, and should be checked for completeness first.
What is a data vintage and why keep one?
A vintage is the value of a series as of a particular retrieval date. Storing each retrieval instead of overwriting turns an invisible problem into a measurable one: after some months you can state how much a series typically revises and at what age it settles, which converts an unknown risk into a documented error band.
How should missing price data be handled?
With a stated policy, because the two obvious choices create opposite artifacts. Zero-filling creates false collapses in currency-denominated series. Forward-filling creates false stability that hides real volatility. Neither is wrong in every case, but an undisclosed choice makes the resulting series uninterpretable.
Do two different values for the same date mean a source is wrong?
Not necessarily. They may be two vintages retrieved at different times, both legitimate given what was known when each was pulled. The difference is information about how much that series moves, and recording it is more valuable than trying to decide which one is correct.
Why must historical tests use point-in-time data?
Because testing a rule on revised data uses information that was not available at the time the rule would have been applied. Backfills, label corrections, and decoder fixes all improve the historical record after the fact, which inflates apparent performance for reasons unrelated to the rule itself.
What is a chain reorganisation, and how should a pipeline handle one?
A reorganisation occurs when a chain discards recently accepted blocks in favour of a competing branch, so transactions that appeared confirmed are undone or reordered. Any pipeline reading the tip of the chain will have ingested data that no longer exists. The standard defence is a confirmation depth: treat blocks as final only after a set number of subsequent blocks, and re-derive anything within that window rather than appending to it. Depths differ by network according to their finality properties.
How should a metric handle a network upgrade that changes the data?
By treating the upgrade as a break in the series rather than as a continuation. Protocol changes can alter what a field means, introduce new transaction types, change fee accounting or change how state is recorded, so a metric computed the same way before and after can be measuring different things. The defensible approach is to document the upgrade date in the series metadata, verify whether the definition still holds, and where it does not, show the two periods separately rather than splicing them.
References
These sources should be reviewed during editorial verification. They support data structures and methods, not the hypothetical conclusion. Provider formulas, chain rules, and APIs can change, confirm current documentation before publication.
- Bitcoin Developer Guide: Block Chain: Bitcoin ledger, blocks, proof of work, and transaction history.
- Bitcoin Developer Guide: Transactions: UTXO transaction construction and spending.
- Ethereum.org: Technical Introduction: Accounts, execution, proof of stake, and smart contracts.
- Ethereum.org: Transactions: Ethereum transaction fields and execution.
- Coin Metrics: Network Data Glossary: Cross-network address, account, ledger, and UTXO definitions.
- Coin Metrics: Getting Started With Data: Network, market, index, and reference data.
- Dune: Data Explorer and Raw Tables: Blocks, transactions, logs, traces, and decoded data.
- Dune: Address Labels: Address labeling and entity context.