| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Live: https://ethpandaops.github.io/blocksize/
Interactive calculator for everything an Ethereum slot puts on the wire, across every consensus fork: the beacon block, the ePBS payload envelope (with its EIP-7928 block access list), and blob/DAS sidecars — each as raw SSZ and measured gossip size. All of it is derived from the spec repositories; nothing is transcribed by hand.
The design goal: a new spec release requires zero code changes here.
Validation against reality: at mainnet's average 30.3 Mgas, the model's typical block is within ~5% of the measured average raw block size (204KB, xatu, July 2026). Measured Snappy compression on real blocks (2.3×) is stronger than the model's "mixed" calldata scenario, so wire sizes err conservative.
Behavior is keyed to extracted constants, never to fork names or EIP tables: EIP-7623 floor pricing applies because FLOOR_CALLDATA_COST exists in the fork's constants, the tx cap because TX_MAX_GAS_LIMIT exists, and so on.
The tool constructs the actual serialized bytes of the configured block — correct SSZ layout, seeded-random bytes for cryptographic fields (signatures, roots, pubkeys, KZG objects), realistic small integers for counters, and calldata matching the selected scenario (all-zeros / mixed / random) — then runs real Snappy over them:
So "compressed size" is the measured wire size of the modeled content, and the content is an explicit input rather than a hardcoded ratio.
The one modeling layer that is not spec-derived is a small set of name-keyed physical constraints (src/lib/constraints.ts): how full an aggregation bitfield gets for a validator count, how many bytes of calldata a gas limit buys, deposit-contract gas per deposit request. Unmatched fields fall back to their spec worst case.
npm install
npm run dev # local dev server
npm test # engine vs spec ground truth + integration tests
npm run build # production build (dist/)To refresh spec data locally:
# consensus: needs a consensus-specs checkout with a built pyspec
git clone --depth 1 --branch <tag> https://github.com/ethereum/consensus-specs /tmp/consensus-specs
cd /tmp/consensus-specs && uv sync --all-extras && uv run python -m pysetup.generate_specs --all-forks
uv run python <this-repo>/extractor/extract.py --tag <tag> --out <this-repo>/spec-data/consensus.json
# execution: plain PyPI package
uv venv /tmp/elenv && uv pip install --python /tmp/elenv/bin/python ethereum-execution==<version>
/tmp/elenv/bin/python extractor/extract_el.py --version <version> --out spec-data/el.jsonVite + React + TypeScript + Tailwind CSS v4, snappyjs for compression, deployed to GitHub Pages. No backend; everything runs in the browser.
| Back | FazBrowse Home | New Git URL |