Skip to content

Commit ef2a76a

Browse files
hangleangpovi
authored andcommitted
Revert BlobSidecarsByRoot/Range version bump
* check max_request_blob_sidecars based on phase on both handlers * avoid expect on both handlers, return error instead
1 parent c185f88 commit ef2a76a

File tree

3 files changed

+46
-39
lines changed

3 files changed

+46
-39
lines changed

p2p/src/network.rs

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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> {
18961892
enum 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

19011899
fn fork_digest(fork_context: &ForkContext) -> ForkDigest {

types/src/config.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,15 @@ impl Config {
752752
}
753753
}
754754

755+
#[must_use]
756+
pub const fn max_request_blob_sidecars(&self, phase: Phase) -> Option<u64> {
757+
match phase {
758+
Phase::Phase0 | Phase::Altair | Phase::Bellatrix | Phase::Capella => None,
759+
Phase::Deneb => Some(self.max_request_blob_sidecars),
760+
Phase::Electra => Some(self.max_request_blob_sidecars_electra),
761+
}
762+
}
763+
755764
fn fork_slots<P: Preset>(&self) -> impl Iterator<Item = (Phase, Toption<Slot>)> + '_ {
756765
enum_iterator::all().map(|phase| (phase, self.fork_slot::<P>(phase)))
757766
}

0 commit comments

Comments
 (0)