Shelfware

Rendered from JUDGE.md · census 2026-09-18T22:16:17Z · no login, no key, no cookies — every link is public

For judges

Everything you need in one page. No setup, no key, no account. Built on the CoinMarketCap API for the Build with CMC: API Hackathon — Real World Assets track.

The claim

CoinMarketCap's RWA surface says whether an asset is tokenised. It does not say whether any wrapper of it has a market. Joined to the cryptocurrency map's listing state, 476 of the 791 underlyings it flags has_tokens: true — 60% — have no wrapper with a CMC-tracked market.

The 30-second path

git clone https://github.com/edycutjong/shelfware.git && cd shelfware
python3 -m shelfware MS

Nothing else is required: the package is stdlib-only, the state leg is keyless. You will see Morgan Stanley's one wrapper (wMSx, Backed Assets, X Layer), its price: null, and its listing state UNTRACKED fetched live from /public-api/v1/cryptocurrency/map — with CMC's own definition of the word beside it, the day it was listed, and the receipt line (endpoint, HTTP, credits, sha256).

Or open shelfware.edycu.dev: the census, the issuer table, and the same ticker question live through the site's proxy. Type NVDA for a mixed case (7 of 8 wrappers tracked; Dinari's is not), GILD or PLD for more shelf, GOLD for a commodity that trades. Open the evidence drawer on any answer for the raw tokens[] entry, the raw map row and the raw info row.

  1. The two facts come from the same API and disagree. has_tokens: true is from the RWA map; status: untracked is from the cryptocurrency map. The product is that pair, one row at a time; the issuer table is the same pair 772 times (Backed Assets: 632 of 772 on the shelf).
  2. The number is a count, not a model. Two jq filters over the committed rows reproduce it; python3 -m shelfware verify does the same and fails on drift. See DEMO.md.
  3. The word is CoinMarketCap's. "untracked" means listed, no CMC-tracked market, and the surfaces say so — never "never traded". The spike that settled the wording is committed.

Receipt — live census, 2026-09-18T22:16:17Z

Wall clock40.9 s, 54 calls
Rows7,811 underlyings · 791 has_tokens · 1,435 wrappers · 25 issuers · 38,682 map rows
Keyed credits5/v1/key/info read 12,020 → 12,025 before and after
Keyless calls15, charged to no key
The number476 of 791 tokenised underlyings with no wrapper that has a CMC-tracked market (60%); stocks alone 437 of 689 (63%); 673 of 1,435 wrappers untracked
IssuersDinari 27 / 27 on the shelf · Backed 632 / 772 (82%, $669M live in the rest) · Robinhood 8 / 106 · Ondo 4 / 214 · bStocks 0 / 77
Tests121 (104 offline in ~1 s, 11 for the proxy functions, 6 live against the real contract and this page's route), 9 named for the defect they pin, one property over 500 generated ledgers
Latencyticker question p50 552 ms keyless (p95 603 ms); the join itself 1.2 ms
Raw receiptsdocs/proof/live_run.json · ms.json · bench.json · spike.json

Reproduce

python3 -m shelfware MS                 # the ticker question, keyless
python3 -m shelfware NVDA               # a mixed one
python3 -m shelfware verify             # recount the headline from data/census.json
make test                               # 104 offline tests
make test-live                          # 6 live tests, keyless
export CMC_API_KEY=… && make census     # the full census, ~5 credits (a free Basic key is enough)

Why only CoinMarketCap

The wrapper roster with its null-price rows exists in exactly one place: tokens[] on /v5/real-world-assets/quotes/latest. The listing state that explains the nulls exists in exactly one place: status on /v1/cryptocurrency/map. Delete CoinMarketCap and both ledgers vanish; recovering them would take an issuer-by-issuer catalogue crawl and a per-venue market census. Six endpoints are used (named in ARCHITECTURE.md); a seventh, market-pairs/list, was tried and is plan-gated on Startup — recorded, not built on.

Honest limitations

Twelve dated findings for the CMC team are in FEEDBACK.md.

Links

Run itDEMO.md — transcripts + receipts
How it worksARCHITECTURE.md — derived from the code · docs/METHOD.md — the rules and invariants
The fielddocs/COMPARISON.md
API feedback for CMCFEEDBACK.md
The engineshelfware/ — 1,573 lines, stdlib only
Liveshelfware.edycu.dev · /api/health · this page, served with no auth: /judge