@@ -16,11 +16,12 @@ use std::marker::PhantomData;
1616use std:: sync:: Arc ;
1717use tokio_util:: codec:: { Decoder , Encoder } ;
1818use types:: {
19- BlobSidecar , ChainSpec , DataColumnSidecar , EthSpec , ForkContext , ForkName , Hash256 ,
20- LightClientBootstrap , LightClientFinalityUpdate , LightClientOptimisticUpdate ,
21- LightClientUpdate , RuntimeVariableList , SignedBeaconBlock , SignedBeaconBlockAltair ,
22- SignedBeaconBlockBase , SignedBeaconBlockBellatrix , SignedBeaconBlockCapella ,
23- SignedBeaconBlockDeneb , SignedBeaconBlockElectra , SignedBeaconBlockFulu ,
19+ BlobSidecar , ChainSpec , DataColumnSidecar , DataColumnsByRootIdentifier , EthSpec , ForkContext ,
20+ ForkName , Hash256 , LightClientBootstrap , LightClientFinalityUpdate ,
21+ LightClientOptimisticUpdate , LightClientUpdate , RuntimeVariableList , SignedBeaconBlock ,
22+ SignedBeaconBlockAltair , SignedBeaconBlockBase , SignedBeaconBlockBellatrix ,
23+ SignedBeaconBlockCapella , SignedBeaconBlockDeneb , SignedBeaconBlockElectra ,
24+ SignedBeaconBlockFulu ,
2425} ;
2526use unsigned_varint:: codec:: Uvi ;
2627
@@ -596,10 +597,12 @@ fn handle_rpc_request<E: EthSpec>(
596597 ) ) ) ,
597598 SupportedProtocol :: DataColumnsByRootV1 => Ok ( Some ( RequestType :: DataColumnsByRoot (
598599 DataColumnsByRootRequest {
599- data_column_ids : RuntimeVariableList :: from_ssz_bytes (
600- decoded_buffer,
601- spec. max_request_data_column_sidecars as usize ,
602- ) ?,
600+ data_column_ids :
601+ <RuntimeVariableList < DataColumnsByRootIdentifier > >:: from_ssz_bytes_with_nested (
602+ decoded_buffer,
603+ spec. max_request_blocks ( current_fork) ,
604+ spec. number_of_columns as usize ,
605+ ) ?,
603606 } ,
604607 ) ) ) ,
605608 SupportedProtocol :: PingV1 => Ok ( Some ( RequestType :: Ping ( Ping {
@@ -935,8 +938,8 @@ mod tests {
935938 use crate :: types:: { EnrAttestationBitfield , EnrSyncCommitteeBitfield } ;
936939 use types:: {
937940 blob_sidecar:: BlobIdentifier , data_column_sidecar:: Cell , BeaconBlock , BeaconBlockAltair ,
938- BeaconBlockBase , BeaconBlockBellatrix , BeaconBlockHeader , DataColumnIdentifier , EmptyBlock ,
939- Epoch , FixedBytesExtended , FullPayload , KzgCommitment , KzgProof , Signature ,
941+ BeaconBlockBase , BeaconBlockBellatrix , BeaconBlockHeader , DataColumnsByRootIdentifier ,
942+ EmptyBlock , Epoch , FixedBytesExtended , FullPayload , KzgCommitment , KzgProof , Signature ,
940943 SignedBeaconBlockHeader , Slot ,
941944 } ;
942945
@@ -1066,14 +1069,15 @@ mod tests {
10661069 }
10671070 }
10681071
1069- fn dcbroot_request ( spec : & ChainSpec ) -> DataColumnsByRootRequest {
1072+ fn dcbroot_request ( spec : & ChainSpec , fork_name : ForkName ) -> DataColumnsByRootRequest {
1073+ let number_of_columns = spec. number_of_columns as usize ;
10701074 DataColumnsByRootRequest {
10711075 data_column_ids : RuntimeVariableList :: new (
1072- vec ! [ DataColumnIdentifier {
1076+ vec ! [ DataColumnsByRootIdentifier {
10731077 block_root: Hash256 :: zero( ) ,
1074- index : 0 ,
1078+ columns : RuntimeVariableList :: from_vec ( vec! [ 0 , 1 , 2 ] , number_of_columns ) ,
10751079 } ] ,
1076- spec. max_request_data_column_sidecars as usize ,
1080+ spec. max_request_blocks ( fork_name ) ,
10771081 )
10781082 . unwrap ( ) ,
10791083 }
@@ -1904,7 +1908,6 @@ mod tests {
19041908 RequestType :: MetaData ( MetadataRequest :: new_v1 ( ) ) ,
19051909 RequestType :: BlobsByRange ( blbrange_request ( ) ) ,
19061910 RequestType :: DataColumnsByRange ( dcbrange_request ( ) ) ,
1907- RequestType :: DataColumnsByRoot ( dcbroot_request ( & chain_spec) ) ,
19081911 RequestType :: MetaData ( MetadataRequest :: new_v2 ( ) ) ,
19091912 ] ;
19101913 for req in requests. iter ( ) {
@@ -1920,6 +1923,7 @@ mod tests {
19201923 RequestType :: BlobsByRoot ( blbroot_request ( fork_name) ) ,
19211924 RequestType :: BlocksByRoot ( bbroot_request_v1 ( fork_name) ) ,
19221925 RequestType :: BlocksByRoot ( bbroot_request_v2 ( fork_name) ) ,
1926+ RequestType :: DataColumnsByRoot ( dcbroot_request ( & chain_spec, fork_name) ) ,
19231927 ]
19241928 } ;
19251929 for fork_name in ForkName :: list_all ( ) {
0 commit comments