From 7db76efe12d0d5883dad23f18a176caba6c5a07c Mon Sep 17 00:00:00 2001 From: Daniel Xifra Date: Wed, 30 Apr 2025 11:52:46 -0300 Subject: [PATCH 1/3] BidObserverMultiplexer + params as ref --- .../live_builder/block_output/bid_observer.rs | 12 +++---- .../block_output/bid_observer_multiplexer.rs | 34 +++++++++++++++++++ .../src/live_builder/block_output/mod.rs | 1 + .../live_builder/block_output/relay_submit.rs | 6 ++-- 4 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs diff --git a/crates/rbuilder/src/live_builder/block_output/bid_observer.rs b/crates/rbuilder/src/live_builder/block_output/bid_observer.rs index 3a3531322..da8b4bbde 100644 --- a/crates/rbuilder/src/live_builder/block_output/bid_observer.rs +++ b/crates/rbuilder/src/live_builder/block_output/bid_observer.rs @@ -9,9 +9,9 @@ pub trait BidObserver: std::fmt::Debug { /// This should NOT block since it's executed in the submitting thread. fn block_submitted( &self, - sealed_block: SealedBlock, - submit_block_request: SubmitBlockRequest, - built_block_trace: BuiltBlockTrace, + sealed_block: &SealedBlock, + submit_block_request: &SubmitBlockRequest, + built_block_trace: &BuiltBlockTrace, builder_name: String, best_bid_value: U256, ); @@ -23,9 +23,9 @@ pub struct NullBidObserver {} impl BidObserver for NullBidObserver { fn block_submitted( &self, - _sealed_block: SealedBlock, - _submit_block_request: SubmitBlockRequest, - _built_block_trace: BuiltBlockTrace, + _sealed_block: &SealedBlock, + _submit_block_request: &SubmitBlockRequest, + _built_block_trace: &BuiltBlockTrace, _builder_name: String, _best_bid_value: U256, ) { diff --git a/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs b/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs new file mode 100644 index 000000000..99ee0e095 --- /dev/null +++ b/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs @@ -0,0 +1,34 @@ +use rbuilder::live_builder::block_output::bid_observer::BidObserver; + +/// Implements BidObserver forwarding all calls to several BidObservers. +#[derive(Default)] +pub struct BidObserverMultiplexer { + observers: Vec>, +} + +impl BidObserverMultiplexer { + pub fn push(&mut self, obs: Box) { + self.observers.push(obs); + } +} + +impl BidObserver for BidObserverMultiplexer { + fn block_submitted( + &self, + sealed_block: reth::primitives::SealedBlock, + submit_block_request: rbuilder::mev_boost::submission::SubmitBlockRequest, + built_block_trace: rbuilder::building::BuiltBlockTrace, + builder_name: String, + best_bid_value: alloy_primitives::U256, + ) { + for obs in self.observers { + obs.block_submitted( + sealed_block, + submit_block_request, + built_block_trace, + builder_name, + best_bid_value, + ); + } + } +} diff --git a/crates/rbuilder/src/live_builder/block_output/mod.rs b/crates/rbuilder/src/live_builder/block_output/mod.rs index 3c7c5f316..b0c3e1c2f 100644 --- a/crates/rbuilder/src/live_builder/block_output/mod.rs +++ b/crates/rbuilder/src/live_builder/block_output/mod.rs @@ -1,4 +1,5 @@ pub mod bid_observer; +pub mod bid_observer_multiplexer; pub mod bid_value_source; pub mod bidding; pub mod block_sealing_bidder_factory; diff --git a/crates/rbuilder/src/live_builder/block_output/relay_submit.rs b/crates/rbuilder/src/live_builder/block_output/relay_submit.rs index 996e50bcc..1970a1d6a 100644 --- a/crates/rbuilder/src/live_builder/block_output/relay_submit.rs +++ b/crates/rbuilder/src/live_builder/block_output/relay_submit.rs @@ -332,9 +332,9 @@ async fn run_submit_to_relays_job( submission_span.in_scope(|| { // NOTE: we only notify normal submission here because they have the same contents but different pubkeys config.bid_observer.block_submitted( - block.sealed_block, - normal_signed_submission.submission, - block.trace, + &block.sealed_block, + &normal_signed_submission.submission, + &block.trace, builder_name, bid_metadata.value.top_competitor_bid.unwrap_or_default(), ); From e128a5375e760c2186019e3edb1c1685e3a66eab Mon Sep 17 00:00:00 2001 From: Daniel Xifra Date: Wed, 30 Apr 2025 12:09:39 -0300 Subject: [PATCH 2/3] done --- .../block_output/bid_observer_multiplexer.rs | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs b/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs index 99ee0e095..071d5a4db 100644 --- a/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs +++ b/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs @@ -1,4 +1,8 @@ -use rbuilder::live_builder::block_output::bid_observer::BidObserver; +use reth_primitives::SealedBlock; + +use crate::{building::BuiltBlockTrace, mev_boost::submission::SubmitBlockRequest}; + +use super::bid_observer::BidObserver; /// Implements BidObserver forwarding all calls to several BidObservers. #[derive(Default)] @@ -6,6 +10,12 @@ pub struct BidObserverMultiplexer { observers: Vec>, } +impl std::fmt::Debug for BidObserverMultiplexer { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_struct("BidObserverMultiplexer").finish() + } +} + impl BidObserverMultiplexer { pub fn push(&mut self, obs: Box) { self.observers.push(obs); @@ -15,18 +25,18 @@ impl BidObserverMultiplexer { impl BidObserver for BidObserverMultiplexer { fn block_submitted( &self, - sealed_block: reth::primitives::SealedBlock, - submit_block_request: rbuilder::mev_boost::submission::SubmitBlockRequest, - built_block_trace: rbuilder::building::BuiltBlockTrace, + sealed_block: &SealedBlock, + submit_block_request: &SubmitBlockRequest, + built_block_trace: &BuiltBlockTrace, builder_name: String, best_bid_value: alloy_primitives::U256, ) { - for obs in self.observers { + for obs in &self.observers { obs.block_submitted( sealed_block, submit_block_request, built_block_trace, - builder_name, + builder_name.clone(), best_bid_value, ); } From 30dae528be39252990583c6cff94c655dcc6a81f Mon Sep 17 00:00:00 2001 From: Daniel Xifra Date: Wed, 30 Apr 2025 13:26:23 -0300 Subject: [PATCH 3/3] MevBoostSlotData on notification --- .../rbuilder/src/live_builder/block_output/bid_observer.rs | 7 ++++++- .../live_builder/block_output/bid_observer_multiplexer.rs | 7 ++++++- .../rbuilder/src/live_builder/block_output/relay_submit.rs | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/crates/rbuilder/src/live_builder/block_output/bid_observer.rs b/crates/rbuilder/src/live_builder/block_output/bid_observer.rs index da8b4bbde..e73254a7b 100644 --- a/crates/rbuilder/src/live_builder/block_output/bid_observer.rs +++ b/crates/rbuilder/src/live_builder/block_output/bid_observer.rs @@ -1,7 +1,10 @@ use alloy_primitives::U256; use reth_primitives::SealedBlock; -use crate::{building::BuiltBlockTrace, mev_boost::submission::SubmitBlockRequest}; +use crate::{ + building::BuiltBlockTrace, live_builder::payload_events::MevBoostSlotData, + mev_boost::submission::SubmitBlockRequest, +}; /// Trait that receives every bid made by us to the relays. pub trait BidObserver: std::fmt::Debug { @@ -9,6 +12,7 @@ pub trait BidObserver: std::fmt::Debug { /// This should NOT block since it's executed in the submitting thread. fn block_submitted( &self, + slot_data: &MevBoostSlotData, sealed_block: &SealedBlock, submit_block_request: &SubmitBlockRequest, built_block_trace: &BuiltBlockTrace, @@ -23,6 +27,7 @@ pub struct NullBidObserver {} impl BidObserver for NullBidObserver { fn block_submitted( &self, + _slot_data: &MevBoostSlotData, _sealed_block: &SealedBlock, _submit_block_request: &SubmitBlockRequest, _built_block_trace: &BuiltBlockTrace, diff --git a/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs b/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs index 071d5a4db..230cab0da 100644 --- a/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs +++ b/crates/rbuilder/src/live_builder/block_output/bid_observer_multiplexer.rs @@ -1,6 +1,9 @@ use reth_primitives::SealedBlock; -use crate::{building::BuiltBlockTrace, mev_boost::submission::SubmitBlockRequest}; +use crate::{ + building::BuiltBlockTrace, live_builder::payload_events::MevBoostSlotData, + mev_boost::submission::SubmitBlockRequest, +}; use super::bid_observer::BidObserver; @@ -25,6 +28,7 @@ impl BidObserverMultiplexer { impl BidObserver for BidObserverMultiplexer { fn block_submitted( &self, + slot_data: &MevBoostSlotData, sealed_block: &SealedBlock, submit_block_request: &SubmitBlockRequest, built_block_trace: &BuiltBlockTrace, @@ -33,6 +37,7 @@ impl BidObserver for BidObserverMultiplexer { ) { for obs in &self.observers { obs.block_submitted( + slot_data, sealed_block, submit_block_request, built_block_trace, diff --git a/crates/rbuilder/src/live_builder/block_output/relay_submit.rs b/crates/rbuilder/src/live_builder/block_output/relay_submit.rs index 1970a1d6a..963e2bc8a 100644 --- a/crates/rbuilder/src/live_builder/block_output/relay_submit.rs +++ b/crates/rbuilder/src/live_builder/block_output/relay_submit.rs @@ -332,6 +332,7 @@ async fn run_submit_to_relays_job( submission_span.in_scope(|| { // NOTE: we only notify normal submission here because they have the same contents but different pubkeys config.bid_observer.block_submitted( + &slot_data, &block.sealed_block, &normal_signed_submission.submission, &block.trace,