@@ -924,8 +924,7 @@ impl<P: Preset> Network<P> {
924924 self . handle_blobs_by_range_request ( peer_id, peer_request_id, request_id, request)
925925 }
926926 RequestType :: BlobsByRoot ( request) => {
927- self . handle_blobs_by_root_request ( peer_id, peer_request_id, request_id, request) ;
928- Ok ( ( ) )
927+ self . handle_blobs_by_root_request ( peer_id, peer_request_id, request_id, request)
929928 }
930929 RequestType :: Goodbye ( goodbye_reason) => {
931930 debug ! ( "received GoodBye request (peer_id: {peer_id}, reason: {goodbye_reason:?})" ) ;
@@ -978,12 +977,7 @@ impl<P: Preset> Network<P> {
978977 debug ! ( "received BeaconBlocksByRange request (peer_id: {peer_id}, request: {request:?})" ) ;
979978
980979 let start_slot = request. start_slot ( ) ;
981- let max_request_blocks = match request {
982- OldBlocksByRangeRequest :: V1 ( _) => self . controller . chain_config ( ) . max_request_blocks ,
983- OldBlocksByRangeRequest :: V2 ( _) => {
984- self . controller . chain_config ( ) . max_request_blocks_deneb
985- }
986- } ;
980+ let max_request_blocks = request. max_request_blocks ( self . controller . chain_config ( ) ) ;
987981 let difference = request
988982 . count ( )
989983 . min ( max_request_blocks)
@@ -1049,28 +1043,27 @@ impl<P: Preset> Network<P> {
10491043 ) -> Result < ( ) > {
10501044 debug ! ( "received BlobSidecarsByRange request (peer_id: {peer_id}, request: {request:?})" ) ;
10511045
1052- let start_slot = request. start_slot ( ) ;
1053- let max_request_blob_sidecars = match request {
1054- BlobsByRangeRequest :: V1 ( _ ) => self . controller . chain_config ( ) . max_request_blob_sidecars ,
1055- BlobsByRangeRequest :: V2 ( _ ) => {
1056- self . controller
1057- . chain_config ( )
1058- . max_request_blob_sidecars_electra
1046+ let BlobsByRangeRequest { start_slot, count } = request;
1047+ let chain_config = self . controller . chain_config ( ) ;
1048+ let phase = chain_config . phase_at_slot :: < P > ( start_slot ) ;
1049+ let Some ( max_request_blob_sidecars ) = chain_config . max_request_blob_sidecars ( phase ) else {
1050+ return Err ( Error :: InvalidPhaseRequest {
1051+ phase ,
1052+ protocol : "blob_sidecars_by_range" . to_owned ( ) ,
10591053 }
1054+ . into ( ) ) ;
10601055 } ;
1061- let difference = request
1062- . count ( )
1056+
1057+ let difference = count
10631058 . min ( max_request_blob_sidecars)
10641059 . min ( MAX_FOR_DOS_PREVENTION ) ;
10651060
1066- let end_slot =
1067- request
1068- . start_slot ( )
1069- . checked_add ( difference)
1070- . ok_or ( Error :: EndSlotOverflow {
1071- start_slot,
1072- difference,
1073- } ) ?;
1061+ let end_slot = start_slot
1062+ . checked_add ( difference)
1063+ . ok_or ( Error :: EndSlotOverflow {
1064+ start_slot,
1065+ difference,
1066+ } ) ?;
10741067
10751068 let controller = self . controller . clone_arc ( ) ;
10761069 let network_to_service_tx = self . network_to_service_tx . clone ( ) ;
@@ -1121,19 +1114,23 @@ impl<P: Preset> Network<P> {
11211114 peer_request_id : PeerRequestId ,
11221115 request_id : IncomingRequestId ,
11231116 request : BlobsByRootRequest ,
1124- ) {
1117+ ) -> Result < ( ) > {
11251118 debug ! ( "received BlobsByRootRequest request (peer_id: {peer_id}, request: {request:?})" ) ;
11261119
11271120 // TODO(feature/deneb): MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS
1128- let max_request_blob_sidecars = match request {
1129- BlobsByRootRequest :: V1 ( _) => self . controller . chain_config ( ) . max_request_blob_sidecars ,
1130- BlobsByRootRequest :: V2 ( _) => {
1131- self . controller
1132- . chain_config ( )
1133- . max_request_blob_sidecars_electra
1121+ let BlobsByRootRequest { blob_ids } = request;
1122+ let phase = self . controller . phase ( ) ;
1123+ let Some ( max_request_blob_sidecars) = self
1124+ . controller
1125+ . chain_config ( )
1126+ . max_request_blob_sidecars ( phase)
1127+ else {
1128+ return Err ( Error :: InvalidPhaseRequest {
1129+ phase,
1130+ protocol : "blob_sidecars_by_root" . to_owned ( ) ,
11341131 }
1132+ . into ( ) ) ;
11351133 } ;
1136- let blob_ids = request. blob_ids ( ) ;
11371134
11381135 let controller = self . controller . clone_arc ( ) ;
11391136 let network_to_service_tx = self . network_to_service_tx . clone ( ) ;
@@ -1181,6 +1178,8 @@ impl<P: Preset> Network<P> {
11811178 Ok :: < _ , anyhow:: Error > ( ( ) )
11821179 } )
11831180 . detach ( ) ;
1181+
1182+ Ok ( ( ) )
11841183 }
11851184
11861185 fn handle_blocks_by_root_request (
@@ -1190,10 +1189,7 @@ impl<P: Preset> Network<P> {
11901189 request_id : IncomingRequestId ,
11911190 request : BlocksByRootRequest ,
11921191 ) {
1193- let max_request_blocks = match request {
1194- BlocksByRootRequest :: V1 ( _) => self . controller . chain_config ( ) . max_request_blocks ,
1195- BlocksByRootRequest :: V2 ( _) => self . controller . chain_config ( ) . max_request_blocks_deneb ,
1196- } ;
1192+ let max_request_blocks = request. max_request_blocks ( self . controller . chain_config ( ) ) ;
11971193 let block_roots = request. block_roots ( ) ;
11981194
11991195 debug ! (
@@ -1738,7 +1734,7 @@ impl<P: Preset> Network<P> {
17381734 count : u64 ,
17391735 ) {
17401736 // TODO: is count capped in eth2_libp2p?
1741- let request = BlobsByRangeRequest :: new ( start_slot, count) ;
1737+ let request = BlobsByRangeRequest { start_slot, count } ;
17421738
17431739 debug ! (
17441740 "sending BlobSidecarsByRange request (request_id: {request_id} peer_id: {peer_id}, \
@@ -1896,6 +1892,8 @@ impl<P: Preset> Network<P> {
18961892enum Error {
18971893 #[ error( "end slot overflowed ({start_slot} + {difference})" ) ]
18981894 EndSlotOverflow { start_slot : u64 , difference : u64 } ,
1895+ #[ error( "cannot request {protocol} at {phase}" ) ]
1896+ InvalidPhaseRequest { protocol : String , phase : Phase } ,
18991897}
19001898
19011899fn fork_digest ( fork_context : & ForkContext ) -> ForkDigest {
0 commit comments