Skip to content

Commit cc95fb2

Browse files
authored
Merge of #5407
2 parents f4cdcea + 46d6b32 commit cc95fb2

File tree

2 files changed

+68
-53
lines changed

2 files changed

+68
-53
lines changed

beacon_node/builder_client/src/lib.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use eth2::types::{
55
};
66
use eth2::types::{FullPayloadContents, SignedBlindedBeaconBlock};
77
pub use eth2::Error;
8-
use eth2::{ok_or_error, StatusCode};
8+
use eth2::{ok_or_error, StatusCode, CONSENSUS_VERSION_HEADER};
9+
use reqwest::header::{HeaderMap, HeaderValue};
910
use reqwest::{IntoUrl, Response};
1011
use sensitive_url::SensitiveUrl;
1112
use serde::de::DeserializeOwned;
@@ -108,13 +109,20 @@ impl BuilderHttpClient {
108109
&self,
109110
url: U,
110111
body: &T,
112+
headers: HeaderMap,
111113
timeout: Option<Duration>,
112114
) -> Result<Response, Error> {
113115
let mut builder = self.client.post(url);
114116
if let Some(timeout) = timeout {
115117
builder = builder.timeout(timeout);
116118
}
117-
let response = builder.json(body).send().await.map_err(Error::from)?;
119+
120+
let response = builder
121+
.headers(headers)
122+
.json(body)
123+
.send()
124+
.await
125+
.map_err(Error::from)?;
118126
ok_or_error(response).await
119127
}
120128

@@ -151,10 +159,16 @@ impl BuilderHttpClient {
151159
.push("builder")
152160
.push("blinded_blocks");
153161

162+
let mut headers = HeaderMap::new();
163+
if let Ok(value) = HeaderValue::from_str(&blinded_block.fork_name_unchecked().to_string()) {
164+
headers.insert(CONSENSUS_VERSION_HEADER, value);
165+
}
166+
154167
Ok(self
155168
.post_with_raw_response(
156169
path,
157170
&blinded_block,
171+
headers,
158172
Some(self.timeouts.post_blinded_blocks),
159173
)
160174
.await?

beacon_node/execution_layer/src/test_utils/mock_builder.rs

Lines changed: 52 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::test_utils::{DEFAULT_BUILDER_PAYLOAD_VALUE_WEI, DEFAULT_JWT_SECRET};
22
use crate::{Config, ExecutionLayer, PayloadAttributes};
33
use eth2::types::{BlobsBundle, BlockId, StateId, ValidatorId};
4-
use eth2::{BeaconNodeHttpClient, Timeouts};
4+
use eth2::{BeaconNodeHttpClient, Timeouts, CONSENSUS_VERSION_HEADER};
55
use fork_choice::ForkchoiceUpdateParameters;
66
use parking_lot::RwLock;
77
use sensitive_url::SensitiveUrl;
@@ -321,56 +321,57 @@ pub fn serve<E: EthSpec>(
321321
},
322322
);
323323

324-
let blinded_block = prefix
325-
.and(warp::path("blinded_blocks"))
326-
.and(warp::body::json())
327-
.and(warp::path::end())
328-
.and(ctx_filter.clone())
329-
.and_then(
330-
|block: SignedBlindedBeaconBlock<E>, builder: MockBuilder<E>| async move {
331-
let slot = block.slot();
332-
let root = match block {
333-
SignedBlindedBeaconBlock::Base(_) | types::SignedBeaconBlock::Altair(_) => {
334-
return Err(reject("invalid fork"));
335-
}
336-
SignedBlindedBeaconBlock::Merge(block) => {
337-
block.message.body.execution_payload.tree_hash_root()
338-
}
339-
SignedBlindedBeaconBlock::Capella(block) => {
340-
block.message.body.execution_payload.tree_hash_root()
341-
}
342-
SignedBlindedBeaconBlock::Deneb(block) => {
343-
block.message.body.execution_payload.tree_hash_root()
344-
}
345-
SignedBlindedBeaconBlock::Electra(block) => {
346-
block.message.body.execution_payload.tree_hash_root()
347-
}
348-
};
349-
350-
let fork_name = builder.spec.fork_name_at_slot::<E>(slot);
351-
let payload = builder
352-
.el
353-
.get_payload_by_root(&root)
354-
.ok_or_else(|| reject("missing payload for tx root"))?;
355-
let resp: ForkVersionedResponse<_> = ForkVersionedResponse {
356-
version: Some(fork_name),
357-
metadata: Default::default(),
358-
data: payload,
359-
};
360-
361-
let json_payload = serde_json::to_string(&resp)
362-
.map_err(|_| reject("coudn't serialize response"))?;
363-
Ok::<_, warp::reject::Rejection>(
364-
warp::http::Response::builder()
365-
.status(200)
366-
.body(
367-
serde_json::to_string(&json_payload)
368-
.map_err(|_| reject("nvalid JSON"))?,
369-
)
370-
.unwrap(),
371-
)
372-
},
373-
);
324+
let blinded_block =
325+
prefix
326+
.and(warp::path("blinded_blocks"))
327+
.and(warp::body::json())
328+
.and(warp::header::header::<ForkName>(CONSENSUS_VERSION_HEADER))
329+
.and(warp::path::end())
330+
.and(ctx_filter.clone())
331+
.and_then(
332+
|block: SignedBlindedBeaconBlock<E>,
333+
fork_name: ForkName,
334+
builder: MockBuilder<E>| async move {
335+
let root = match block {
336+
SignedBlindedBeaconBlock::Base(_) | types::SignedBeaconBlock::Altair(_) => {
337+
return Err(reject("invalid fork"));
338+
}
339+
SignedBlindedBeaconBlock::Merge(block) => {
340+
block.message.body.execution_payload.tree_hash_root()
341+
}
342+
SignedBlindedBeaconBlock::Capella(block) => {
343+
block.message.body.execution_payload.tree_hash_root()
344+
}
345+
SignedBlindedBeaconBlock::Deneb(block) => {
346+
block.message.body.execution_payload.tree_hash_root()
347+
}
348+
SignedBlindedBeaconBlock::Electra(block) => {
349+
block.message.body.execution_payload.tree_hash_root()
350+
}
351+
};
352+
let payload = builder
353+
.el
354+
.get_payload_by_root(&root)
355+
.ok_or_else(|| reject("missing payload for tx root"))?;
356+
let resp: ForkVersionedResponse<_> = ForkVersionedResponse {
357+
version: Some(fork_name),
358+
metadata: Default::default(),
359+
data: payload,
360+
};
361+
362+
let json_payload = serde_json::to_string(&resp)
363+
.map_err(|_| reject("coudn't serialize response"))?;
364+
Ok::<_, warp::reject::Rejection>(
365+
warp::http::Response::builder()
366+
.status(200)
367+
.body(
368+
serde_json::to_string(&json_payload)
369+
.map_err(|_| reject("invalid JSON"))?,
370+
)
371+
.unwrap(),
372+
)
373+
},
374+
);
374375

375376
let status = prefix
376377
.and(warp::path("status"))

0 commit comments

Comments
 (0)