mirror of
https://github.com/sigp/lighthouse.git
synced 2026-07-01 11:54:40 +00:00
peerdas-devnet-7: update DataColumnSidecarsByRoot request to use DataColumnsByRootIdentifier (#7399)
Update DataColumnSidecarsByRoot request to use DataColumnsByRootIdentifier #7377 As described in https://github.com/ethereum/consensus-specs/pull/4284
This commit is contained in:
@@ -127,7 +127,7 @@ use tokio_stream::Stream;
|
||||
use tracing::{debug, error, info, trace, warn};
|
||||
use tree_hash::TreeHash;
|
||||
use types::blob_sidecar::FixedBlobSidecarList;
|
||||
use types::data_column_sidecar::{ColumnIndex, DataColumnIdentifier};
|
||||
use types::data_column_sidecar::ColumnIndex;
|
||||
use types::payload::BlockProductionVersion;
|
||||
use types::*;
|
||||
|
||||
@@ -1106,23 +1106,25 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
||||
.map_or_else(|| self.get_blobs(block_root), Ok)
|
||||
}
|
||||
|
||||
pub fn get_data_column_checking_all_caches(
|
||||
pub fn get_data_columns_checking_all_caches(
|
||||
&self,
|
||||
block_root: Hash256,
|
||||
index: ColumnIndex,
|
||||
) -> Result<Option<Arc<DataColumnSidecar<T::EthSpec>>>, Error> {
|
||||
if let Some(column) = self
|
||||
indices: &[ColumnIndex],
|
||||
) -> Result<DataColumnSidecarList<T::EthSpec>, Error> {
|
||||
let all_cached_columns_opt = self
|
||||
.data_availability_checker
|
||||
.get_data_column(&DataColumnIdentifier { block_root, index })?
|
||||
{
|
||||
return Ok(Some(column));
|
||||
}
|
||||
.get_data_columns(block_root)
|
||||
.or_else(|| self.early_attester_cache.get_data_columns(block_root));
|
||||
|
||||
if let Some(columns) = self.early_attester_cache.get_data_columns(block_root) {
|
||||
return Ok(columns.iter().find(|c| c.index == index).cloned());
|
||||
if let Some(mut all_cached_columns) = all_cached_columns_opt {
|
||||
all_cached_columns.retain(|col| indices.contains(&col.index));
|
||||
Ok(all_cached_columns)
|
||||
} else {
|
||||
indices
|
||||
.iter()
|
||||
.filter_map(|index| self.get_data_column(&block_root, index).transpose())
|
||||
.collect::<Result<_, _>>()
|
||||
}
|
||||
|
||||
self.get_data_column(&block_root, &index)
|
||||
}
|
||||
|
||||
/// Returns the block at the given root, if any.
|
||||
|
||||
@@ -17,8 +17,8 @@ use task_executor::TaskExecutor;
|
||||
use tracing::{debug, error, info_span, Instrument};
|
||||
use types::blob_sidecar::{BlobIdentifier, BlobSidecar, FixedBlobSidecarList};
|
||||
use types::{
|
||||
BlobSidecarList, ChainSpec, DataColumnIdentifier, DataColumnSidecar, DataColumnSidecarList,
|
||||
Epoch, EthSpec, Hash256, RuntimeVariableList, SignedBeaconBlock,
|
||||
BlobSidecarList, ChainSpec, DataColumnSidecarList, Epoch, EthSpec, Hash256,
|
||||
RuntimeVariableList, SignedBeaconBlock,
|
||||
};
|
||||
|
||||
mod error;
|
||||
@@ -163,12 +163,12 @@ impl<T: BeaconChainTypes> DataAvailabilityChecker<T> {
|
||||
self.availability_cache.peek_blob(blob_id)
|
||||
}
|
||||
|
||||
/// Get a data column from the availability cache.
|
||||
pub fn get_data_column(
|
||||
/// Get data columns for a block from the availability cache.
|
||||
pub fn get_data_columns(
|
||||
&self,
|
||||
data_column_id: &DataColumnIdentifier,
|
||||
) -> Result<Option<Arc<DataColumnSidecar<T::EthSpec>>>, AvailabilityCheckError> {
|
||||
self.availability_cache.peek_data_column(data_column_id)
|
||||
block_root: Hash256,
|
||||
) -> Option<DataColumnSidecarList<T::EthSpec>> {
|
||||
self.availability_cache.peek_data_columns(block_root)
|
||||
}
|
||||
|
||||
/// Put a list of blobs received via RPC into the availability cache. This performs KZG
|
||||
|
||||
@@ -16,7 +16,7 @@ use std::sync::Arc;
|
||||
use tracing::debug;
|
||||
use types::blob_sidecar::BlobIdentifier;
|
||||
use types::{
|
||||
BlobSidecar, ChainSpec, ColumnIndex, DataColumnIdentifier, DataColumnSidecar, Epoch, EthSpec,
|
||||
BlobSidecar, ChainSpec, ColumnIndex, DataColumnSidecar, DataColumnSidecarList, Epoch, EthSpec,
|
||||
Hash256, RuntimeFixedVector, RuntimeVariableList, SignedBeaconBlock,
|
||||
};
|
||||
|
||||
@@ -404,20 +404,21 @@ impl<T: BeaconChainTypes> DataAvailabilityCheckerInner<T> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Fetch a data column from the cache without affecting the LRU ordering
|
||||
pub fn peek_data_column(
|
||||
/// Fetch data columns of a given `block_root` from the cache without affecting the LRU ordering
|
||||
pub fn peek_data_columns(
|
||||
&self,
|
||||
data_column_id: &DataColumnIdentifier,
|
||||
) -> Result<Option<Arc<DataColumnSidecar<T::EthSpec>>>, AvailabilityCheckError> {
|
||||
if let Some(pending_components) = self.critical.read().peek(&data_column_id.block_root) {
|
||||
Ok(pending_components
|
||||
.verified_data_columns
|
||||
.iter()
|
||||
.find(|data_column| data_column.as_data_column().index == data_column_id.index)
|
||||
.map(|data_column| data_column.clone_arc()))
|
||||
} else {
|
||||
Ok(None)
|
||||
}
|
||||
block_root: Hash256,
|
||||
) -> Option<DataColumnSidecarList<T::EthSpec>> {
|
||||
self.critical
|
||||
.read()
|
||||
.peek(&block_root)
|
||||
.map(|pending_components| {
|
||||
pending_components
|
||||
.verified_data_columns
|
||||
.iter()
|
||||
.map(|col| col.clone_arc())
|
||||
.collect()
|
||||
})
|
||||
}
|
||||
|
||||
pub fn peek_pending_components<R, F: FnOnce(Option<&PendingComponents<T::EthSpec>>) -> R>(
|
||||
|
||||
@@ -16,7 +16,7 @@ use std::iter;
|
||||
use std::marker::PhantomData;
|
||||
use std::sync::Arc;
|
||||
use tracing::debug;
|
||||
use types::data_column_sidecar::{ColumnIndex, DataColumnIdentifier};
|
||||
use types::data_column_sidecar::ColumnIndex;
|
||||
use types::{
|
||||
BeaconStateError, ChainSpec, DataColumnSidecar, DataColumnSubnetId, EthSpec, Hash256,
|
||||
RuntimeVariableList, SignedBeaconBlockHeader, Slot,
|
||||
@@ -200,13 +200,6 @@ impl<T: BeaconChainTypes, O: ObservationStrategy> GossipVerifiedDataColumn<T, O>
|
||||
)
|
||||
}
|
||||
|
||||
pub fn id(&self) -> DataColumnIdentifier {
|
||||
DataColumnIdentifier {
|
||||
block_root: self.block_root,
|
||||
index: self.data_column.index(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn as_data_column(&self) -> &DataColumnSidecar<T::EthSpec> {
|
||||
self.data_column.as_data_column()
|
||||
}
|
||||
@@ -741,7 +734,7 @@ pub fn observe_gossip_data_column<T: BeaconChainTypes>(
|
||||
chain: &BeaconChain<T>,
|
||||
) -> Result<(), GossipDataColumnError> {
|
||||
// Now the signature is valid, store the proposal so we don't accept another data column sidecar
|
||||
// with the same `DataColumnIdentifier`. It's important to double-check that the proposer still
|
||||
// with the same `ColumnIndex`. It's important to double-check that the proposer still
|
||||
// hasn't been observed so we don't have a race-condition when verifying two blocks
|
||||
// simultaneously.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user