# EIP-4844 meta-spec
## TLDR
EIP-4844 introduces a "blobs" transaction type:
- Persisted in beacon-node, not in execution engine (e.g. prysm, not in geth)
- Blobs are `4096` field-elements of `32 bytes each`, max `16` per block. Max `4096 * 32 * 16 = 2 MiB` per block, targeted at `1 MiB`.
- Blobs are pruned after 2 weeks. Available long enough for all actors of a L2 to retrieve it, short enough to keep disk use manageable.
- Blobs are *not required* for EVM execution. I.e. sync is independent, pruning is trivial.
- Blobs are committed to with [KZG](https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html): efficient vector commitment, fixed-size proof data, forward-compatible with data-availability-sampling.
- The EVM verifies blob data statelessly with new precompiles: regular calldata is used to present inputs and proofs.
- The EVM can run a ZK proof at the same time as posting the blob (does not require all blob data to go through EVM, just some commitment data)
- The execution-layer changes are forward compatible with the full dank-sharding design for even more data-availability.
## Links
- [EIP-4844 execution-layer, EIP](https://eips.ethereum.org/EIPS/eip-4844)
- [EIP-4844 consensus-layer, specs](https://github.com/ethereum/consensus-specs/tree/dev/specs/eip4844)
- [EIP-4844 Eth Magicians, forum post](https://ethereum-magicians.org/t/eip-4844-shard-blob-transactions/8430)
- [Ethereum KZG ceremony specs](https://github.com/ethereum/kzg-ceremony-specs)
- [Ethereum KZG ceremony resources](https://github.com/tvanepps/KZG-Ceremony-Resources)
- [EIP-4844 Execution APIs, Engine API spec extension](https://github.com/ethereum/execution-apis/pull/197)
- [EIP-4844 Go-ethereum prototype, tracking PR, up to Jun 7](https://github.com/protolambda/go-ethereum/pull/1)
- [EIP-4844 Go-ethereum prototype fork by M de Hoog for devnet](https://github.com/mdehoog/go-ethereum/tree/eip-4844) `git clone -b eip-4844 git@github.com:mdehoog/go-ethereum.git`
- [EIP-4844 Prysm prototype, `blobs` feature branch](https://github.com/prysmaticlabs/prysm/compare/kiln...blobs) (outdated)
- [EIP-4844 Prysm prototype fork by Mofi for devnet](https://github.com/Inphi/prysm/tree/inphi/clean-slate)
- [Discord Eth R&D server `sharded-data` discussion](https://discord.gg/7cCZVXRedE)
- [How do trusted setups work? blog post by Vitalik](https://vitalik.ca/general/2022/03/14/trustedsetup.html)
- [EIP-4844 implementer notes by Proto](https://hackmd.io/@protolambda/eip-4844-implementer-notes) (including KZG benchmarks)
- [EIP-4844 Blobs tx lifetime and L2 usage](https://hackmd.io/@protolambda/blobs_l2_tx_usage) (devconnect workshop)
- [EIP-4844 implementation diagrams](https://hackmd.io/@protolambda/eip4844-implementation) (devconnect workshop)
- [EIP-4844 open issues tracker (July 6)](https://notes.ethereum.org/@timbeiko/4844-open-issues)
- [EIP-4844 interop dev repo](https://github.com/Inphi/eip4844-interop)
- [EIP-4844 Prysm CL implementation notes (from Terence)](https://hackmd.io/hZefl5F5RgWXeibgWflRQQ?view)
- [EIP-4844 To couple or not: beacon blocks and blobs (notes from Danny)](https://notes.ethereum.org/RLOGb1hYQ0aWt3hcVgzhgQ?view)
- [KZG trusted setup rationale doc by Kev](https://hackmd.io/@6iQDuIePQjyYBqDChYw_jg/SJ-08AoT5)
- [KZG Ceremony REST API notes by Kev](https://hackmd.io/@6iQDuIePQjyYBqDChYw_jg/rJxSMY5Js#Info)
- [KZG Ceremony Sequencer implementation](https://github.com/ethereum/kzg-ceremony-sequencer)
- [KZG Ceremony frontend client by Worldcoin (WIP)](https://github.com/worldcoin/kzg-ceremony-client)
- [Go-KZG](https://github.com/protolambda/go-kzg) and [Fork with EIP-4844 changes](https://github.com/Inphi/go-kzg)
- [EIP-4844 blob utils CLI by Mofi](https://github.com/Inphi/blob-utils)
- [C-KZG](https://github.com/benjaminion/c-kzg) and [C-KZG fork with minimal 4844 changes by Dankrad and xrchz](https://github.com/dankrad/c-kzg/blob/4844/min-src/c_kzg_4844.h)
- [Lighthouse 4844 prototype (by Marius vdW and Daniel Knopik)](https://github.com/dknopik/lighthouse/tree/eip4844)
- [4844 fee curve python gist](https://gist.github.com/protolambda/a9bc82e6170cdeb9a3c4b66eabb2b2a1)
- [EIP fee market update](https://github.com/ethereum/EIPs/pull/5707)
- [EIP 5793: `eth/68`: Add tx type to tx announcement](https://github.com/ethereum/EIPs/pull/5793)
- [CL specs PR - 2 week retention window](https://github.com/ethereum/consensus-specs/pull/3047)
- [CL specs PR - couple gossip beacon block and blobs sidecar](https://github.com/ethereum/consensus-specs/pull/3046)
- [ethereum pm - 4844 readiness checklist](https://github.com/ethereum/pm/blob/master/Breakout-Room/4844-readiness-checklist.md)
- [KZG in practice, Scroll blog post](https://scroll.io/blog/kzg)
- [Devnet v3 spec](https://notes.ethereum.org/@timbeiko/4844-devnet-3)
- [`ethereum/c-kzg-4844` library with NodeJS/Python/CSharp/Rust bindings](https://github.com/ethereum/c-kzg-4844)
- [2MB data experiment](https://notes.ethereum.org/@djrtwo/rkgZs-YVMi)
## Ideas
- Testing:
- EL tests: 4844 blob tx processing tests
- Engine API tests: blob sidecar retrieval tests during block building
- CL tests: beacon SSZ type changes, processing changes
- Comparison and design docs: explore what's left to build to enable others to contribute more
- Spec: reach out to Proto or Ansgar if you need a start
- Tooling:
- More tools to create transactions
- A blob indexing service / site, like a block explorer
- It could just focus on blobs, and index them by blob datahash, KZG commitment, slot number, tx hash, execution block hash and beacon block root.
- Existing explorers can then just point to the blobs explorer site for any block, blob tx or blob sidecar to find the full blob data.
- Contribute to the Prysm, Geth, Lighthouse prototypes, or a new client like Besu.
- Prysm/Geth: reach out to Mofi, Mdehoog or Terence
- Lighthouse: reach out to Marius or Lighthouse team
- Besu: reach out to Abdel from Starkware (ex Besu)