@clementvial

Developer from Canada 🇨🇦
Product, infrastructure, AI, and web3.
Mostly on AWS and Cloudflare.

All notes

EIP-4844 Made L2s Cheap and Broke My Indexer

Dencun activated on March 13 and L2 fees fell off a cliff, roughly an order of magnitude on the chains I watch. Then a small indexer of mine stopped seeing data, on the same day, for the same reason.

It read rollup batches out of transaction calldata. Those batches are now in blobs.

What a blob actually is

A blob-carrying transaction is a new type that references binary sidecars of about 128 KiB each. Blobs have their own fee market, separate from gas, which is why they’re so cheap: the price starts near zero and only rises when blocks are consistently full.

Two properties matter to anyone reading them.

The EVM cannot see blob contents. Contracts get a versioned hash through the BLOBHASH opcode and can prove things about a blob using the point evaluation precompile, but the bytes are never on the execution layer. So eth_getTransactionByHash returns you a transaction with no data in it, which is exactly the shape of my bug.

Blobs are also pruned. Consensus clients keep sidecars for about 18 days, then drop them. Ethereum guarantees availability long enough for fraud proofs and challenges, not forever.

Reading them

Blobs live on the beacon chain, so you query a consensus node, not an execution node:

curl "$BEACON_URL/eth/v1/beacon/blob_sidecars/7841088"

That path takes a slot, not a block number. You get the slot from the execution block header, and mapping between the two is the annoying part of the migration. Verify each sidecar’s KZG commitment against the blobVersionedHashes on the transaction, otherwise you’re trusting whatever the endpoint hands you.

For anything older than the pruning window, you need an archive: either your own sidecar store, or a provider that keeps them.

What I’d do differently

I had assumed calldata was permanent because it always had been. It’s a reasonable assumption about the execution layer, and blobs are explicitly not that.

If you index rollup data, decide now how far back you need it and start archiving sidecars yourself. Eighteen days arrives faster than a backfill plan does.