Trust · verifiable rules
Methodology
What the tools actually do, the heuristics behind the Brief, and where the limits are. Stated plainly, because the whole point is to be verifiable rather than authoritative.
Radar
The radar fetches the list of recent blocks from mempool.space/api/blocks, then downloads the
full transaction summary of each covered block via /api/v1/block/{hash}/summary — every
transaction, not a sample. It keeps the ones whose total output value is at or above the chosen threshold
(10, 50, 100, or 500 BTC) and fetches BTC/USD from CoinGecko for the approximate dollar column.
Each block is scanned once; a poll every minute checks whether a new block arrived. Everything runs in your browser, in memory only.
For each displayed row the radar also fetches the transaction detail and checks its input and output addresses against the open label directory — exact match only, the same rule the Brief uses. The BTC column is the sum of outputs, so it includes change returning to the sender; read reading large transactions before quoting numbers. Not trading signals.
Brief heuristics
Given a transaction id, we fetch mempool.space/api/tx/{txid} and apply structural rules:
| Pattern | Rule (simplified) | Typical certainty | Known failure modes |
|---|---|---|---|
| Labeled touch | Exact address match; if output sum ≥50 BTC then probably when two+ entities or ≥200 BTC, else possibly. Labeled and <50 BTC → possibly. This rule is checked first. | Probably / possibly | Stale tags; dust to a famous script; label on one output among hundreds |
| Consolidation | No prior rule; more than 3 inputs and exactly 1 output | Possibly | Internal shuffles; CoinJoin-like txs that happen to collapse; unlabeled destination |
| Distribution | No prior rule; 1 input and more than 4 outputs | High uncertainty | Dust to famous addresses; change misread as payout |
| Simple transfer | No prior rule; exactly 1 input and 1 output (not 1→2 change) | High uncertainty | Still no identity; 1→2 payment+change falls through to unlabeled |
| Unlabeled / other | Everything else, including typical 1→2 spends and many-to-many | High uncertainty | CoinJoin-like equal outputs; complex scripts |
Those rows are the shipped rules in classifyMovement — not an aspirational
marketing table. Certainty is structural. A “probably” never means “this is a sale” or “this address is owned
by X in court.” The summary carries the qualifier in English and lists decision logic step by step. See worked
cases on Examples.
Worked example (logic only)
txid: 61b5cc645177843e8514e18a19faf162a19247c8bb4f25519b57c166e9df302c
- Fetch tx → 147 inputs, 1 output.
- Classify shape → consolidation (many → one).
- Sum input values → ~22,024 BTC total moved.
- Match labels on inputs → Bitfinex (high confidence) on input side.
- Emit summary with probably — structural match strong; intent not stated.
Worked example (distribution + noisy label)
txid: 900d114ebb2cd6f9daae5f4474a0f7dce9292d51c5478810fa21939c19fb885f
- Fetch tx → 1 input, 402 outputs, ~0.64 BTC total.
- A single output matches the Mt. Gox hack stolen-funds address in labels.json.
- Labeled-touch rule fires, but size is small → certainty stays possibly.
- Correct structural flag; wrong narrative if you write “Mt. Gox moved funds.” Someone dusted a famous script.
- This is why we show side (out) and refuse to upgrade dust into a whale story.
Explorer: mempool.space ↗. Narrative: Examples §2.
Labels
The directory is exact-address-match against a manually curated list. Each entry records a category, a confidence level, and a public source. It is intentionally small and conservative. We do not cluster addresses or infer ownership. Contribution criteria: Labels page and Contact.
Limits, honestly
- Real ownership and intent are not knowable from public chain data alone.
- Address reuse and exchange internals mean labels can be stale or partial.
- The dollar values are approximate and depend on a live price feed that can fail.
- The radar covers only the most recent blocks (about the last 80 minutes) — it is a window, not an archive.
- A transaction's output total includes change; "X BTC moved" on-chain is an upper bound on what changed hands.
- None of this is financial advice or trading signals.
Sources
mempool.space REST API, CoinGecko simple price, and the per-entry sources cited in the label directory. Code is open on GitHub. API availability is not guaranteed.
- Bitcoin Developer Guide — Transactions
- BIP 125 (opt-in RBF)
- mempool.space REST API
- Shipped classifier:
src/js/lib/brief-pure.js(classifyMovement)