Skip to content

Commit 029b664

Browse files
feat(pbs): add retry limit for validator registration
1 parent f9e2dc8 commit 029b664

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

crates/common/src/config/pbs.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ use crate::{
2727
},
2828
pbs::{
2929
BuilderEventPublisher, DefaultTimeout, RelayClient, RelayEntry, DEFAULT_PBS_PORT,
30-
LATE_IN_SLOT_TIME_MS,
30+
LATE_IN_SLOT_TIME_MS, REGISTER_VALIDATOR_RETRY_LIMIT
3131
},
3232
types::{Chain, Jwt, ModuleId},
3333
utils::{
34-
as_eth_str, default_bool, default_host, default_u16, default_u256, default_u64, WEI_PER_ETH,
34+
as_eth_str, default_bool, default_host, default_u16, default_u256, default_u64, default_u32, WEI_PER_ETH,
3535
},
3636
};
3737

@@ -122,6 +122,9 @@ pub struct PbsConfig {
122122
pub extra_validation_enabled: bool,
123123
/// Execution Layer RPC url to use for extra validation
124124
pub rpc_url: Option<Url>,
125+
/// Maximum number of retries for validator registration request per relay
126+
#[serde(default = "default_u32::<REGISTER_VALIDATOR_RETRY_LIMIT>")]
127+
pub register_validator_retry_limit: u32,
125128
}
126129

127130
impl PbsConfig {
@@ -140,6 +143,7 @@ impl PbsConfig {
140143
self.timeout_get_header_ms < self.late_in_slot_time_ms,
141144
"timeout_get_header_ms must be less than late_in_slot_time_ms"
142145
);
146+
ensure!(self.register_validator_retry_limit > 0,"register_validator_retry_limit must be greater than 0");
143147

144148
ensure!(
145149
self.min_bid_wei < U256::from(WEI_PER_ETH),

crates/common/src/pbs/constants.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,6 @@ impl DefaultTimeout {
3030
}
3131

3232
pub const LATE_IN_SLOT_TIME_MS: u64 = 2000;
33+
34+
// Maximum number of retries for validator registration request per relay
35+
pub const REGISTER_VALIDATOR_RETRY_LIMIT: u32 = 3;

crates/common/src/utils.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ pub const fn default_u64<const U: u64>() -> u64 {
137137
U
138138
}
139139

140+
pub const fn default_u32<const U: u32>() -> u32 {
141+
U
142+
}
143+
140144
pub const fn default_u16<const U: u16>() -> u16 {
141145
U
142146
}

crates/pbs/src/mev_boost/register_validator.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ pub async fn register_validator<S: BuilderApiState>(
4343
relay.clone(),
4444
send_headers.clone(),
4545
state.pbs_config().timeout_register_validator_ms,
46+
state.pbs_config().register_validator_retry_limit,
4647
)
4748
.in_current_span(),
4849
));
@@ -54,6 +55,7 @@ pub async fn register_validator<S: BuilderApiState>(
5455
relay.clone(),
5556
send_headers.clone(),
5657
state.pbs_config().timeout_register_validator_ms,
58+
state.pbs_config().register_validator_retry_limit,
5759
)
5860
.in_current_span(),
5961
));
@@ -85,6 +87,7 @@ async fn send_register_validator_with_timeout(
8587
relay: RelayClient,
8688
headers: HeaderMap,
8789
timeout_ms: u64,
90+
retry_limit: u32,
8891
) -> Result<(), PbsError> {
8992
let url = relay.register_validator_url()?;
9093
let mut remaining_timeout_ms = timeout_ms;
@@ -106,6 +109,14 @@ async fn send_register_validator_with_timeout(
106109
Ok(_) => return Ok(()),
107110

108111
Err(err) if err.should_retry() => {
112+
if retry >=retry_limit {
113+
error!(
114+
relay_id = relay.id.as_str(),
115+
retry,
116+
"reached retry limit for validator registration"
117+
);
118+
return Err(err);
119+
}
109120
tokio::time::sleep(backoff).await;
110121
backoff += Duration::from_millis(250);
111122

0 commit comments

Comments
 (0)