From 6a9b013a2660483fb4cc9daabed9d267379da913 Mon Sep 17 00:00:00 2001 From: Eitan Seri-Levi Date: Mon, 4 May 2026 13:40:12 +0300 Subject: [PATCH] Focil stuff --- beacon_node/execution_layer/src/engine_api.rs | 6 ++- .../execution_layer/src/engine_api/http.rs | 48 +++++++++++++++++-- .../src/test_utils/handle_rpc.rs | 13 ++--- .../execution_layer/src/test_utils/mod.rs | 1 + 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/beacon_node/execution_layer/src/engine_api.rs b/beacon_node/execution_layer/src/engine_api.rs index 1eb53ecd16..4c5aaba790 100644 --- a/beacon_node/execution_layer/src/engine_api.rs +++ b/beacon_node/execution_layer/src/engine_api.rs @@ -7,7 +7,7 @@ use crate::http::{ ENGINE_GET_PAYLOAD_BODIES_BY_RANGE_V1, ENGINE_GET_PAYLOAD_V1, ENGINE_GET_PAYLOAD_V2, ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_GET_PAYLOAD_V6, ENGINE_IS_INCLUSION_LIST_SATISFIED_V1, ENGINE_NEW_PAYLOAD_V1, ENGINE_NEW_PAYLOAD_V2, - ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5, + ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5, ENGINE_NEW_PAYLOAD_V6, }; use eth2::types::{ BlobsBundle, SsePayloadAttributes, SsePayloadAttributesV1, SsePayloadAttributesV2, @@ -659,6 +659,7 @@ pub struct EngineCapabilities { pub new_payload_v3: bool, pub new_payload_v4: bool, pub new_payload_v5: bool, + pub new_payload_v6: bool, pub forkchoice_updated_v1: bool, pub forkchoice_updated_v2: bool, pub forkchoice_updated_v3: bool, @@ -698,6 +699,9 @@ impl EngineCapabilities { if self.new_payload_v5 { response.push(ENGINE_NEW_PAYLOAD_V5); } + if self.new_payload_v6 { + response.push(ENGINE_NEW_PAYLOAD_V6); + } if self.forkchoice_updated_v1 { response.push(ENGINE_FORKCHOICE_UPDATED_V1); } diff --git a/beacon_node/execution_layer/src/engine_api/http.rs b/beacon_node/execution_layer/src/engine_api/http.rs index 9fa4778504..89e4ebef87 100644 --- a/beacon_node/execution_layer/src/engine_api/http.rs +++ b/beacon_node/execution_layer/src/engine_api/http.rs @@ -36,6 +36,7 @@ pub const ENGINE_NEW_PAYLOAD_V2: &str = "engine_newPayloadV2"; pub const ENGINE_NEW_PAYLOAD_V3: &str = "engine_newPayloadV3"; pub const ENGINE_NEW_PAYLOAD_V4: &str = "engine_newPayloadV4"; pub const ENGINE_NEW_PAYLOAD_V5: &str = "engine_newPayloadV5"; +pub const ENGINE_NEW_PAYLOAD_V6: &str = "engine_newPayloadV6"; pub const ENGINE_NEW_PAYLOAD_TIMEOUT: Duration = Duration::from_secs(8); pub const ENGINE_GET_PAYLOAD_V1: &str = "engine_getPayloadV1"; @@ -86,6 +87,7 @@ pub static LIGHTHOUSE_CAPABILITIES: &[&str] = &[ ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5, + ENGINE_NEW_PAYLOAD_V6, ENGINE_GET_PAYLOAD_V1, ENGINE_GET_PAYLOAD_V2, ENGINE_GET_PAYLOAD_V3, @@ -995,6 +997,45 @@ impl HttpJsonRpc { Ok(response.into()) } + pub async fn new_payload_v6_heze( + &self, + new_payload_request_heze: NewPayloadRequestHeze<'_, E>, + ) -> Result { + let il_transactions: Vec = new_payload_request_heze + .il_transactions + .iter() + .map(|tx| { + let bytes: Vec = tx.clone().into(); + format!("0x{}", hex::encode(bytes)) + }) + .collect(); + + let params = json!([ + JsonExecutionPayload::Heze( + new_payload_request_heze + .execution_payload + .clone() + .try_into()? + ), + new_payload_request_heze.versioned_hashes, + new_payload_request_heze.parent_beacon_block_root, + new_payload_request_heze + .execution_requests + .get_execution_requests_list(), + il_transactions + ]); + + let response: JsonPayloadStatusV1 = self + .rpc_request( + ENGINE_NEW_PAYLOAD_V6, + params, + ENGINE_NEW_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier, + ) + .await?; + + Ok(response.into()) + } + pub async fn get_payload_v1( &self, payload_id: PayloadId, @@ -1396,6 +1437,7 @@ impl HttpJsonRpc { new_payload_v3: capabilities.contains(ENGINE_NEW_PAYLOAD_V3), new_payload_v4: capabilities.contains(ENGINE_NEW_PAYLOAD_V4), new_payload_v5: capabilities.contains(ENGINE_NEW_PAYLOAD_V5), + new_payload_v6: capabilities.contains(ENGINE_NEW_PAYLOAD_V6), forkchoice_updated_v1: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V1), forkchoice_updated_v2: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V2), forkchoice_updated_v3: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V3), @@ -1565,10 +1607,10 @@ impl HttpJsonRpc { } } NewPayloadRequest::Heze(new_payload_request_heze) => { - if engine_capabilities.new_payload_v5 { - self.new_payload_v5_heze(new_payload_request_heze).await + if engine_capabilities.new_payload_v6 { + self.new_payload_v6_heze(new_payload_request_heze).await } else { - Err(Error::RequiredMethodUnsupported("engine_newPayloadV5")) + Err(Error::RequiredMethodUnsupported("engine_newPayloadV6")) } } } diff --git a/beacon_node/execution_layer/src/test_utils/handle_rpc.rs b/beacon_node/execution_layer/src/test_utils/handle_rpc.rs index 5310f051e2..94cf6afed1 100644 --- a/beacon_node/execution_layer/src/test_utils/handle_rpc.rs +++ b/beacon_node/execution_layer/src/test_utils/handle_rpc.rs @@ -104,7 +104,8 @@ pub async fn handle_rpc( | ENGINE_NEW_PAYLOAD_V2 | ENGINE_NEW_PAYLOAD_V3 | ENGINE_NEW_PAYLOAD_V4 - | ENGINE_NEW_PAYLOAD_V5 => { + | ENGINE_NEW_PAYLOAD_V5 + | ENGINE_NEW_PAYLOAD_V6 => { let request = match method { ENGINE_NEW_PAYLOAD_V1 => JsonExecutionPayload::Bellatrix( get_param::>(params, 0) @@ -128,13 +129,13 @@ pub async fn handle_rpc( }) .map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?, ENGINE_NEW_PAYLOAD_V5 => { - // Try Heze first, fall back to Gloas + get_param::>(params, 0) + .map(|jep| JsonExecutionPayload::Gloas(jep)) + .map_err(|s| (s, BAD_PARAMS_ERROR_CODE))? + } + ENGINE_NEW_PAYLOAD_V6 => { get_param::>(params, 0) .map(|jep| JsonExecutionPayload::Heze(jep)) - .or_else(|_| { - get_param::>(params, 0) - .map(|jep| JsonExecutionPayload::Gloas(jep)) - }) .map_err(|s| (s, BAD_PARAMS_ERROR_CODE))? } _ => unreachable!(), diff --git a/beacon_node/execution_layer/src/test_utils/mod.rs b/beacon_node/execution_layer/src/test_utils/mod.rs index e9a841473e..56d4a8d23b 100644 --- a/beacon_node/execution_layer/src/test_utils/mod.rs +++ b/beacon_node/execution_layer/src/test_utils/mod.rs @@ -44,6 +44,7 @@ pub const DEFAULT_ENGINE_CAPABILITIES: EngineCapabilities = EngineCapabilities { new_payload_v3: true, new_payload_v4: true, new_payload_v5: true, + new_payload_v6: true, forkchoice_updated_v1: true, forkchoice_updated_v2: true, forkchoice_updated_v3: true,