mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-02 16:21:42 +00:00
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:
@@ -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(
|
||||
|
||||
@@ -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<_>>();
|
||||
|
||||
Reference in New Issue
Block a user