BlockShield/Methodology

Methodology

Every rule below exists because something broke, was measured, and was fixed. They are not aspirations — each one is enforced in code and pinned by a test that fails if the fix is undone. This page publishes them because the way a number is refused matters as much as the number.

The shortest version: we would rather show you an absence with a reason than a plausible figure we cannot stand behind.

The rules

NULL is not zero.

An unpriced token, an unmeasured coin, a rate with no denominator and a period the source did not cover are all published as absent, never as 0. A zero and a missing value look identical on a chart and mean opposite things.

Measured: The rule also binds the WRITE layer. During a provider outage an empty sum was once stored as three exchanges' Bitcoin reserves; a completeness flag recorded the failure, but the value beside it was indistinguishable from a real zero to every later reader. An all-failed sweep is now refused.
Partial cannot erase.

A sweep that did not see everything never deletes what it did not see. Incomplete sweeps are stored marked incomplete; pruning happens only on complete ones, and history snapshots record completeness so charts can exclude partial sweeps instead of drawing them as enormous outflows.

Measured: Violating this once turned a $141M portfolio into $15M. In another module, a truncated supplement published hundreds of tokens as an empty universe — a market with no locked tokens in it.
A period that has not ended is not evidence — in either direction.

Every bucket on every time series carries whether it is complete, how many days it covers and how many the period holds. Streaks skip incomplete periods both ways, and a running period is drawn hatched with the reason beside it.

Measured: A widely shared claim of three consecutive negative months measured as two on the source it cited, with the third month two weeks old and positive.
A streak is computed, never quoted.

Claims of the form 'the first since 2023' are produced by walking the whole record and naming the precedent run that was found. A hard-coded year is a fact that silently expires.

No paid dependency, and sources fail over sequentially.

Every feature here works without a commercial data key. Where paid services exist they are optional accelerators. Failover is a sequence, never an if-else chain: a present-but-invalid key must fall through to the next source.

Measured: The branching version of this blinded whole chains — one unauthorised response erased an exchange's entire token layer on a major network.
A price is only as big as the market behind it.

Valuations taken from a decentralised pool are capped at twice the liquidity that priced them, and an implausibly large non-native position is treated as a pricing artifact until proven otherwise.

Measured: A pre-minted pool token once valued an entity at $2.67 quadrillion.
A price needs a market to EXIST — and that is a different question from how deep the market is.

Contract-level price sources will happily price a contract nobody trades. A price survives only while some market can be shown for that exact contract. The depth rule that is right for pool quotes is deliberately NOT applied here, because a major stablecoin's market is an exchange order book, not a pool — applying it rejected two thirds of the platform.

Measured: One dead token was priced several times above the live asset it shared a name with, on a contract that had gone more than two thousand days without a transfer.
Two series are never blended.

Where a measured series and a modelled one answer the same question, they are drawn separately, coloured separately, and never bridged across a gap. A modelled series is re-anchored to a real measurement and publishes its uncertainty as a band.

Measured: The same rule governs a dated one-time historical extract: it does not refresh, and the card says so on its face. An extract that stops announcing it is frozen becomes a live line that quietly is not.
Our mapping is declared as ours.

Where a definition had to be chosen — which provider bands make up a 'whale', which exchange clusters were subtracted, which coins a narrative contains — the choice is named on the surface that shows it, with the count it was made over. A hidden judgement cannot be argued with.

Activity is not identity.

Address labels carry their source, method and confidence, and an unknown address stays unknown. A transfer with no named owner on one side yields no label for that side, however large it is. No label is ever guessed from behaviour alone.

An outage is never cached as a value.

A failed fetch returns a sentinel the cache refuses to store, not an empty result. A failed taxonomy fetch that returned an empty list once cached a dark taxonomy for hours while the provider was answering normally in two seconds.

Measured: The same rule stops a five-minute blip pinning 'standing down' over a finished month for the rest of the day.
One snapshot, or two tabs disagree.

Shared computations read one cached universe rather than each fetching and wrapping their own. Two engines computing the same sector from two TTLs printed different numbers for the same sector at the same instant; after consolidation the two tabs matched to the cent.

A refusal carries its reason, and an absence is published.

When a dimension cannot be computed — no source configured, too few members, a failed cross-check — the surface says so with the reason. It never quietly disappears, and it never renders a plausible zero. A silently missing dimension reads as a fact about the world rather than a fact about our coverage.

Unverifiable is not verified.

Where an independent provider can disagree, it is asked. If it disagrees beyond tolerance, the value is withheld and the disagreement is named — there is no way from inside to tell which of two disagreeing sources is wrong, and publishing the wrong one under a familiar name is the exact failure the check exists to prevent.

Exact base units for token amounts; integers for money.

A 256-bit token amount has up to 78 digits and a 64-bit float silently eats them, so amounts are carried as exact integers and floats are display-grade only. Commercial balances are integer micros and are always the sum of an append-only ledger, never a stored column.

Every fix is pinned by a test, and the tests are pinned too.

When a hard-won fix lands it gains a row in a guard-of-guards file that asserts its test still exists and its mechanism is still wired. Deleting a failing guard is a decision, not a cleanup.

Where they are applied

Each metric page states which of these rules bite on that series, and what it cost when one of them did not.

Bitcoin Supply in Loss
How BlockShield builds Bitcoin Supply in Loss: a measured identity from 2022, a reconstruction re-anchored to realized price back to 2010, and the lambda band.
Bitcoin Whale Band Holdings
How BlockShield bands Bitcoin holders, why the whale headline is our mapping of a provider's bands, and why the ten-year reference cohort is a frozen extract.
Realized Capitalisation & Realized Price
Realized cap values every coin at the price it last moved at. How BlockShield sources it, why the partial figure stays flagged, and what it is a denominator for.
MVRV Ratio
MVRV is market cap over realized cap. BlockShield withholds it unless an independent provider agrees within 5% and the derivation is still exact.
Net Unrealized Profit/Loss (NUPL)
NUPL is unrealized profit as a share of market cap. How BlockShield derives it from realized cap, its bands, and why it is withheld when the cross-check fails.
Spent Output Profit Ratio (SOPR)
SOPR compares the price coins were sold at to the price they last moved at. How BlockShield stores it, how it is dated, and what sustained sub-1 actually marks.
All metrics in the library →

Limits

None of this is investment advice. Every score, band, label and verdict on this platform is an automated heuristic over public data, and each can be wrong in both directions.

If a number here looks wrong, the fastest route to an answer is usually the caveat published beside it — most of them exist because the number was wrong once.

Metric library · About · Terms · Dashboard