From d99f4042ce84ceeab933793f1c6fc0f3c6bde25a Mon Sep 17 00:00:00 2001 From: Daniel Xifra Date: Wed, 19 Nov 2025 11:53:59 -0300 Subject: [PATCH] 2 extra fields --- crates/rbuilder-operator/src/clickhouse.rs | 10 ++++++++++ crates/rbuilder-operator/src/flashbots_config.rs | 4 ++++ .../true_block_value_push/best_true_value_observer.rs | 2 ++ crates/rbuilder/src/building/mod.rs | 1 + crates/rbuilder/src/building/order_commit.rs | 1 + .../block_output/bidding_service_interface.rs | 3 +++ .../src/live_builder/block_output/relay_submit.rs | 2 ++ 7 files changed, 23 insertions(+) diff --git a/crates/rbuilder-operator/src/clickhouse.rs b/crates/rbuilder-operator/src/clickhouse.rs index af3a37aa0..b3474ae0b 100644 --- a/crates/rbuilder-operator/src/clickhouse.rs +++ b/crates/rbuilder-operator/src/clickhouse.rs @@ -63,6 +63,8 @@ pub struct BlockRow { pub delayed_payment_values: Vec, pub delayed_payment_addresses: Vec, + pub sent_to_relay_at: i64, + pub tx_hashes: Vec, } impl ClickhouseRowExt for BlockRow { @@ -218,6 +220,7 @@ impl BidObserver for BuiltBlocksWriter { builder_name: String, best_bid_value: U256, _relays: &RelaySet, + sent_to_relay_at: OffsetDateTime, ) { let slot = slot_data.slot(); let block_number = slot_data.block(); @@ -254,6 +257,11 @@ impl BidObserver for BuiltBlocksWriter { .iter() .map(|address| address.to_string().to_lowercase()) .collect(); + let tx_hashes = built_block_trace + .included_orders + .iter() + .flat_map(|res| res.tx_infos.iter().map(|info| info.tx.hash().to_string())) + .collect(); let block_row = BlockRow { block_number, profit: format_ether(submit_trace.value), @@ -285,6 +293,8 @@ impl BidObserver for BuiltBlocksWriter { delayed_payment_sources, delayed_payment_values, delayed_payment_addresses, + sent_to_relay_at: offset_date_to_clickhouse_timestamp(sent_to_relay_at), + tx_hashes, }; if let Err(err) = blocks_tx.try_send(block_row) { error!(?err, "Failed to send block to clickhouse"); diff --git a/crates/rbuilder-operator/src/flashbots_config.rs b/crates/rbuilder-operator/src/flashbots_config.rs index a7821f0b7..b0b45944a 100644 --- a/crates/rbuilder-operator/src/flashbots_config.rs +++ b/crates/rbuilder-operator/src/flashbots_config.rs @@ -35,6 +35,7 @@ use rbuilder::{ use rbuilder_config::EnvOrValue; use serde::Deserialize; use serde_with::serde_as; +use time::OffsetDateTime; use tokio_util::sync::CancellationToken; use tracing::{error, warn}; use url::Url; @@ -454,6 +455,7 @@ impl BidObserver for RbuilderOperatorBidObserver { builder_name: String, best_bid_value: U256, relays: &RelaySet, + sent_to_relay_at: OffsetDateTime, ) { if let Some(p) = self.block_processor.as_ref() { p.block_submitted( @@ -463,6 +465,7 @@ impl BidObserver for RbuilderOperatorBidObserver { builder_name.clone(), best_bid_value, relays, + sent_to_relay_at, ) } if let Some(p) = self.tbv_pusher.as_ref() { @@ -473,6 +476,7 @@ impl BidObserver for RbuilderOperatorBidObserver { builder_name, best_bid_value, relays, + sent_to_relay_at, ) } } diff --git a/crates/rbuilder-operator/src/true_block_value_push/best_true_value_observer.rs b/crates/rbuilder-operator/src/true_block_value_push/best_true_value_observer.rs index 8e867f2fd..2deb56cf8 100644 --- a/crates/rbuilder-operator/src/true_block_value_push/best_true_value_observer.rs +++ b/crates/rbuilder-operator/src/true_block_value_push/best_true_value_observer.rs @@ -9,6 +9,7 @@ use rbuilder::{ }; use redis::RedisError; use std::sync::Arc; +use time::OffsetDateTime; use tokio_util::sync::CancellationToken; use super::{ @@ -80,6 +81,7 @@ impl BidObserver for BestTrueValueObserver { builder_name: String, _best_bid_value: alloy_primitives::U256, _relays: &RelaySet, + _sent_to_relay_at: OffsetDateTime, ) { let block_info = BuiltBlockInfo::new( slot_data.block(), diff --git a/crates/rbuilder/src/building/mod.rs b/crates/rbuilder/src/building/mod.rs index ba74d5a45..88ed842df 100644 --- a/crates/rbuilder/src/building/mod.rs +++ b/crates/rbuilder/src/building/mod.rs @@ -568,6 +568,7 @@ pub struct ExecutionResult { pub inplace_sim: SimValue, pub space_used: BlockSpace, pub order: Order, + /// Landed txs execution info. pub tx_infos: Vec, /// Patch to get the executed OrderIds for merged sbundles (see: [`BundleOk::original_order_ids`],[`ShareBundleMerger`] ) /// Fully dropped orders (TxRevertBehavior::AllowedExcluded allows it!) are not included. diff --git a/crates/rbuilder/src/building/order_commit.rs b/crates/rbuilder/src/building/order_commit.rs index 52fcd34bb..dd9ca2fbf 100644 --- a/crates/rbuilder/src/building/order_commit.rs +++ b/crates/rbuilder/src/building/order_commit.rs @@ -261,6 +261,7 @@ pub struct DelayedKickback { pub struct BundleOk { pub space_used: BlockSpace, pub cumulative_space_used: BlockSpace, + /// Landed txs execution info. pub tx_infos: Vec, /// nonces_updates has a set of deduplicated final nonces of the txs in the order pub nonces_updated: Vec<(Address, u64)>, diff --git a/crates/rbuilder/src/live_builder/block_output/bidding_service_interface.rs b/crates/rbuilder/src/live_builder/block_output/bidding_service_interface.rs index aa89c97cb..c60c8c44d 100644 --- a/crates/rbuilder/src/live_builder/block_output/bidding_service_interface.rs +++ b/crates/rbuilder/src/live_builder/block_output/bidding_service_interface.rs @@ -25,6 +25,7 @@ use crate::{ #[automock] pub trait BidObserver: std::fmt::Debug { /// This should NOT block since it's executed in the submitting thread. + #[allow(clippy::too_many_arguments)] fn block_submitted( &self, slot_data: &MevBoostSlotData, @@ -33,6 +34,7 @@ pub trait BidObserver: std::fmt::Debug { builder_name: String, best_bid_value: U256, relays: &RelaySet, + sent_to_relay_at: OffsetDateTime, ); } @@ -48,6 +50,7 @@ impl BidObserver for NullBidObserver { _builder_name: String, _best_bid_value: U256, _relays: &RelaySet, + _sent_to_relay_at: OffsetDateTime, ) { } } 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 4f00b4ea0..3093b3049 100644 --- a/crates/rbuilder/src/live_builder/block_output/relay_submit.rs +++ b/crates/rbuilder/src/live_builder/block_output/relay_submit.rs @@ -267,6 +267,7 @@ async fn run_submit_to_relays_job( }; mark_submission_start_time(block.trace.orders_sealed_at); + let sent_to_relay_at = OffsetDateTime::now_utc(); submit_block_to_relays( request.clone(), &bid_metadata, @@ -286,6 +287,7 @@ async fn run_submit_to_relays_job( builder_name, bid_metadata.value.top_competitor_bid.unwrap_or_default(), &relay_set, + sent_to_relay_at, ); }); }