Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions crates/common/src/pbs/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ pub enum PbsError {
#[error("relay response error. Code: {code}, err: {error_msg}")]
RelayResponse { error_msg: String, code: u16 },

#[error("Response size exceeds 10MB! Got: {payload_size}")]
PayloadTooLarge { payload_size: usize },

#[error("failed validating relay response: {0}")]
Validation(#[from] ValidationError),

Expand Down
3 changes: 3 additions & 0 deletions crates/common/src/pbs/relay.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ use super::{
HEADER_VERSION_KEY, HEADER_VERSION_VALUE,
};
use crate::{config::RelayConfig, DEFAULT_REQUEST_TIMEOUT};

pub const MAX_SIZE: usize = 10 * 1024 * 1024;

/// A parsed entry of the relay url in the format: scheme://pubkey@host
#[derive(Debug, Clone)]
pub struct RelayEntry {
Expand Down
2 changes: 1 addition & 1 deletion crates/pbs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ thiserror.workspace = true
eyre.workspace = true
url.workspace = true
uuid.workspace = true
lazy_static.workspace = true
lazy_static.workspace = true
7 changes: 5 additions & 2 deletions crates/pbs/src/mev_boost/get_header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use cb_common::{
pbs::{
error::{PbsError, ValidationError},
GetHeaderParams, GetHeaderResponse, RelayClient, SignedExecutionPayloadHeader,
EMPTY_TX_ROOT_HASH, HEADER_SLOT_UUID_KEY, HEADER_START_TIME_UNIX_MS,
EMPTY_TX_ROOT_HASH, HEADER_SLOT_UUID_KEY, HEADER_START_TIME_UNIX_MS, MAX_SIZE,
},
signature::verify_signed_message,
types::Chain,
Expand Down Expand Up @@ -244,13 +244,16 @@ async fn send_one_get_header(
RELAY_STATUS_CODE.with_label_values(&[code.as_str(), GET_HEADER_ENDPOINT_TAG, &relay.id]).inc();

let response_bytes = res.bytes().await?;
if response_bytes.len() > MAX_SIZE {
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
}

if !code.is_success() {
return Err(PbsError::RelayResponse {
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),
code: code.as_u16(),
});
};

if code == StatusCode::NO_CONTENT {
debug!(
?code,
Expand Down
5 changes: 4 additions & 1 deletion crates/pbs/src/mev_boost/register_validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::time::{Duration, Instant};
use alloy::rpc::types::beacon::relay::ValidatorRegistration;
use axum::http::{HeaderMap, HeaderValue};
use cb_common::{
pbs::{error::PbsError, RelayClient, HEADER_START_TIME_UNIX_MS},
pbs::{error::PbsError, RelayClient, HEADER_START_TIME_UNIX_MS, MAX_SIZE},
utils::{get_user_agent_with_version, utcnow_ms},
};
use eyre::bail;
Expand Down Expand Up @@ -92,6 +92,9 @@ async fn send_register_validator(
.inc();

let response_bytes = res.bytes().await?;
if response_bytes.len() > MAX_SIZE {
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
}
if !code.is_success() {
let err = PbsError::RelayResponse {
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),
Expand Down
5 changes: 4 additions & 1 deletion crates/pbs/src/mev_boost/status.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use std::time::{Duration, Instant};

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

let response_bytes = res.bytes().await?;
if response_bytes.len() > MAX_SIZE {
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
}
if !code.is_success() {
let err = PbsError::RelayResponse {
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),
Expand Down
6 changes: 5 additions & 1 deletion crates/pbs/src/mev_boost/submit_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use cb_common::{
pbs::{
error::{PbsError, ValidationError},
RelayClient, SignedBlindedBeaconBlock, SubmitBlindedBlockResponse, HEADER_SLOT_UUID_KEY,
HEADER_START_TIME_UNIX_MS,
HEADER_START_TIME_UNIX_MS, MAX_SIZE,
},
utils::{get_user_agent_with_version, utcnow_ms},
};
Expand Down Expand Up @@ -95,6 +95,10 @@ async fn send_submit_block(
.inc();

let response_bytes = res.bytes().await?;

if response_bytes.len() > MAX_SIZE {
return Err(PbsError::PayloadTooLarge { payload_size: response_bytes.len() });
}
if !code.is_success() {
let err = PbsError::RelayResponse {
error_msg: String::from_utf8_lossy(&response_bytes).into_owned(),
Expand Down