From 842b8696608d1af92f6cf5504d80421798996636 Mon Sep 17 00:00:00 2001 From: jacobkaufmann Date: Wed, 6 Sep 2023 20:30:47 -0600 Subject: [PATCH] refactor: handle missing proposer in bid opening --- mev-build-rs/src/mempool_builder.rs | 3 ++- mev-rs/src/error.rs | 4 +++- mev-rs/src/proposer_scheduler.rs | 6 ++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mev-build-rs/src/mempool_builder.rs b/mev-build-rs/src/mempool_builder.rs index b42dcdba..e3a2b9d7 100644 --- a/mev-build-rs/src/mempool_builder.rs +++ b/mev-build-rs/src/mempool_builder.rs @@ -256,7 +256,8 @@ impl BlindedBlockProvider for Builder { signed_block: &mut SignedBlindedBeaconBlock, ) -> Result { let slot = signed_block.slot(); - let public_key = self.proposer_scheduler.get_proposer_for(slot)?; + let public_key = + self.proposer_scheduler.get_proposer_for(slot).ok_or(Error::MissingProposer(slot))?; signed_block.verify_signature(&public_key, self.genesis_validators_root, &self.context)?; let parent_hash = signed_block.parent_hash(); diff --git a/mev-rs/src/error.rs b/mev-rs/src/error.rs index 39414ad3..dae73ad1 100644 --- a/mev-rs/src/error.rs +++ b/mev-rs/src/error.rs @@ -1,7 +1,7 @@ use crate::types::BidRequest; use beacon_api_client::Error as ApiError; use ethereum_consensus::{ - primitives::{BlsPublicKey, ExecutionAddress, Hash32}, + primitives::{BlsPublicKey, ExecutionAddress, Hash32, Slot}, state_transition::Error as ConsensusError, }; use thiserror::Error; @@ -16,6 +16,8 @@ pub enum Error { NoBids, #[error("could not find relay with outstanding bid to accept")] MissingOpenBid, + #[error("could not find proposer for slot {0}")] + MissingProposer(Slot), #[error("could not register with any relay")] CouldNotRegister, #[error("no preferences found for validator with public key {0}")] diff --git a/mev-rs/src/proposer_scheduler.rs b/mev-rs/src/proposer_scheduler.rs index 09f57306..578eed2f 100644 --- a/mev-rs/src/proposer_scheduler.rs +++ b/mev-rs/src/proposer_scheduler.rs @@ -8,8 +8,6 @@ use thiserror::Error; #[derive(Debug, Error)] pub enum Error { - #[error("missing proposer for the requested slot {0}")] - MissingProposer(Slot), #[error("api error: {0}")] Api(#[from] ApiError), } @@ -48,8 +46,8 @@ impl ProposerScheduler { Ok(duties) } - pub fn get_proposer_for(&self, slot: Slot) -> Result { + pub fn get_proposer_for(&self, slot: Slot) -> Option { let state = self.state.lock(); - state.proposer_schedule.get(&slot).cloned().ok_or_else(|| Error::MissingProposer(slot)) + state.proposer_schedule.get(&slot).cloned() } }