Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions crates/rbuilder/src/mev_boost/adjustment.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
use alloy_primitives::{Address, Bytes, B256};

/// The type representing UltraSound bid adjustments.
#[derive(
PartialEq,
Eq,
Clone,
Debug,
serde::Serialize,
serde::Deserialize,
ssz_derive::Encode,
ssz_derive::Decode,
)]
pub struct BidAdjustmentData {
/// State root of the payload.
pub state_root: B256,
/// Transactions root of the payload.
pub transactions_root: B256,
/// Receipts root of the payload.
pub receipts_root: B256,
/// The usual builder address that pays the proposer in the last transaction of the block.
/// When we adjust a bid, this transaction is overwritten by a transaction from the collateral
/// account `fee_payer_address`. If we don't adjust the bid, `builder_address` pays the
/// proposer as per usual.
pub builder_address: Address,
/// The state proof for the builder account.
pub builder_proof: Vec<Bytes>,
/// The proposer's fee recipient.
pub fee_recipient_address: Address,
/// The state proof for the fee recipient account.
pub fee_recipient_proof: Vec<Bytes>,
/// The fee payer address that is custodied by the relay.
pub fee_payer_address: Address,
/// The state proof for the fee payer account.
pub fee_payer_proof: Vec<Bytes>,
/// The merkle proof for the last transaction in the block, which will be overwritten with a
/// payment from `fee_payer` to `fee_recipient` if we adjust the bid.
pub placeholder_transaction_proof: Vec<Bytes>,
/// The merkle proof for the receipt of the placeholder transaction. It's required for
/// adjusting payments to contract addresses.
pub placeholder_receipt_proof: Vec<Bytes>,
}
13 changes: 6 additions & 7 deletions crates/rbuilder/src/mev_boost/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
pub mod adjustment;
mod error;
pub mod fake_mev_boost_relay;
pub mod rpc;
Expand All @@ -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::*;
Expand Down Expand Up @@ -500,11 +501,7 @@ impl RelayClient {
// SSZ vs JSON
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(),
},
submission_with_metadata.submission.as_ssz_bytes(),
SSZ_CONTENT_TYPE,
)
} else {
Expand Down Expand Up @@ -694,7 +691,9 @@ mod tests {
use submission::{BidMetadata, BidValueMetadata};

use super::{rpc::TestDataGenerator, *};
use crate::mev_boost::fake_mev_boost_relay::FakeMevBoostRelay;
use crate::mev_boost::{
fake_mev_boost_relay::FakeMevBoostRelay, submission::SubmitBlockRequest,
};

use std::str::FromStr;

Expand Down
15 changes: 9 additions & 6 deletions crates/rbuilder/src/mev_boost/rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,15 @@ pub struct TestDataGenerator {

impl TestDataGenerator {
pub fn create_deneb_submit_block_request(&mut self) -> DenebSubmitBlockRequest {
DenebSubmitBlockRequest(SignedBidSubmissionV3 {
message: self.create_bid_trace(),
execution_payload: self.create_deneb_payload(),
blobs_bundle: self.create_txs_blobs_sidecars(),
signature: self.create_signature(),
})
DenebSubmitBlockRequest {
submission: SignedBidSubmissionV3 {
message: self.create_bid_trace(),
execution_payload: self.create_deneb_payload(),
blobs_bundle: self.create_txs_blobs_sidecars(),
signature: self.create_signature(),
},
adjustment_data: None,
}
}

pub fn create_txs_blobs_sidecars(&mut self) -> BlobsBundleV1 {
Expand Down
30 changes: 17 additions & 13 deletions crates/rbuilder/src/mev_boost/sign_payload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ use super::submission::{
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},
requests::ExecutionRequestsV4,
BlsPublicKey,
};
use alloy_rpc_types_engine::{
Expand Down Expand Up @@ -127,6 +126,9 @@ pub fn sign_block_for_relay(
pubkey: H384,
value: U256,
) -> eyre::Result<SubmitBlockRequest> {
// TODO: add support for bid adjustments
let adjustment_data = None;

let message = BidTrace {
slot: attrs.proposal_slot,
parent_hash: attrs.parent_block_hash,
Expand Down Expand Up @@ -185,7 +187,7 @@ pub fn sign_block_for_relay(
.unwrap_or_default(),
};

let submit_block_request = if chain_spec.is_cancun_active_at_timestamp(sealed_block.timestamp) {
let request = if chain_spec.is_cancun_active_at_timestamp(sealed_block.timestamp) {
let execution_payload = ExecutionPayloadV3 {
payload_inner: capella_payload,
blob_gas_used: sealed_block
Expand All @@ -200,31 +202,33 @@ 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 {
let submission = SignedBidSubmissionV4 {
message,
execution_payload,
blobs_bundle,
signature,
execution_requests,
}))
};
SubmitBlockRequest::electra(ElectraSubmitBlockRequest::new(submission, adjustment_data))
} else {
SubmitBlockRequest::Deneb(DenebSubmitBlockRequest(SignedBidSubmissionV3 {
let submission = SignedBidSubmissionV3 {
message,
execution_payload,
blobs_bundle,
signature,
}))
};
SubmitBlockRequest::deneb(DenebSubmitBlockRequest::new(submission, adjustment_data))
}
} else {
let execution_payload = capella_payload;
SubmitBlockRequest::Capella(CapellaSubmitBlockRequest(SignedBidSubmissionV2 {
let submission = SignedBidSubmissionV2 {
message,
execution_payload,
execution_payload: capella_payload,
signature,
}))
};
SubmitBlockRequest::capella(CapellaSubmitBlockRequest::new(submission, adjustment_data))
};

Ok(submit_block_request)
Ok(request)
}

fn flatten_marshal<Source>(
Expand Down
Loading
Loading