Add Gloas data column support (#8682)

Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: Eitan Seri- Levi <eserilev@gmail.com>
This commit is contained in:
Eitan Seri-Levi
2026-01-27 20:52:12 -08:00
committed by GitHub
parent 0f57fc9d8e
commit 9bec8df37a
44 changed files with 1507 additions and 680 deletions

View File

@@ -281,7 +281,9 @@ impl BlockId {
warp_utils::reject::custom_not_found(format!("beacon block with root {}", root))
})?;
if !chain.spec.is_peer_das_enabled_for_epoch(block.epoch()) {
let fork_name = chain.spec.fork_name_at_epoch(block.epoch());
if !fork_name.fulu_enabled() {
return Err(warp_utils::reject::custom_bad_request(
"block is pre-Fulu and has no data columns".to_string(),
));
@@ -290,12 +292,12 @@ impl BlockId {
let data_column_sidecars = if let Some(indices) = query.indices {
indices
.iter()
.filter_map(|index| chain.get_data_column(&root, index).transpose())
.filter_map(|index| chain.get_data_column(&root, index, fork_name).transpose())
.collect::<Result<DataColumnSidecarList<T::EthSpec>, _>>()
.map_err(warp_utils::reject::unhandled_error)?
} else {
chain
.get_data_columns(&root)
.get_data_columns(&root, fork_name)
.map_err(warp_utils::reject::unhandled_error)?
.unwrap_or_default()
};
@@ -462,17 +464,18 @@ impl BlockId {
let num_found_column_keys = column_indices.len();
let num_required_columns = T::EthSpec::number_of_columns() / 2;
let is_blob_available = num_found_column_keys >= num_required_columns;
let fork_name = chain.spec.fork_name_at_epoch(block.epoch());
if is_blob_available {
let data_columns = column_indices
.into_iter()
.filter_map(
|column_index| match chain.get_data_column(&root, &column_index) {
.filter_map(|column_index| {
match chain.get_data_column(&root, &column_index, fork_name) {
Ok(Some(data_column)) => Some(Ok(data_column)),
Ok(None) => None,
Err(e) => Some(Err(warp_utils::reject::unhandled_error(e))),
},
)
}
})
.collect::<Result<Vec<_>, _>>()?;
reconstruct_blobs(&chain.kzg, data_columns, blob_indices, block, &chain.spec).map_err(

View File

@@ -514,14 +514,14 @@ fn publish_column_sidecars<T: BeaconChainTypes>(
data_column_sidecars.shuffle(&mut **chain.rng.lock());
let dropped_indices = data_column_sidecars
.drain(columns_to_keep..)
.map(|d| d.index)
.map(|d| *d.index())
.collect::<Vec<_>>();
debug!(indices = ?dropped_indices, "Dropping data columns from publishing");
}
let pubsub_messages = data_column_sidecars
.into_iter()
.map(|data_col| {
let subnet = DataColumnSubnetId::from_column_index(data_col.index, &chain.spec);
let subnet = DataColumnSubnetId::from_column_index(*data_col.index(), &chain.spec);
PubsubMessage::DataColumnSidecar(Box::new((subnet, data_col)))
})
.collect::<Vec<_>>();