Focil stuff

This commit is contained in:
Eitan Seri-Levi
2026-05-04 13:40:12 +03:00
parent 4caa4a1c55
commit 6a9b013a26
4 changed files with 58 additions and 10 deletions

View File

@@ -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_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_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_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::{ use eth2::types::{
BlobsBundle, SsePayloadAttributes, SsePayloadAttributesV1, SsePayloadAttributesV2, BlobsBundle, SsePayloadAttributes, SsePayloadAttributesV1, SsePayloadAttributesV2,
@@ -659,6 +659,7 @@ pub struct EngineCapabilities {
pub new_payload_v3: bool, pub new_payload_v3: bool,
pub new_payload_v4: bool, pub new_payload_v4: bool,
pub new_payload_v5: bool, pub new_payload_v5: bool,
pub new_payload_v6: bool,
pub forkchoice_updated_v1: bool, pub forkchoice_updated_v1: bool,
pub forkchoice_updated_v2: bool, pub forkchoice_updated_v2: bool,
pub forkchoice_updated_v3: bool, pub forkchoice_updated_v3: bool,
@@ -698,6 +699,9 @@ impl EngineCapabilities {
if self.new_payload_v5 { if self.new_payload_v5 {
response.push(ENGINE_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 { if self.forkchoice_updated_v1 {
response.push(ENGINE_FORKCHOICE_UPDATED_V1); response.push(ENGINE_FORKCHOICE_UPDATED_V1);
} }

View File

@@ -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_V3: &str = "engine_newPayloadV3";
pub const ENGINE_NEW_PAYLOAD_V4: &str = "engine_newPayloadV4"; pub const ENGINE_NEW_PAYLOAD_V4: &str = "engine_newPayloadV4";
pub const ENGINE_NEW_PAYLOAD_V5: &str = "engine_newPayloadV5"; 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_NEW_PAYLOAD_TIMEOUT: Duration = Duration::from_secs(8);
pub const ENGINE_GET_PAYLOAD_V1: &str = "engine_getPayloadV1"; 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_V3,
ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V4,
ENGINE_NEW_PAYLOAD_V5, ENGINE_NEW_PAYLOAD_V5,
ENGINE_NEW_PAYLOAD_V6,
ENGINE_GET_PAYLOAD_V1, ENGINE_GET_PAYLOAD_V1,
ENGINE_GET_PAYLOAD_V2, ENGINE_GET_PAYLOAD_V2,
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V3,
@@ -995,6 +997,45 @@ impl HttpJsonRpc {
Ok(response.into()) Ok(response.into())
} }
pub async fn new_payload_v6_heze<E: EthSpec>(
&self,
new_payload_request_heze: NewPayloadRequestHeze<'_, E>,
) -> Result<PayloadStatusV1, Error> {
let il_transactions: Vec<String> = new_payload_request_heze
.il_transactions
.iter()
.map(|tx| {
let bytes: Vec<u8> = 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<E: EthSpec>( pub async fn get_payload_v1<E: EthSpec>(
&self, &self,
payload_id: PayloadId, payload_id: PayloadId,
@@ -1396,6 +1437,7 @@ impl HttpJsonRpc {
new_payload_v3: capabilities.contains(ENGINE_NEW_PAYLOAD_V3), new_payload_v3: capabilities.contains(ENGINE_NEW_PAYLOAD_V3),
new_payload_v4: capabilities.contains(ENGINE_NEW_PAYLOAD_V4), new_payload_v4: capabilities.contains(ENGINE_NEW_PAYLOAD_V4),
new_payload_v5: capabilities.contains(ENGINE_NEW_PAYLOAD_V5), 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_v1: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V1),
forkchoice_updated_v2: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V2), forkchoice_updated_v2: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V2),
forkchoice_updated_v3: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V3), forkchoice_updated_v3: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V3),
@@ -1565,10 +1607,10 @@ impl HttpJsonRpc {
} }
} }
NewPayloadRequest::Heze(new_payload_request_heze) => { NewPayloadRequest::Heze(new_payload_request_heze) => {
if engine_capabilities.new_payload_v5 { if engine_capabilities.new_payload_v6 {
self.new_payload_v5_heze(new_payload_request_heze).await self.new_payload_v6_heze(new_payload_request_heze).await
} else { } else {
Err(Error::RequiredMethodUnsupported("engine_newPayloadV5")) Err(Error::RequiredMethodUnsupported("engine_newPayloadV6"))
} }
} }
} }

View File

@@ -104,7 +104,8 @@ pub async fn handle_rpc<E: EthSpec>(
| ENGINE_NEW_PAYLOAD_V2 | ENGINE_NEW_PAYLOAD_V2
| ENGINE_NEW_PAYLOAD_V3 | ENGINE_NEW_PAYLOAD_V3
| ENGINE_NEW_PAYLOAD_V4 | ENGINE_NEW_PAYLOAD_V4
| ENGINE_NEW_PAYLOAD_V5 => { | ENGINE_NEW_PAYLOAD_V5
| ENGINE_NEW_PAYLOAD_V6 => {
let request = match method { let request = match method {
ENGINE_NEW_PAYLOAD_V1 => JsonExecutionPayload::Bellatrix( ENGINE_NEW_PAYLOAD_V1 => JsonExecutionPayload::Bellatrix(
get_param::<JsonExecutionPayloadBellatrix<E>>(params, 0) get_param::<JsonExecutionPayloadBellatrix<E>>(params, 0)
@@ -128,13 +129,13 @@ pub async fn handle_rpc<E: EthSpec>(
}) })
.map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?, .map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?,
ENGINE_NEW_PAYLOAD_V5 => { ENGINE_NEW_PAYLOAD_V5 => {
// Try Heze first, fall back to Gloas get_param::<JsonExecutionPayloadGloas<E>>(params, 0)
.map(|jep| JsonExecutionPayload::Gloas(jep))
.map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?
}
ENGINE_NEW_PAYLOAD_V6 => {
get_param::<JsonExecutionPayloadHeze<E>>(params, 0) get_param::<JsonExecutionPayloadHeze<E>>(params, 0)
.map(|jep| JsonExecutionPayload::Heze(jep)) .map(|jep| JsonExecutionPayload::Heze(jep))
.or_else(|_| {
get_param::<JsonExecutionPayloadGloas<E>>(params, 0)
.map(|jep| JsonExecutionPayload::Gloas(jep))
})
.map_err(|s| (s, BAD_PARAMS_ERROR_CODE))? .map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?
} }
_ => unreachable!(), _ => unreachable!(),

View File

@@ -44,6 +44,7 @@ pub const DEFAULT_ENGINE_CAPABILITIES: EngineCapabilities = EngineCapabilities {
new_payload_v3: true, new_payload_v3: true,
new_payload_v4: true, new_payload_v4: true,
new_payload_v5: true, new_payload_v5: true,
new_payload_v6: true,
forkchoice_updated_v1: true, forkchoice_updated_v1: true,
forkchoice_updated_v2: true, forkchoice_updated_v2: true,
forkchoice_updated_v3: true, forkchoice_updated_v3: true,