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(