During transaction gossip responses (PooledTransactions
), the EIP-4844 wrapper of the blob transaction is modified to:
rlp([tx_payload_body, blobs, commitments, cell_proofs])
cell_proofs = [cell_proof_0, cell_proof_1, ...]
The tx_payload_body
, blobs
and commitments
are as in EIP-4844, while the proofs
field is replaced by cell_proofs
, defined as follows:
cell_proofs
- lists of cell proofs for all blobs
, including the proofs for the extension indices, for a total of CELLS_PER_EXT_BLOB
proofs per blobIn other words, cell_proofs[i * CELLS_PER_EXT_BLOB + j]
is the proof for cell j
of blobs[i]
.
The node MUST validate tx_payload_body
and verify the wrapped data against it. To do so, ensure that:
tx_payload_body.blob_versioned_hashes
, blobs
, commitments
, and cell_proofs
.cell_proofs
contains exactly CELLS_PER_EXT_BLOB * len(blobs)
cell proofscommitments
hash to the versioned hashes, i.e. kzg_to_versioned_hash(commitments[i]) == tx_payload_body.blob_versioned_hashes[i]
commitments
match the corresponding blobs
and cell_proofs
. This requires computing the extension cells for all blobs
, and verifying all cell_proofs
. (Note: all cell_proofs
can be batch verified at once)