ethereum / ethereum/devp2p

Proposal: Indexed cell masks for heterogeneous GetCells requests

Open
#282 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
1.1k
Forks
297
Avg merge
5h 50m
Merged PRs (30d)
1

Description

## Summary

I would like feedback on an extension to EIP-8070's eth/72 cell retrieval protocol for batches where different blob transactions require different cell masks.

The current GetCells message applies one 128-bit mask to every transaction hash. Clients must therefore split a scheduling batch by exact mask equality. This is efficient for normal custody-aligned sampling, but partial delivery and recovery can produce transaction-specific missing-cell sets and fragment one logical batch into several requests.

## Proposed wire format

A future eth version would retain the existing shared forms and add indexed forms:

~~~text
GetCells shared:
[request_id, hashes, cell_mask]

GetCells indexed:
[request_id, hashes, masks, mask_ids]

Cells shared:
[request_id, hashes, cells, cell_mask]

Cells indexed:
[request_id, hashes, cells, masks, mask_ids]
~~~

masks is a deduplicated table of 128-bit masks. mask_ids contains one byte per transaction hash and selects the corresponding table entry.

The indexed Cells form is necessary because the existing response has one shared mask and cannot describe transaction-specific partial responses.

The shared form remains mandatory when every transaction uses the same mask. Indexed encoding is used only when it reduces the request count or encoded size.

## Canonical validation and limits

The draft requires:

- equal hash and mask-ID counts;
- at most 64 hashes and 64 unique masks;
- unique hashes and masks;
- in-range mask IDs;
- no unused mask-table entries;
- mask-table ordering by first reference;
- response masks that are subsets of the corresponding request masks;
- validation before allocating cell-response storage; and
- identical request, response, and peer quotas for shared and indexed forms.

## Evidence so far

Controlled request traces show a conditional benefit when missing-cell masks are highly fragmented. For example, synthetic 64-transaction workloads collapsed 8-64 shared-mask requests into 1-4 indexed requests, with request-side wire-byte reductions of roughly 15-63% in those cases.

However, a corrected sparse-node observation recorded 92 scheduling batches and zero fragmented batches. That is negative evidence for deploying a new wire version today. The response-side indexed format also needs to be added to the simulator before claiming an end-to-end byte reduction.

I am opening this issue to determine whether execution-client teams expect heterogeneous recovery masks to become common enough to justify standardization.

## Draft specification

https://github.com/vbhattaccmu/EIPs/blob/eth73-indexed-cell-requests/EIPS/eip-draft_indexed_cell_requests.md

## Questions

1. Are transaction-specific missing-cell masks expected under realistic sparse blobpool recovery workloads?
2. Can client-local scheduling avoid the fragmentation without a protocol change?
3. Is a canonical indexed table preferable to parallel per-transaction masks?
4. Which measurements or devnet conditions should gate an eth successor proposal?

Contributor guide

No contributing guide indexed for this repository

Research direction

Read the linked draft specification and the EIP-8070 GetCells protocol context first. Review the reported request traces and the sparse-node observation, then assess the simulator gap for indexed responses. Done means a decision on whether heterogeneous recovery masks justify standardization and which measurements or devnet conditions should gate it.

Written by the indexing model from the issue text.

Assessment

Domain
distributed-systems, networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.