Fulu update to spec v1.6.0-alpha.4 (#7890)

Fulu update to spec [v1.6.0-alpha.4](https://github.com/ethereum/consensus-specs/releases/tag/v1.6.0-alpha.4).
- Make `number_of_columns` a preset
- Optimise `get_custody_groups` to avoid computing if cgc = 128
- Add support for additional typenum values in type_dispatch macro
This commit is contained in:
Jimmy Chen
2025-08-20 12:05:04 +10:00
committed by GitHub
parent 95882bfa66
commit b4704eab4a
56 changed files with 214 additions and 400 deletions

View File

@@ -243,7 +243,6 @@ impl<E: EthSpec> RangeBlockComponentsRequest<E> {
column_to_peer_id,
expected_custody_columns,
*attempt,
spec,
);
if let Err(CouplingError::DataColumnPeerFailure {
@@ -336,7 +335,6 @@ impl<E: EthSpec> RangeBlockComponentsRequest<E> {
column_to_peer: HashMap<u64, PeerId>,
expects_custody_columns: &[ColumnIndex],
attempt: usize,
spec: &ChainSpec,
) -> Result<Vec<RpcBlock<E>>, CouplingError> {
// Group data columns by block_root and index
let mut data_columns_by_block =
@@ -415,7 +413,7 @@ impl<E: EthSpec> RangeBlockComponentsRequest<E> {
);
}
RpcBlock::new_with_custody_columns(Some(block_root), block, custody_columns, spec)
RpcBlock::new_with_custody_columns(Some(block_root), block, custody_columns)
.map_err(|e| CouplingError::InternalError(format!("{:?}", e)))?
} else {
// Block has no data, expects zero columns

View File

@@ -948,9 +948,10 @@ impl<T: BeaconChainTypes> SyncNetworkContext<T> {
self.send_network_msg(NetworkMessage::SendRequest {
peer_id,
request: RequestType::DataColumnsByRoot(
request
.clone()
.try_into_request(self.fork_context.current_fork_name(), &self.chain.spec)?,
request.clone().try_into_request::<T::EthSpec>(
self.fork_context.current_fork_name(),
&self.chain.spec,
)?,
),
app_request_id: AppRequestId::Sync(SyncRequestId::DataColumnsByRoot(id)),
})?;

View File

@@ -13,16 +13,14 @@ use std::collections::HashSet;
use std::time::{Duration, Instant};
use std::{collections::HashMap, marker::PhantomData, sync::Arc};
use tracing::{debug, warn};
use types::EthSpec;
use types::{DataColumnSidecar, Hash256, data_column_sidecar::ColumnIndex};
use types::{DataColumnSidecarList, EthSpec};
use super::{LookupRequestResult, PeerGroup, RpcResponseResult, SyncNetworkContext};
const FAILED_PEERS_CACHE_EXPIRY_SECONDS: u64 = 5;
const MAX_STALE_NO_PEERS_DURATION: Duration = Duration::from_secs(30);
type DataColumnSidecarList<E> = Vec<Arc<DataColumnSidecar<E>>>;
pub struct ActiveCustodyRequest<T: BeaconChainTypes> {
block_root: Hash256,
custody_id: CustodyId,

View File

@@ -1,8 +1,8 @@
use lighthouse_network::rpc::methods::DataColumnsByRootRequest;
use ssz_types::VariableList;
use std::sync::Arc;
use types::{
ChainSpec, DataColumnSidecar, DataColumnsByRootIdentifier, EthSpec, ForkName, Hash256,
RuntimeVariableList,
};
use super::{ActiveRequestItems, LookupVerifyError};
@@ -14,13 +14,12 @@ pub struct DataColumnsByRootSingleBlockRequest {
}
impl DataColumnsByRootSingleBlockRequest {
pub fn try_into_request(
pub fn try_into_request<E: EthSpec>(
self,
fork_name: ForkName,
spec: &ChainSpec,
) -> Result<DataColumnsByRootRequest, &'static str> {
let number_of_columns = spec.number_of_columns as usize;
let columns = RuntimeVariableList::new(self.indices, number_of_columns)
) -> Result<DataColumnsByRootRequest<E>, &'static str> {
let columns = VariableList::new(self.indices)
.map_err(|_| "Number of indices exceeds total number of columns")?;
Ok(DataColumnsByRootRequest::new(
vec![DataColumnsByRootIdentifier {

View File

@@ -1922,7 +1922,7 @@ fn custody_lookup_happy_path() {
let id = r.expect_block_lookup_request(block.canonical_root());
r.complete_valid_block_request(id, block.into(), true);
// for each slot we download `samples_per_slot` columns
let sample_column_count = spec.samples_per_slot * spec.data_columns_per_group();
let sample_column_count = spec.samples_per_slot * spec.data_columns_per_group::<E>();
let custody_ids =
r.expect_only_data_columns_by_root_requests(block_root, sample_column_count as usize);
r.complete_valid_custody_request(custody_ids, data_columns, false);

View File

@@ -427,7 +427,7 @@ impl TestRig {
.chain
.process_block(
block_root,
build_rpc_block(block.into(), &data_sidecars, &self.spec),
build_rpc_block(block.into(), &data_sidecars),
NotifyExecutionLayer::Yes,
BlockImportSource::RangeSync,
|| Ok(()),
@@ -443,14 +443,13 @@ impl TestRig {
fn build_rpc_block(
block: Arc<SignedBeaconBlock<E>>,
data_sidecars: &Option<DataSidecars<E>>,
spec: &ChainSpec,
) -> RpcBlock<E> {
match data_sidecars {
Some(DataSidecars::Blobs(blobs)) => {
RpcBlock::new(None, block, Some(blobs.clone())).unwrap()
}
Some(DataSidecars::DataColumns(columns)) => {
RpcBlock::new_with_custody_columns(None, block, columns.clone(), spec).unwrap()
RpcBlock::new_with_custody_columns(None, block, columns.clone()).unwrap()
}
// Block has no data, expects zero columns
None => RpcBlock::new_without_blobs(None, block),