Cell Dissemination (Partial messages) (#8314)

- https://github.com/ethereum/consensus-specs/pull/4558
- https://eips.ethereum.org/EIPS/eip-8136


  


Co-Authored-By: Daniel Knopik <daniel@dknopik.de>

Co-Authored-By: Pawan Dhananjay <pawandhananjay@gmail.com>

Co-Authored-By: Jimmy Chen <jchen.tc@gmail.com>
This commit is contained in:
Daniel Knopik
2026-04-23 20:52:28 +02:00
committed by GitHub
parent e086628efe
commit 8a384ff445
54 changed files with 4797 additions and 630 deletions

View File

@@ -392,6 +392,7 @@ pub enum Work<E: EthSpec> {
GossipBlock(AsyncFn),
GossipBlobSidecar(AsyncFn),
GossipDataColumnSidecar(AsyncFn),
GossipPartialDataColumnSidecar(AsyncFn),
DelayedImportBlock {
beacon_block_slot: Slot,
beacon_block_root: Hash256,
@@ -470,6 +471,7 @@ pub enum WorkType {
GossipBlock,
GossipBlobSidecar,
GossipDataColumnSidecar,
GossipPartialDataColumnSidecar,
DelayedImportBlock,
DelayedImportEnvelope,
GossipVoluntaryExit,
@@ -524,6 +526,7 @@ impl<E: EthSpec> Work<E> {
Work::GossipBlock(_) => WorkType::GossipBlock,
Work::GossipBlobSidecar(_) => WorkType::GossipBlobSidecar,
Work::GossipDataColumnSidecar(_) => WorkType::GossipDataColumnSidecar,
Work::GossipPartialDataColumnSidecar(_) => WorkType::GossipPartialDataColumnSidecar,
Work::DelayedImportBlock { .. } => WorkType::DelayedImportBlock,
Work::DelayedImportEnvelope { .. } => WorkType::DelayedImportEnvelope,
Work::GossipVoluntaryExit(_) => WorkType::GossipVoluntaryExit,
@@ -836,6 +839,10 @@ impl<E: EthSpec> BeaconProcessor<E> {
Some(item)
} else if let Some(item) = work_queues.gossip_data_column_queue.pop() {
Some(item)
} else if let Some(item) =
work_queues.gossip_partial_data_column_queue.pop()
{
Some(item)
} else if let Some(item) = work_queues.column_reconstruction_queue.pop() {
Some(item)
// Check the priority 0 API requests after blocks and blobs, but before attestations.
@@ -1146,6 +1153,9 @@ impl<E: EthSpec> BeaconProcessor<E> {
Work::GossipDataColumnSidecar { .. } => {
work_queues.gossip_data_column_queue.push(work, work_id)
}
Work::GossipPartialDataColumnSidecar { .. } => work_queues
.gossip_partial_data_column_queue
.push(work, work_id),
Work::DelayedImportBlock { .. } => {
work_queues.delayed_block_queue.push(work, work_id)
}
@@ -1284,6 +1294,9 @@ impl<E: EthSpec> BeaconProcessor<E> {
WorkType::GossipDataColumnSidecar => {
work_queues.gossip_data_column_queue.len()
}
WorkType::GossipPartialDataColumnSidecar => {
work_queues.gossip_partial_data_column_queue.len()
}
WorkType::DelayedImportBlock => work_queues.delayed_block_queue.len(),
WorkType::DelayedImportEnvelope => work_queues.delayed_envelope_queue.len(),
WorkType::GossipVoluntaryExit => {
@@ -1506,6 +1519,7 @@ impl<E: EthSpec> BeaconProcessor<E> {
Work::GossipBlock(work)
| Work::GossipBlobSidecar(work)
| Work::GossipDataColumnSidecar(work)
| Work::GossipPartialDataColumnSidecar(work)
| Work::GossipExecutionPayload(work) => task_spawner.spawn_async(async move {
work.await;
}),

View File

@@ -126,6 +126,7 @@ pub struct BeaconProcessorQueueLengths {
gossip_block_queue: usize,
gossip_blob_queue: usize,
gossip_data_column_queue: usize,
gossip_partial_data_column_queue: usize,
delayed_block_queue: usize,
delayed_envelope_queue: usize,
status_queue: usize,
@@ -199,6 +200,7 @@ impl BeaconProcessorQueueLengths {
gossip_block_queue: 1024,
gossip_blob_queue: 1024,
gossip_data_column_queue: 1024,
gossip_partial_data_column_queue: 1024,
delayed_block_queue: 1024,
delayed_envelope_queue: 1024,
status_queue: 1024,
@@ -255,6 +257,7 @@ pub struct WorkQueues<E: EthSpec> {
pub gossip_block_queue: FifoQueue<Work<E>>,
pub gossip_blob_queue: FifoQueue<Work<E>>,
pub gossip_data_column_queue: FifoQueue<Work<E>>,
pub gossip_partial_data_column_queue: FifoQueue<Work<E>>,
pub delayed_block_queue: FifoQueue<Work<E>>,
pub delayed_envelope_queue: FifoQueue<Work<E>>,
pub status_queue: FifoQueue<Work<E>>,
@@ -323,6 +326,8 @@ impl<E: EthSpec> WorkQueues<E> {
let gossip_block_queue = FifoQueue::new(queue_lengths.gossip_block_queue);
let gossip_blob_queue = FifoQueue::new(queue_lengths.gossip_blob_queue);
let gossip_data_column_queue = FifoQueue::new(queue_lengths.gossip_data_column_queue);
let gossip_partial_data_column_queue =
FifoQueue::new(queue_lengths.gossip_partial_data_column_queue);
let delayed_block_queue = FifoQueue::new(queue_lengths.delayed_block_queue);
let delayed_envelope_queue = FifoQueue::new(queue_lengths.delayed_envelope_queue);
@@ -388,6 +393,7 @@ impl<E: EthSpec> WorkQueues<E> {
gossip_block_queue,
gossip_blob_queue,
gossip_data_column_queue,
gossip_partial_data_column_queue,
delayed_block_queue,
delayed_envelope_queue,
status_queue,