diff --git a/Cargo.lock b/Cargo.lock index d86ed34fe..369e632f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14391,6 +14391,7 @@ dependencies = [ "alloy-json-rpc 1.0.9", "alloy-primitives 1.2.0", "alloy-provider", + "alloy-rpc-types-beacon", "clap 4.5.36", "clap_builder", "ctor", diff --git a/crates/bid-scraper/src/main.rs b/crates/bid-scraper/src/main.rs index 0a2efc6e1..4655a90e7 100644 --- a/crates/bid-scraper/src/main.rs +++ b/crates/bid-scraper/src/main.rs @@ -1,22 +1,19 @@ -use bid_scraper::bid_sender::BidSender; -use bid_scraper::bids_publisher::{BidsPublisherService, RelayBidsPublisherConfig}; -use bid_scraper::bloxroute_ws_publisher::{ - BloxrouteWsConnectionHandler, BloxrouteWsPublisher, BloxrouteWsPublisherConfig, +use bid_scraper::{ + bid_sender::BidSender, + bids_publisher::{BidsPublisherService, RelayBidsPublisherConfig}, + bloxroute_ws_publisher::{ + BloxrouteWsConnectionHandler, BloxrouteWsPublisher, BloxrouteWsPublisherConfig, + }, + code_from_rbuilder::{load_config_toml_and_env, setup_tracing_subscriber, LoggerConfig}, + config::{Config, PublisherConfig}, + headers_publisher::{HeadersPublisherService, RelayHeadersPublisherConfig}, + ultrasound_ws_publisher::{ + UltrasoundWsConnectionHandler, UltrasoundWsPublisher, UltrasoundWsPublisherConfig, + }, }; -use bid_scraper::code_from_rbuilder::{ - load_config_toml_and_env, setup_tracing_subscriber, LoggerConfig, -}; -use bid_scraper::config::{Config, PublisherConfig}; -use bid_scraper::headers_publisher::{HeadersPublisherService, RelayHeadersPublisherConfig}; -use bid_scraper::ultrasound_ws_publisher::{ - UltrasoundWsConnectionHandler, UltrasoundWsPublisher, UltrasoundWsPublisherConfig, -}; -use runng::protocol::Pub0; -use runng::Listen; -use std::env; -use std::time::Duration; -use tokio::signal::ctrl_c; -use tokio::time::timeout; +use runng::{protocol::Pub0, Listen}; +use std::{env, time::Duration}; +use tokio::{signal::ctrl_c, time::timeout}; use tokio_util::sync::CancellationToken; use tracing::{error, info}; 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 e73254a7b..af71fbb49 100644 --- a/crates/rbuilder/src/live_builder/block_output/bid_observer.rs +++ b/crates/rbuilder/src/live_builder/block_output/bid_observer.rs @@ -1,10 +1,8 @@ use alloy_primitives::U256; +use alloy_rpc_types_beacon::relay::SubmitBlockRequest; use reth_primitives::SealedBlock; -use crate::{ - building::BuiltBlockTrace, live_builder::payload_events::MevBoostSlotData, - mev_boost::submission::SubmitBlockRequest, -}; +use crate::{building::BuiltBlockTrace, live_builder::payload_events::MevBoostSlotData}; /// Trait that receives every bid made by us to the relays. pub trait BidObserver: std::fmt::Debug { 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 230cab0da..be4111859 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,9 +1,7 @@ +use alloy_rpc_types_beacon::relay::SubmitBlockRequest; use reth_primitives::SealedBlock; -use crate::{ - building::BuiltBlockTrace, live_builder::payload_events::MevBoostSlotData, - mev_boost::submission::SubmitBlockRequest, -}; +use crate::{building::BuiltBlockTrace, live_builder::payload_events::MevBoostSlotData}; use super::bid_observer::BidObserver; diff --git a/crates/rbuilder/src/mev_boost/mod.rs b/crates/rbuilder/src/mev_boost/mod.rs index ee02bb634..0cf64178d 100644 --- a/crates/rbuilder/src/mev_boost/mod.rs +++ b/crates/rbuilder/src/mev_boost/mod.rs @@ -7,6 +7,7 @@ pub mod submission; use super::utils::u256decimal_serde_helper; use alloy_primitives::{Address, BlockHash, Bytes, U256}; +use alloy_rpc_types_beacon::relay::SubmitBlockRequest; use flate2::{write::GzEncoder, Compression}; use itertools::Itertools; use primitive_types::H384; @@ -18,7 +19,7 @@ use serde::{Deserialize, Serialize}; use serde_with::{serde_as, DisplayFromStr}; use ssz::Encode; use std::{io::Write, str::FromStr}; -use submission::{SubmitBlockRequest, SubmitBlockRequestNoBlobs, SubmitBlockRequestWithMetadata}; +use submission::{SubmitBlockRequestNoBlobs, SubmitBlockRequestWithMetadata}; use url::Url; pub use error::*; @@ -486,9 +487,9 @@ impl RelayClient { let (mut body_data, content_type) = if ssz { ( match &submission_with_metadata.submission { - SubmitBlockRequest::Capella(data) => data.0.as_ssz_bytes(), - SubmitBlockRequest::Deneb(data) => data.0.as_ssz_bytes(), - SubmitBlockRequest::Electra(data) => data.0.as_ssz_bytes(), + SubmitBlockRequest::Capella(data) => data.as_ssz_bytes(), + SubmitBlockRequest::Deneb(data) => data.as_ssz_bytes(), + SubmitBlockRequest::Electra(data) => data.as_ssz_bytes(), }, SSZ_CONTENT_TYPE, ) @@ -825,7 +826,7 @@ mod tests { let relay_url = Url::from_str(&srv.endpoint()).unwrap(); let relay = RelayClient::from_url(relay_url, None, None, None); - let submission = SubmitBlockRequest::Deneb(generator.create_deneb_submit_block_request()); + let submission = SubmitBlockRequest::Deneb(generator.create_deneb_submit_block_request().0); let sub_relay = SubmitBlockRequestWithMetadata { submission, metadata: BidMetadata { diff --git a/crates/rbuilder/src/mev_boost/sign_payload.rs b/crates/rbuilder/src/mev_boost/sign_payload.rs index 360f601d1..5ade11aeb 100644 --- a/crates/rbuilder/src/mev_boost/sign_payload.rs +++ b/crates/rbuilder/src/mev_boost/sign_payload.rs @@ -1,15 +1,13 @@ -use super::submission::{ - CapellaSubmitBlockRequest, DenebSubmitBlockRequest, ElectraSubmitBlockRequest, - SubmitBlockRequest, -}; use crate::utils::u256decimal_serde_helper; -use alloy_eips::eip7685::Requests; -use alloy_eips::{eip2718::Encodable2718, eip4844::BlobTransactionSidecar}; +use alloy_eips::{eip2718::Encodable2718, eip4844::BlobTransactionSidecar, eip7685::Requests}; use alloy_primitives::{Address, BlockHash, Bytes, FixedBytes, B256, U256}; -use alloy_rpc_types_beacon::requests::ExecutionRequestsV4; use alloy_rpc_types_beacon::{ events::PayloadAttributesData, - relay::{BidTrace, SignedBidSubmissionV2, SignedBidSubmissionV3, SignedBidSubmissionV4}, + relay::{ + BidTrace, SignedBidSubmissionV2, SignedBidSubmissionV3, SignedBidSubmissionV4, + SubmitBlockRequest, + }, + requests::ExecutionRequestsV4, BlsPublicKey, }; use alloy_rpc_types_engine::{ @@ -200,28 +198,28 @@ pub fn sign_block_for_relay( let execution_requests = ExecutionRequestsV4::try_from(Requests::new(execution_requests.to_vec()))?; if chain_spec.is_prague_active_at_timestamp(sealed_block.timestamp) { - SubmitBlockRequest::Electra(ElectraSubmitBlockRequest(SignedBidSubmissionV4 { + SubmitBlockRequest::Electra(SignedBidSubmissionV4 { message, execution_payload, blobs_bundle, signature, execution_requests, - })) + }) } else { - SubmitBlockRequest::Deneb(DenebSubmitBlockRequest(SignedBidSubmissionV3 { + SubmitBlockRequest::Deneb(SignedBidSubmissionV3 { message, execution_payload, blobs_bundle, signature, - })) + }) } } else { let execution_payload = capella_payload; - SubmitBlockRequest::Capella(CapellaSubmitBlockRequest(SignedBidSubmissionV2 { + SubmitBlockRequest::Capella(SignedBidSubmissionV2 { message, execution_payload, signature, - })) + }) }; Ok(submit_block_request) diff --git a/crates/rbuilder/src/mev_boost/submission.rs b/crates/rbuilder/src/mev_boost/submission.rs index 0661057e7..f1211c770 100644 --- a/crates/rbuilder/src/mev_boost/submission.rs +++ b/crates/rbuilder/src/mev_boost/submission.rs @@ -1,18 +1,15 @@ use alloy_primitives::U256; use alloy_rpc_types_beacon::{ - relay::{BidTrace, SignedBidSubmissionV2, SignedBidSubmissionV3, SignedBidSubmissionV4}, + relay::{BidTrace, SignedBidSubmissionV3, SubmitBlockRequest}, requests::ExecutionRequestsV4, BlsSignature, }; use alloy_rpc_types_engine::{BlobsBundleV1, ExecutionPayloadV3}; use serde::{Deserialize, Serialize}; -use ssz::{Decode, DecodeError, Encode}; +use ssz::Encode; use crate::primitives::OrderId; -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct ElectraSubmitBlockRequest(pub SignedBidSubmissionV4); - #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct DenebSubmitBlockRequest(pub SignedBidSubmissionV3); @@ -22,43 +19,6 @@ impl DenebSubmitBlockRequest { } } -#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] -pub struct CapellaSubmitBlockRequest(pub SignedBidSubmissionV2); - -#[derive(Debug, Clone, Serialize, Deserialize)] -#[serde(untagged)] -pub enum SubmitBlockRequest { - Capella(CapellaSubmitBlockRequest), - Deneb(DenebSubmitBlockRequest), - Electra(ElectraSubmitBlockRequest), -} - -impl SubmitBlockRequest { - pub fn bid_trace(&self) -> &BidTrace { - match self { - SubmitBlockRequest::Capella(req) => &req.0.message, - SubmitBlockRequest::Deneb(req) => &req.0.message, - SubmitBlockRequest::Electra(req) => &req.0.message, - } - } - - pub fn from_ssz_bytes(bytes: &[u8]) -> Result { - if let Ok(result) = SignedBidSubmissionV4::from_ssz_bytes(bytes) { - return Ok(SubmitBlockRequest::Electra(ElectraSubmitBlockRequest( - result, - ))); - } - if let Ok(result) = SignedBidSubmissionV3::from_ssz_bytes(bytes) { - return Ok(SubmitBlockRequest::Deneb(DenebSubmitBlockRequest(result))); - } - - let result = SignedBidSubmissionV2::from_ssz_bytes(bytes)?; - Ok(SubmitBlockRequest::Capella(CapellaSubmitBlockRequest( - result, - ))) - } -} - #[derive(Clone, Debug)] pub struct BidMetadata { pub value: BidValueMetadata, @@ -99,10 +59,10 @@ impl serde::Serialize for SubmitBlockRequestNoBlobs<'_> { } SignedBidSubmissionV3Ref { - message: &v3.0.message, - execution_payload: &v3.0.execution_payload, + message: &v3.message, + execution_payload: &v3.execution_payload, blobs_bundle: &BlobsBundleV1::new([]), // override blobs bundle with empty one - signature: &v3.0.signature, + signature: &v3.signature, } .serialize(serializer) } @@ -118,11 +78,11 @@ impl serde::Serialize for SubmitBlockRequestNoBlobs<'_> { } SignedBidSubmissionV4Ref { - message: &v4.0.message, - execution_payload: &v4.0.execution_payload, + message: &v4.message, + execution_payload: &v4.execution_payload, blobs_bundle: &BlobsBundleV1::new([]), // override blobs bundle with empty one - signature: &v4.0.signature, - execution_requests: &v4.0.execution_requests, + signature: &v4.signature, + execution_requests: &v4.execution_requests, } .serialize(serializer) } diff --git a/crates/rbuilder/src/provider/mod.rs b/crates/rbuilder/src/provider/mod.rs index 1bcbaccb0..dc7982025 100644 --- a/crates/rbuilder/src/provider/mod.rs +++ b/crates/rbuilder/src/provider/mod.rs @@ -1,6 +1,6 @@ -use crate::roothash::RootHashError; use crate::{ building::ThreadBlockBuildingContext, live_builder::simulation::SimulatedOrderCommand, + roothash::RootHashError, }; use alloy_consensus::Header; use alloy_eips::BlockNumHash; diff --git a/crates/test-relay/Cargo.toml b/crates/test-relay/Cargo.toml index 7c657f14e..c3630b84d 100644 --- a/crates/test-relay/Cargo.toml +++ b/crates/test-relay/Cargo.toml @@ -20,6 +20,7 @@ alloy-json-rpc.workspace = true alloy-primitives.workspace = true alloy-provider.workspace = true alloy-consensus.workspace = true +alloy-rpc-types-beacon.workspace = true serde.workspace = true serde_with.workspace = true serde_json.workspace = true diff --git a/crates/test-relay/src/relay.rs b/crates/test-relay/src/relay.rs index 42da66c37..06d30b5c0 100644 --- a/crates/test-relay/src/relay.rs +++ b/crates/test-relay/src/relay.rs @@ -8,6 +8,7 @@ use crate::{ use ahash::HashMap; use alloy_consensus::proofs::calculate_withdrawals_root; use alloy_primitives::{bytes::Bytes, utils::format_ether, B256, U256}; +use alloy_rpc_types_beacon::relay::SubmitBlockRequest; use flate2::bufread::GzDecoder; use parking_lot::Mutex; use rbuilder::{ @@ -16,19 +17,23 @@ use rbuilder::{ block_list_provider::NullBlockListProvider, payload_events::{MevBoostSlotData, MevBoostSlotDataGenerator}, }, - mev_boost::submission::SubmitBlockRequest, primitives::mev_boost::MevBoostRelaySlotInfoProvider, }; use serde::{Deserialize, Serialize}; -use std::time::Instant; -use std::{collections::hash_map::Entry, sync::Arc, time::Duration}; -use std::{io::Read, net::SocketAddr}; +use ssz::Decode; +use std::{ + collections::hash_map::Entry, + io::Read, + net::SocketAddr, + sync::Arc, + time::{Duration, Instant}, +}; use time::OffsetDateTime; use tokio::sync::mpsc; use tokio_util::sync::CancellationToken; use tracing::{debug, error, info, warn}; -use warp::body; use warp::{ + body, http::status::StatusCode, query, reply::{self, Reply}, diff --git a/crates/test-relay/src/validation_api_client.rs b/crates/test-relay/src/validation_api_client.rs index d479a7bda..10844d500 100644 --- a/crates/test-relay/src/validation_api_client.rs +++ b/crates/test-relay/src/validation_api_client.rs @@ -1,9 +1,10 @@ use alloy_json_rpc::{ErrorPayload, RpcError}; +use alloy_rpc_types_beacon::relay::SubmitBlockRequest; use std::{fmt::Debug, sync::Arc}; use alloy_primitives::B256; use alloy_provider::{Provider, RootProvider}; -use rbuilder::{mev_boost::submission::SubmitBlockRequest, utils::http_provider}; +use rbuilder::utils::http_provider; use serde::Serialize; use serde_with::{serde_as, DisplayFromStr}; use tokio::sync::mpsc;