diff --git a/Cargo.lock b/Cargo.lock index c348f6e5..f224ca50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -391,7 +391,7 @@ dependencies = [ [[package]] name = "beacon-api-client" version = "0.1.0" -source = "git+https://github.com/ralexstokes/beacon-api-client?rev=56a290c#56a290ca9d2c67086917a0929cdf2fe35e5f917f" +source = "git+https://github.com/ralexstokes/beacon-api-client?rev=d838d93#d838d930f80fdfcadfe32147bcb2e805aec074bc" dependencies = [ "clap", "ethereum-consensus", @@ -860,7 +860,7 @@ dependencies = [ [[package]] name = "ethereum-consensus" version = "0.1.1" -source = "git+https://github.com/ralexstokes/ethereum-consensus?rev=56418ea#56418ea4c376470c7d75eb12f75bc882e1a92ca6" +source = "git+https://github.com/ralexstokes/ethereum-consensus?rev=2bcb975#2bcb97563bb8dcb15802d1a280b58f21577ea3e2" dependencies = [ "async-stream", "blst", diff --git a/Cargo.toml b/Cargo.toml index 5b4c026b..10fa7777 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,6 @@ members = ["bin/mev", "mev-boost-rs", "mev-relay-rs", "mev-build-rs", "mev-rs"] default-members = ["bin/mev"] [workspace.dependencies] -ethereum-consensus = { git = "https://github.com/ralexstokes/ethereum-consensus", rev = "56418ea" } -beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client", rev = "56a290c" } +ethereum-consensus = { git = "https://github.com/ralexstokes/ethereum-consensus", rev = "2bcb975" } +beacon-api-client = { git = "https://github.com/ralexstokes/beacon-api-client", rev = "d838d93" } ssz_rs = "0.9.0" diff --git a/mev-rs/src/blinded_block_relayer/api/client.rs b/mev-rs/src/blinded_block_relayer/api/client.rs index e868c1e9..77c8ec43 100644 --- a/mev-rs/src/blinded_block_relayer/api/client.rs +++ b/mev-rs/src/blinded_block_relayer/api/client.rs @@ -1,9 +1,9 @@ use crate::{ blinded_block_relayer::BlindedBlockRelayer, - types::{ProposerSchedule, SignedBidReceipt, SignedBidSubmission}, + types::{ProposerSchedule, SignedBidSubmission}, Error, }; -use beacon_api_client::{mainnet::Client as BeaconApiClient, ApiResult, Error as ApiError}; +use beacon_api_client::{api_error_or_ok, mainnet::Client as BeaconApiClient}; /// A `Client` for a service implementing the Relay APIs. #[derive(Clone)] @@ -24,15 +24,8 @@ impl BlindedBlockRelayer for Client { } // TODO support content types - async fn submit_bid( - &self, - signed_submission: &SignedBidSubmission, - ) -> Result { + async fn submit_bid(&self, signed_submission: &SignedBidSubmission) -> Result<(), Error> { let response = self.api.http_post("/relay/v1/builder/blocks", signed_submission).await?; - let receipt: ApiResult = response.json().await.map_err(ApiError::from)?; - match receipt { - ApiResult::Ok(receipt) => Ok(receipt), - ApiResult::Err(err) => Err(ApiError::from(err).into()), - } + api_error_or_ok(response).await.map_err(From::from) } } diff --git a/mev-rs/src/blinded_block_relayer/api/server.rs b/mev-rs/src/blinded_block_relayer/api/server.rs index a0153cab..4b7d6840 100644 --- a/mev-rs/src/blinded_block_relayer/api/server.rs +++ b/mev-rs/src/blinded_block_relayer/api/server.rs @@ -1,7 +1,7 @@ use crate::{ blinded_block_relayer::BlindedBlockRelayer, error::Error, - types::{ProposerSchedule, SignedBidReceipt, SignedBidSubmission}, + types::{ProposerSchedule, SignedBidSubmission}, }; use axum::{ extract::{Json, State}, @@ -25,9 +25,9 @@ async fn handle_get_proposal_schedule( async fn handle_submit_bid( State(relayer): State, Json(signed_bid_submission): Json, -) -> Result, Error> { +) -> Result<(), Error> { tracing::info!("handling bid submission"); - Ok(Json(relayer.submit_bid(&signed_bid_submission).await?)) + relayer.submit_bid(&signed_bid_submission).await } pub struct Server { diff --git a/mev-rs/src/blinded_block_relayer/mod.rs b/mev-rs/src/blinded_block_relayer/mod.rs index e85271b1..11b375ef 100644 --- a/mev-rs/src/blinded_block_relayer/mod.rs +++ b/mev-rs/src/blinded_block_relayer/mod.rs @@ -6,7 +6,7 @@ pub use {api::client::Client, api::server::Server}; use crate::{ error::Error, - types::{ProposerSchedule, SignedBidReceipt, SignedBidSubmission}, + types::{ProposerSchedule, SignedBidSubmission}, }; use async_trait::async_trait; @@ -15,8 +15,5 @@ pub trait BlindedBlockRelayer { async fn get_proposal_schedule(&self) -> Result, Error>; // TODO: support cancellations? - async fn submit_bid( - &self, - signed_submission: &SignedBidSubmission, - ) -> Result; + async fn submit_bid(&self, signed_submission: &SignedBidSubmission) -> Result<(), Error>; } diff --git a/mev-rs/src/types/mod.rs b/mev-rs/src/types/mod.rs index 8f33b143..874367c5 100644 --- a/mev-rs/src/types/mod.rs +++ b/mev-rs/src/types/mod.rs @@ -365,7 +365,7 @@ pub struct ProposerSchedule { pub entry: SignedValidatorRegistration, } -#[derive(Debug, Default, Clone)] +#[derive(Debug, Default, Clone, SimpleSerialize)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct BidTrace { #[serde(with = "crate::serde::as_string")] @@ -374,6 +374,8 @@ pub struct BidTrace { pub block_hash: Hash32, #[serde(rename = "builder_pubkey")] pub builder_public_key: BlsPublicKey, + #[serde(rename = "proposer_pubkey")] + pub proposer_public_key: BlsPublicKey, pub proposer_fee_recipient: ExecutionAddress, #[serde(with = "crate::serde::as_string")] pub gas_limit: u64, @@ -386,21 +388,7 @@ pub struct BidTrace { #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct SignedBidSubmission { pub message: BidTrace, - pub execution_payload: ExecutionPayload, - pub signature: BlsSignature, -} - -#[derive(Debug, Default, Clone)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct BidReceipt { - #[serde(with = "crate::serde::as_string")] - pub receive_timestamp: u64, - pub bid_trace: BidTrace, -} - -#[derive(Debug, Default, Clone)] -#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] -pub struct SignedBidReceipt { - pub message: BidReceipt, + // TODO: support multiple forks + pub execution_payload: capella::ExecutionPayload, pub signature: BlsSignature, }