Storj (STORJ) — the revision ledger

Generated 2026-09-02T18:29:14Z from live ClickHouse queries against this estate's ledger. Point-in-time archive held for Storj: 20,243 observations · 74 distinct series · 4 upstream sources · first row 2026-08-09 17:15:20 · newest row 2026-09-02 17:50:30 · every one of the 20,243 rows carries a verify_url · 68 series refreshed in the last 24h (1,724 fresh rows). Nothing on this page is cached, estimated, or remembered.

What this page is. Data vendors restate history: a number they published for a date gets replaced later, silently, and everyone who stored the first answer either never notices or overwrites it. This estate keeps a machine detector over its daily snapshots for every cumulative-by-construction series, records the before-value beside the replacement, and serves the record at /v1/revisions. This page is the Storj (STORJ) view of that product: the live ledger for STORJ, the estate-wide feed as proof the detector works, the archive the detection runs over, and the exact commands to verify any of it without an account. It does not forecast, rank investment merit, or advise. Where a fact has a caveat, the caveat ships with the fact.

Provenance — where STORJ's archive comes from

4 source families feed this network's ledger. Every row they wrote carries its own source, as_of and verify_url; this table is the live rollup of that. The largest family is Storj's own node stats endpoint (https://stats.storjshare.io/nodes.json) — first-party telemetry from the network's own published API.

SourceRows heldSeriesRows w/ verify_urlWindow (UTC)Sample origin
first_party_api12,0644212,0642026-08-09 23:28:06 → 2026-09-02 17:34:01sample origin ↗
CoinGecko /coins/markets6,616236,6162026-08-09 17:15:20 → 2026-09-02 17:50:30sample origin ↗
storj_stats1,44931,4492026-08-12 19:27:37 → 2026-09-02 17:47:02sample origin ↗
github11461142026-08-09 23:42:07 → 2026-09-01 12:29:01sample origin ↗

Revision ledger — 1 backward revision(s) recorded for STORJ

Backward revisions are values upstream later replaced for a date this estate had already archived. The before-value is retained alongside the replacement — both snapshot dates, both numbers — which is what no overwriting vendor keeps. The ledger table is a ReplacingMergeTree the detector re-writes daily; this table shows the DEDUPED event set (min(detected_at) kept — the same dedupe rule /v1/revisions and the daily exports use). Raw detection rows behind this event set: 2. /v1/revisions?symbol=STORJ cross-check passed: the served API reports 1 row(s), matching the deduped ledger count rendered on this page.

First detected (UTC)MetricSnapshotWasRestated in snapshotBecameΔKindProvenance
2026-09-01 23:33:32disqualified_nodes2026-08-0980,2382026-08-1079,569-0.834%backward_revisiondepin_first_party · origin ↗

The daily-snapshot trail behind the revision (raw archive)

Straight from default.depin_daily at generation: the disqualified-nodes counter as each daily snapshot recorded it around the event. The 80,238 → 79,569 rewrite is visible in the held history — the 2026-08-10 snapshot already carried the replaced value, so the before-value exists only because this estate kept it. Snapshot 2026-08-09 is the date whose value upstream replaced.

Snapshot dateDISQUALIFIED_NODES valueSource
2026-08-0780,235depin_first_party
2026-08-0880,237depin_first_party
2026-08-0980,238depin_first_party
2026-08-1079,569depin_first_party
2026-08-1179,576depin_first_party
2026-08-1280,470depin_first_party

The per-satellite disqualification/exit counters (live rollup)

The aggregate DISQUALIFIED_NODES counter that was revised rolls up per-satellite series the estate also holds, from the same first-party source. Values below are the LATEST row per series in default.depin_onchain at generation — a gauge that moves, provenance attached.

SeriesLatest valueAs of (UTC)Provenance
disqualified_nodes_ap178,1442026-09-02 17:34:01first_party_api · origin ↗
disqualified_nodes_eu178,0752026-09-02 17:34:01first_party_api · origin ↗
disqualified_nodes_saltlake77,1272026-09-02 17:34:01first_party_api · origin ↗
disqualified_nodes_us181,0002026-09-02 17:34:01first_party_api · origin ↗
exited_nodes_ap16,1552026-09-02 17:34:01first_party_api · origin ↗
exited_nodes_eu15,7542026-09-02 17:34:01first_party_api · origin ↗
exited_nodes_saltlake6,5612026-09-02 17:34:01first_party_api · origin ↗
exited_nodes_us17,7422026-09-02 17:34:01first_party_api · origin ↗

The ledger, live — every restatement recorded estate-wide (18 deduped events)

Deduped on revision identity exactly as /v1/revisions dedupes it. This is the same feed a subscriber polls; it is rendered live from ClickHouse at generation, not copied from a snapshot. Each row is an upstream source replacing the value of a (network, metric, date) it had already published — after this estate recorded the original. The superseded value is retained, never deleted; that retention is the only reason a rewrite is detectable, and it is the part every overwriting vendor discards.

First detectedNetworkMetricWasBecameΔKindProvenance
2026-09-02 01:15:01GRTdl_fees_alltime_usd1,424,3161,423,345-0.068%backward_revisiondepin_first_party · origin ↗
2026-09-02 01:15:01GRTfees_alltime_usd1,424,3021,423,345-0.067%backward_revisionDefiLlama /overview/fees · origin ↗
2026-09-02 01:15:01OVPPtoken_transfers_total1,356,7491,354,903-0.136%backward_revisionevm_blockscout · origin ↗
2026-09-01 23:34:07ARblocks1,986,2201,702,204-14.299%backward_revisiondepin_first_party · origin ↗
2026-09-01 23:34:07ARblocks1,980,1161,702,204-14.035%backward_revisiondepin_first_party · origin ↗
2026-09-01 23:34:07ARblocks1,988,9301,702,206-14.416%backward_revisiondepin_first_party · origin ↗
2026-09-01 23:34:07ARblocks1,982,1761,702,204-14.124%backward_revisiondepin_first_party · origin ↗
2026-09-01 23:34:07AUKItoken_transfers_total1,230,1671,228,860-0.106%backward_revisionevm_blockscout · origin ↗
2026-09-01 23:34:07EIGENfees_alltime_usd161,955,683.53161,932,203.53-0.014%backward_revisionDefiLlama /overview/fees · origin ↗
2026-09-01 23:34:07GRTfees_alltime_usd1,419,3281,419,152-0.012%backward_revisionDefiLlama /overview/fees · origin ↗
2026-09-01 23:34:07GRTfees_alltime_usd1,419,5581,419,328-0.016%backward_revisionDefiLlama /overview/fees · origin ↗
2026-09-01 23:34:07R1token_transfers_total194,390194,337-0.027%backward_revisionevm_blockscout · origin ↗
2026-09-01 23:34:07SOGNItoken_transfers_total1,177,2191,174,145-0.261%backward_revisionevm_blockscout · origin ↗
2026-09-01 23:33:32GRTdl_fees_alltime_usd1,419,3221,419,152-0.012%backward_revisiondepin_first_party · origin ↗
2026-09-01 23:33:32GRTdl_fees_alltime_usd1,415,0541,414,119-0.066%backward_revisiondepin_first_party · origin ↗
2026-09-01 23:33:32GRTdl_fees_alltime_usd1,419,5661,419,322-0.017%backward_revisiondepin_first_party · origin ↗
2026-09-01 23:33:32STORJdisqualified_nodes80,23879,569-0.834%backward_revisiondepin_first_party · origin ↗
2026-08-13 15:35:15FLOCKdl_fees_alltime_usd1,170,614.61,170,544.16-0.006%sub_noisedefillama_fees · origin ↗

How detection works — and what it cannot see

The detector (propintel/revision_ledger.py) diffs every daily snapshot this estate holds of every cumulative-by-construction series — counters that cannot decrease unless upstream rewrote them (alltime fees, token transfers, block heights, node disqualifications). A row enters default.depin_revision_ledger iff two snapshots disagree for an already-observed date; zero human judgement. Resolution rule: latest observation wins for current-state reads, the superseded value is retained, never deleted. Population gauges (node counts, TVL, prices) legitimately move both ways and are deliberately excluded — a drop there is a real population change, not a rewrite. Honest boundary: this catches value-history rewrites ex-post; identical-schema semantic drift with plausible values is what the hash-pinned derivation_replay layer is for. The detector's full classification is inspectable at /v1/revisions and frozen daily at /revision-ledger/REVISIONS_20260902.json.

Verify any cell yourself — the exact commands

No account, no key, no trust required. Commands 1–2 hit this estate's public API (the same rows this page queried — every row carries source / as_of / verify_url); command 3 hits Storj's own stats endpoint, the first-party source the revision family came from; command 4 is the estate's graded network row; command 5 is the frozen daily snapshot of the ledger. One polite call per endpoint, no hammering.

# 1) The served revision feed for STORJ — the same rows this page queried, live:
curl -s "https://kairossignal.com/v1/revisions?symbol=STORJ" | python3 -m json.tool
# 2) The estate-wide feed (every network, both sides of every diff):
curl -s "https://kairossignal.com/v1/revisions" | python3 -m json.tool | head -80
# 3) Storj's own stats endpoint (the first-party source this ledger family came from):
curl -s -H "User-Agent: kairos-check" "https://stats.storjshare.io/nodes.json" | python3 -m json.tool | head -40
# 4) This estate's public API row for STORJ (grades + provenance):
curl -s "https://kairossignal.com/v1/network/STORJ" | python3 -m json.tool | head -60
# 5) The public daily snapshot of the ledger (frozen copy):
curl -s -o /dev/null -w "%{http_code}\n" "https://kairossignal.com/revision-ledger/REVISIONS_20260902.json"
Get this network as a data feed. Every number here is one API call away, with the same provenance fields — including the revision feed itself. Pricing · Self-register for free $5 API credits — no card, no human · API reference. Machine-readable row for this network: /v1/network/STORJ.

Method & honesty notes. All counts are queries against the live ledger at generation time, not restamped copy — this page is regenerated by gen_revision_page_storj.py and the hourly claim_drift_check.py run grades its claims against the live API like every other published surface. The STORJ revision count is the deduped live result of SELECT ... FROM default.depin_revision_ledger WHERE network='STORJ' GROUP BY revision identity; the page refuses to ship if the served /v1/revisions?symbol=STORJ disagrees with it. The 18 estate-wide events shown are deduped on revision identity (deterministic hash of network, metric, current_date, prior_date) exactly as the API dedupes them; detected_at is the first detection and never moves. Series absent from a section are absent, not zero. Upstream probes ran serially by this generator immediately before rendering: stats.storjshare.io/nodes.json (first-party) HTTP 200; estate /v1/revisions?symbol=STORJ HTTP 200; estate /v1/network/STORJ HTTP 200.

Machine-generated 2026-09-02T18:29:14Z by propintel/gen_revision_page_storj.py · source of truth: default.depin_catalog, default.depin_onchain, default.depin_daily, default.depin_revision_ledger (ClickHouse, live at generation) · Kairos Signal — provenance or silence.