mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-07 16:55:46 +00:00
Import gossip data column into data availability checker (#6197)
* Import gossip data column into data availability checker
This commit is contained in:
@@ -2959,9 +2959,9 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
self: &Arc<Self>,
|
||||
data_columns: Vec<GossipVerifiedDataColumn<T>>,
|
||||
) -> Result<AvailabilityProcessingStatus, BlockError<T::EthSpec>> {
|
||||
let Ok(block_root) = data_columns
|
||||
let Ok((slot, block_root)) = data_columns
|
||||
.iter()
|
||||
.map(|c| c.block_root())
|
||||
.map(|c| (c.slot(), c.block_root()))
|
||||
.unique()
|
||||
.exactly_one()
|
||||
else {
|
||||
@@ -2981,7 +2981,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
}
|
||||
|
||||
let r = self
|
||||
.check_gossip_data_columns_availability_and_import(data_columns)
|
||||
.check_gossip_data_columns_availability_and_import(slot, block_root, data_columns)
|
||||
.await;
|
||||
self.remove_notified_custody_columns(&block_root, r)
|
||||
}
|
||||
@@ -3298,6 +3298,8 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
/// if so, otherwise caches the data column in the data availability checker.
|
||||
async fn check_gossip_data_columns_availability_and_import(
|
||||
self: &Arc<Self>,
|
||||
slot: Slot,
|
||||
block_root: Hash256,
|
||||
data_columns: Vec<GossipVerifiedDataColumn<T>>,
|
||||
) -> Result<AvailabilityProcessingStatus, BlockError<T::EthSpec>> {
|
||||
if let Some(slasher) = self.slasher.as_ref() {
|
||||
@@ -3306,15 +3308,11 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
}
|
||||
}
|
||||
|
||||
let Ok(slot) = data_columns.iter().map(|c| c.slot()).unique().exactly_one() else {
|
||||
return Err(BlockError::InternalError(
|
||||
"Columns for the same block should have matching slot".to_string(),
|
||||
));
|
||||
};
|
||||
|
||||
let availability = self
|
||||
.data_availability_checker
|
||||
.put_gossip_data_columns(data_columns)?;
|
||||
let availability = self.data_availability_checker.put_gossip_data_columns(
|
||||
slot,
|
||||
block_root,
|
||||
data_columns,
|
||||
)?;
|
||||
|
||||
self.process_availability(slot, availability).await
|
||||
}
|
||||
@@ -3629,7 +3627,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
// If the write fails, revert fork choice to the version from disk, else we can
|
||||
// end up with blocks in fork choice that are missing from disk.
|
||||
// See https://github.com/sigp/lighthouse/issues/2028
|
||||
let (_, signed_block, blobs) = signed_block.deconstruct();
|
||||
let (_, signed_block, blobs, data_columns) = signed_block.deconstruct();
|
||||
let block = signed_block.message();
|
||||
ops.extend(
|
||||
confirmed_state_roots
|
||||
@@ -3650,6 +3648,18 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(_data_columns) = data_columns {
|
||||
// TODO(das): depends on https://github.com/sigp/lighthouse/pull/6073
|
||||
// if !data_columns.is_empty() {
|
||||
// debug!(
|
||||
// self.log, "Writing data_columns to store";
|
||||
// "block_root" => %block_root,
|
||||
// "count" => data_columns.len(),
|
||||
// );
|
||||
// ops.push(StoreOp::PutDataColumns(block_root, data_columns));
|
||||
// }
|
||||
}
|
||||
|
||||
let txn_lock = self.store.hot_db.begin_rw_transaction();
|
||||
|
||||
if let Err(e) = self.store.do_atomically_with_block_and_blobs_cache(ops) {
|
||||
|
||||
Reference in New Issue
Block a user