Skip to content

feat: rollup blobspace efficiency report cards - #238

Draft
a-thomas-22 wants to merge 3 commits into
mainfrom
claude/interesting-pascal-cf50e8
Draft

a-thomas-22 wants to merge 3 commits into
mainfrom
claude/interesting-pascal-cf50e8

Conversation

@a-thomas-22

@a-thomas-22 a-thomas-22 commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Draft: blocked on blob contents. The headline metric (blob fill) cannot
be computed from the data the indexer exposes today. blob_size_bytes is
the allocated EIP-4844 blob size, not the size of the meaningful data
inside it, so it reads exactly 131,072 for every blob (verified: 100 of 100
in a live mainnet sample). Every rollup therefore scores a perfect 50/50 on
fill, and the "who ships half-empty blobs" half of the premise reduces to a
constant. The remaining two metrics (tip vs median, fee cap headroom) do
work and do separate rollups, but they only measure overpaying, not
capacity waste.

Unblocking this needs actual blob contents so real payload bytes can be
measured against the 131,072-byte capacity. Parked until then; the grading
logic and rubric already treat fill as the heaviest weighted input, so it
can be revived without reshaping the scoring.

Summary

Adds an /efficiency page: per-rollup report cards grading how well each rollup uses blobspace over a recent sample. The angle is competence, not volume: half-empty blobs and overpaying for inclusion lose points.

  • Pure aggregation and grading logic in src/lib/efficiency.ts with colocated Vitest tests (27 tests) covering missing optional fields, zero blobs, unparseable numeric strings, and unattributed senders grouped as Unknown.
  • Metrics per rollup over the most recent 300 blobs (the feed is paged, so the sample is bounded and its size is labeled on the page): average blob fill vs the 131,072-byte capacity, average tip per blob gas vs the sample median, and average fee_cap_headroom_percent as an overbidding indicator.
  • Rubric (documented verbatim on the page so grades are defensible): blob fill 50 pts linear; tip discipline 30 pts, full at or below the median falling to zero at 4x; fee cap discipline 20 pts, full at or below 50% headroom falling to zero at 100%, neutral midpoint when no headroom data exists. Scores map to A+ through F on a standard 60-100 scale.
  • Report-card UI with entity logos (AttributionBadge), big Windsor Bold letter grade, three metric rows with per-metric point bars, dark theme, screenshot-friendly grid.
  • Wired into header nav and sitemap; uses DataStateWrapper, useApiData, and useNetwork per existing patterns; refreshes every minute.

Verified against live mainnet data: grades currently spread from A+ (Unknown, Taiko) through B- (the OP-stack chains, which all bid a fixed 1 gwei cap at a 0.003 gwei base fee).

Notes

  • No dynamic Open Graph image: the repo has no opengraph-image.tsx infrastructure yet, so OG was skipped per the task instructions.
  • npm run lint (one pre-existing warning in LatestBlocksTable, untouched), npm run typecheck, and npm test (423 tests) all pass.

🤖 Generated with Claude Code

Grades each rollup on how well it uses blobspace over the most recent
300 blobs: average blob fill against the 131,072-byte capacity, average
tip vs the sample median, and average fee cap headroom as an overbidding
indicator. Scores map to letter grades through a rubric documented on
the page. Unattributed senders are grouped as Unknown.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blob-flow Ready Ready Preview Aug 9, 2026 5:12am

Request Review

a-thomas-22 and others added 2 commits August 9, 2026 00:09
Resolves nav and sitemap conflicts against the new /records and /live
pages, and adopts the network-scoped NetworkLink header. Adds an
efficiency Open Graph card now that main provides the OG rendering
infrastructure the original task made it conditional on.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Satori mispositioned the footer caption when the columns and caption
were wrapped in a fragment, pushing it into the header row. Render the
three sections as direct flex children instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant