Add missing header to eth/v1/builder/blinded_blocks (#5407)

* add missing header

* read header in mock builder

* Merge branch 'unstable' into builder-blinded-blocks-missing-header
This commit is contained in:
Eitan Seri-Levi
2024-04-04 22:38:09 +03:00
committed by GitHub
parent ee69e14db9
commit b65daac907
2 changed files with 67 additions and 52 deletions

View File

@@ -5,7 +5,8 @@ use eth2::types::{
}; };
use eth2::types::{FullPayloadContents, SignedBlindedBeaconBlock}; use eth2::types::{FullPayloadContents, SignedBlindedBeaconBlock};
pub use eth2::Error; pub use eth2::Error;
use eth2::{ok_or_error, StatusCode}; use eth2::{ok_or_error, StatusCode, CONSENSUS_VERSION_HEADER};
use reqwest::header::{HeaderMap, HeaderValue};
use reqwest::{IntoUrl, Response}; use reqwest::{IntoUrl, Response};
use sensitive_url::SensitiveUrl; use sensitive_url::SensitiveUrl;
use serde::de::DeserializeOwned; use serde::de::DeserializeOwned;
@@ -108,13 +109,20 @@ impl BuilderHttpClient {
&self, &self,
url: U, url: U,
body: &T, body: &T,
headers: HeaderMap,
timeout: Option<Duration>, timeout: Option<Duration>,
) -> Result<Response, Error> { ) -> Result<Response, Error> {
let mut builder = self.client.post(url); let mut builder = self.client.post(url);
if let Some(timeout) = timeout { if let Some(timeout) = timeout {
builder = builder.timeout(timeout); builder = builder.timeout(timeout);
} }
let response = builder.json(body).send().await.map_err(Error::from)?;
let response = builder
.headers(headers)
.json(body)
.send()
.await
.map_err(Error::from)?;
ok_or_error(response).await ok_or_error(response).await
} }
@@ -151,10 +159,16 @@ impl BuilderHttpClient {
.push("builder") .push("builder")
.push("blinded_blocks"); .push("blinded_blocks");
let mut headers = HeaderMap::new();
if let Ok(value) = HeaderValue::from_str(&blinded_block.fork_name_unchecked().to_string()) {
headers.insert(CONSENSUS_VERSION_HEADER, value);
}
Ok(self Ok(self
.post_with_raw_response( .post_with_raw_response(
path, path,
&blinded_block, &blinded_block,
headers,
Some(self.timeouts.post_blinded_blocks), Some(self.timeouts.post_blinded_blocks),
) )
.await? .await?

View File

@@ -1,7 +1,7 @@
use crate::test_utils::{DEFAULT_BUILDER_PAYLOAD_VALUE_WEI, DEFAULT_JWT_SECRET}; use crate::test_utils::{DEFAULT_BUILDER_PAYLOAD_VALUE_WEI, DEFAULT_JWT_SECRET};
use crate::{Config, ExecutionLayer, PayloadAttributes}; use crate::{Config, ExecutionLayer, PayloadAttributes};
use eth2::types::{BlobsBundle, BlockId, StateId, ValidatorId}; use eth2::types::{BlobsBundle, BlockId, StateId, ValidatorId};
use eth2::{BeaconNodeHttpClient, Timeouts}; use eth2::{BeaconNodeHttpClient, Timeouts, CONSENSUS_VERSION_HEADER};
use fork_choice::ForkchoiceUpdateParameters; use fork_choice::ForkchoiceUpdateParameters;
use parking_lot::RwLock; use parking_lot::RwLock;
use sensitive_url::SensitiveUrl; use sensitive_url::SensitiveUrl;
@@ -321,14 +321,17 @@ pub fn serve<E: EthSpec>(
}, },
); );
let blinded_block = prefix let blinded_block =
prefix
.and(warp::path("blinded_blocks")) .and(warp::path("blinded_blocks"))
.and(warp::body::json()) .and(warp::body::json())
.and(warp::header::header::<ForkName>(CONSENSUS_VERSION_HEADER))
.and(warp::path::end()) .and(warp::path::end())
.and(ctx_filter.clone()) .and(ctx_filter.clone())
.and_then( .and_then(
|block: SignedBlindedBeaconBlock<E>, builder: MockBuilder<E>| async move { |block: SignedBlindedBeaconBlock<E>,
let slot = block.slot(); fork_name: ForkName,
builder: MockBuilder<E>| async move {
let root = match block { let root = match block {
SignedBlindedBeaconBlock::Base(_) | types::SignedBeaconBlock::Altair(_) => { SignedBlindedBeaconBlock::Base(_) | types::SignedBeaconBlock::Altair(_) => {
return Err(reject("invalid fork")); return Err(reject("invalid fork"));
@@ -346,8 +349,6 @@ pub fn serve<E: EthSpec>(
block.message.body.execution_payload.tree_hash_root() block.message.body.execution_payload.tree_hash_root()
} }
}; };
let fork_name = builder.spec.fork_name_at_slot::<E>(slot);
let payload = builder let payload = builder
.el .el
.get_payload_by_root(&root) .get_payload_by_root(&root)
@@ -365,7 +366,7 @@ pub fn serve<E: EthSpec>(
.status(200) .status(200)
.body( .body(
serde_json::to_string(&json_payload) serde_json::to_string(&json_payload)
.map_err(|_| reject("nvalid JSON"))?, .map_err(|_| reject("invalid JSON"))?,
) )
.unwrap(), .unwrap(),
) )