Skip to content

Commit 6af7e51

Browse files
authored
body too large warn (#140)
* if body too large, return PbsError::PayloadTooLarge
1 parent 6af3ba1 commit 6af7e51

File tree

7 files changed

+25
-6
lines changed

7 files changed

+25
-6
lines changed

crates/common/src/pbs/error.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ pub enum PbsError {
2020
#[error("relay response error. Code: {code}, err: {error_msg}")]
2121
RelayResponse { error_msg: String, code: u16 },
2222

23+
#[error("Response size exceeds 10MB! Got: {payload_size}")]
24+
PayloadTooLarge { payload_size: usize },
25+
2326
#[error("failed validating relay response: {0}")]
2427
Validation(#[from] ValidationError),
2528

crates/common/src/pbs/relay.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ use super::{
1515
HEADER_VERSION_KEY, HEADER_VERSION_VALUE,
1616
};
1717
use crate::{config::RelayConfig, DEFAULT_REQUEST_TIMEOUT};
18+
19+
pub const MAX_SIZE: usize = 10 * 1024 * 1024;
20+
1821
/// A parsed entry of the relay url in the format: scheme://pubkey@host
1922
#[derive(Debug, Clone)]
2023
pub struct RelayEntry {

crates/pbs/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ thiserror.workspace = true
3737
eyre.workspace = true
3838
url.workspace = true
3939
uuid.workspace = true
40-
lazy_static.workspace = true
40+
lazy_static.workspace = true

crates/pbs/src/mev_boost/get_header.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use cb_common::{
1111
pbs::{
1212
error::{PbsError, ValidationError},
1313
GetHeaderParams, GetHeaderResponse, RelayClient, SignedExecutionPayloadHeader,
14-
EMPTY_TX_ROOT_HASH, HEADER_SLOT_UUID_KEY, HEADER_START_TIME_UNIX_MS,
14+
EMPTY_TX_ROOT_HASH, HEADER_SLOT_UUID_KEY, HEADER_START_TIME_UNIX_MS, MAX_SIZE,
1515
},
1616
signature::verify_signed_message,
1717
types::Chain,
@@ -244,13 +244,16 @@ async fn send_one_get_header(
244244
RELAY_STATUS_CODE.with_label_values(&[code.as_str(), GET_HEADER_ENDPOINT_TAG, &relay.id]).inc();
245245

246246
let response_bytes = res.bytes().await?;
247+
if response_bytes.len() > MAX_SIZE {
248+
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
249+
}
250+
247251
if !code.is_success() {
248252
return Err(PbsError::RelayResponse {
249253
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),
250254
code: code.as_u16(),
251255
});
252256
};
253-
254257
if code == StatusCode::NO_CONTENT {
255258
debug!(
256259
?code,

crates/pbs/src/mev_boost/register_validator.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::time::{Duration, Instant};
33
use alloy::rpc::types::beacon::relay::ValidatorRegistration;
44
use axum::http::{HeaderMap, HeaderValue};
55
use cb_common::{
6-
pbs::{error::PbsError, RelayClient, HEADER_START_TIME_UNIX_MS},
6+
pbs::{error::PbsError, RelayClient, HEADER_START_TIME_UNIX_MS, MAX_SIZE},
77
utils::{get_user_agent_with_version, utcnow_ms},
88
};
99
use eyre::bail;
@@ -92,6 +92,9 @@ async fn send_register_validator(
9292
.inc();
9393

9494
let response_bytes = res.bytes().await?;
95+
if response_bytes.len() > MAX_SIZE {
96+
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
97+
}
9598
if !code.is_success() {
9699
let err = PbsError::RelayResponse {
97100
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),

crates/pbs/src/mev_boost/status.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::time::{Duration, Instant};
22

33
use axum::http::HeaderMap;
44
use cb_common::{
5-
pbs::{error::PbsError, RelayClient},
5+
pbs::{error::PbsError, RelayClient, MAX_SIZE},
66
utils::get_user_agent_with_version,
77
};
88
use futures::future::select_ok;
@@ -75,6 +75,9 @@ async fn send_relay_check(relay: &RelayClient, headers: HeaderMap) -> Result<(),
7575
RELAY_STATUS_CODE.with_label_values(&[code.as_str(), STATUS_ENDPOINT_TAG, &relay.id]).inc();
7676

7777
let response_bytes = res.bytes().await?;
78+
if response_bytes.len() > MAX_SIZE {
79+
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
80+
}
7881
if !code.is_success() {
7982
let err = PbsError::RelayResponse {
8083
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),

crates/pbs/src/mev_boost/submit_block.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use cb_common::{
55
pbs::{
66
error::{PbsError, ValidationError},
77
RelayClient, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse, HEADER_SLOT_UUID_KEY,
8-
HEADER_START_TIME_UNIX_MS,
8+
HEADER_START_TIME_UNIX_MS, MAX_SIZE,
99
},
1010
utils::{get_user_agent_with_version, utcnow_ms},
1111
};
@@ -95,6 +95,10 @@ async fn send_submit_block(
9595
.inc();
9696

9797
let response_bytes = res.bytes().await?;
98+
99+
if response_bytes.len() > MAX_SIZE {
100+
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
101+
}
98102
if !code.is_success() {
99103
let err = PbsError::RelayResponse {
100104
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),

0 commit comments

Comments
 (0)