mirror of
https://github.com/sigp/lighthouse.git
synced 2026-07-05 05:44:30 +00:00
Gloas engine api updates (#9150)
Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>
This commit is contained in:
@@ -7,8 +7,8 @@ use execution_layer::{
|
|||||||
EngineCapabilities,
|
EngineCapabilities,
|
||||||
http::{
|
http::{
|
||||||
ENGINE_FORKCHOICE_UPDATED_V2, ENGINE_FORKCHOICE_UPDATED_V3, ENGINE_GET_PAYLOAD_V2,
|
ENGINE_FORKCHOICE_UPDATED_V2, ENGINE_FORKCHOICE_UPDATED_V3, ENGINE_GET_PAYLOAD_V2,
|
||||||
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_NEW_PAYLOAD_V2,
|
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_GET_PAYLOAD_V6,
|
||||||
ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4,
|
ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use lighthouse_network::{NetworkGlobals, types::SyncState};
|
use lighthouse_network::{NetworkGlobals, types::SyncState};
|
||||||
@@ -555,11 +555,11 @@ fn methods_required_for_fork(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ForkName::Gloas => {
|
ForkName::Gloas => {
|
||||||
if !capabilities.get_payload_v5 {
|
if !capabilities.get_payload_v6 {
|
||||||
missing_methods.push(ENGINE_GET_PAYLOAD_V5);
|
missing_methods.push(ENGINE_GET_PAYLOAD_V6);
|
||||||
}
|
}
|
||||||
if !capabilities.new_payload_v4 {
|
if !capabilities.new_payload_v5 {
|
||||||
missing_methods.push(ENGINE_NEW_PAYLOAD_V4);
|
missing_methods.push(ENGINE_NEW_PAYLOAD_V5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ use crate::http::{
|
|||||||
ENGINE_FORKCHOICE_UPDATED_V4, ENGINE_GET_BLOBS_V1, ENGINE_GET_BLOBS_V2,
|
ENGINE_FORKCHOICE_UPDATED_V4, ENGINE_GET_BLOBS_V1, ENGINE_GET_BLOBS_V2,
|
||||||
ENGINE_GET_CLIENT_VERSION_V1, ENGINE_GET_PAYLOAD_BODIES_BY_HASH_V1,
|
ENGINE_GET_CLIENT_VERSION_V1, ENGINE_GET_PAYLOAD_BODIES_BY_HASH_V1,
|
||||||
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_NEW_PAYLOAD_V1,
|
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_GET_PAYLOAD_V6,
|
||||||
ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5,
|
ENGINE_NEW_PAYLOAD_V1, ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4,
|
||||||
|
ENGINE_NEW_PAYLOAD_V5,
|
||||||
};
|
};
|
||||||
use eth2::types::{
|
use eth2::types::{
|
||||||
BlobsBundle, SsePayloadAttributes, SsePayloadAttributesV1, SsePayloadAttributesV2,
|
BlobsBundle, SsePayloadAttributes, SsePayloadAttributesV1, SsePayloadAttributesV2,
|
||||||
@@ -591,6 +592,7 @@ pub struct EngineCapabilities {
|
|||||||
pub get_payload_v3: bool,
|
pub get_payload_v3: bool,
|
||||||
pub get_payload_v4: bool,
|
pub get_payload_v4: bool,
|
||||||
pub get_payload_v5: bool,
|
pub get_payload_v5: bool,
|
||||||
|
pub get_payload_v6: bool,
|
||||||
pub get_client_version_v1: bool,
|
pub get_client_version_v1: bool,
|
||||||
pub get_blobs_v1: bool,
|
pub get_blobs_v1: bool,
|
||||||
pub get_blobs_v2: bool,
|
pub get_blobs_v2: bool,
|
||||||
@@ -647,6 +649,9 @@ impl EngineCapabilities {
|
|||||||
if self.get_payload_v5 {
|
if self.get_payload_v5 {
|
||||||
response.push(ENGINE_GET_PAYLOAD_V5);
|
response.push(ENGINE_GET_PAYLOAD_V5);
|
||||||
}
|
}
|
||||||
|
if self.get_payload_v6 {
|
||||||
|
response.push(ENGINE_GET_PAYLOAD_V6);
|
||||||
|
}
|
||||||
if self.get_client_version_v1 {
|
if self.get_client_version_v1 {
|
||||||
response.push(ENGINE_GET_CLIENT_VERSION_V1);
|
response.push(ENGINE_GET_CLIENT_VERSION_V1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ pub const ENGINE_GET_PAYLOAD_V2: &str = "engine_getPayloadV2";
|
|||||||
pub const ENGINE_GET_PAYLOAD_V3: &str = "engine_getPayloadV3";
|
pub const ENGINE_GET_PAYLOAD_V3: &str = "engine_getPayloadV3";
|
||||||
pub const ENGINE_GET_PAYLOAD_V4: &str = "engine_getPayloadV4";
|
pub const ENGINE_GET_PAYLOAD_V4: &str = "engine_getPayloadV4";
|
||||||
pub const ENGINE_GET_PAYLOAD_V5: &str = "engine_getPayloadV5";
|
pub const ENGINE_GET_PAYLOAD_V5: &str = "engine_getPayloadV5";
|
||||||
|
pub const ENGINE_GET_PAYLOAD_V6: &str = "engine_getPayloadV6";
|
||||||
pub const ENGINE_GET_PAYLOAD_TIMEOUT: Duration = Duration::from_secs(2);
|
pub const ENGINE_GET_PAYLOAD_TIMEOUT: Duration = Duration::from_secs(2);
|
||||||
|
|
||||||
pub const ENGINE_FORKCHOICE_UPDATED_V1: &str = "engine_forkchoiceUpdatedV1";
|
pub const ENGINE_FORKCHOICE_UPDATED_V1: &str = "engine_forkchoiceUpdatedV1";
|
||||||
@@ -82,6 +83,7 @@ pub static LIGHTHOUSE_CAPABILITIES: &[&str] = &[
|
|||||||
ENGINE_GET_PAYLOAD_V3,
|
ENGINE_GET_PAYLOAD_V3,
|
||||||
ENGINE_GET_PAYLOAD_V4,
|
ENGINE_GET_PAYLOAD_V4,
|
||||||
ENGINE_GET_PAYLOAD_V5,
|
ENGINE_GET_PAYLOAD_V5,
|
||||||
|
ENGINE_GET_PAYLOAD_V6,
|
||||||
ENGINE_FORKCHOICE_UPDATED_V1,
|
ENGINE_FORKCHOICE_UPDATED_V1,
|
||||||
ENGINE_FORKCHOICE_UPDATED_V2,
|
ENGINE_FORKCHOICE_UPDATED_V2,
|
||||||
ENGINE_FORKCHOICE_UPDATED_V3,
|
ENGINE_FORKCHOICE_UPDATED_V3,
|
||||||
@@ -1052,10 +1054,25 @@ impl HttpJsonRpc {
|
|||||||
.try_into()
|
.try_into()
|
||||||
.map_err(Error::BadResponse)
|
.map_err(Error::BadResponse)
|
||||||
}
|
}
|
||||||
|
_ => Err(Error::UnsupportedForkVariant(format!(
|
||||||
|
"called get_payload_v5 with {}",
|
||||||
|
fork_name
|
||||||
|
))),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get_payload_v6<E: EthSpec>(
|
||||||
|
&self,
|
||||||
|
fork_name: ForkName,
|
||||||
|
payload_id: PayloadId,
|
||||||
|
) -> Result<GetPayloadResponse<E>, Error> {
|
||||||
|
let params = json!([JsonPayloadIdRequest::from(payload_id)]);
|
||||||
|
|
||||||
|
match fork_name {
|
||||||
ForkName::Gloas => {
|
ForkName::Gloas => {
|
||||||
let response: JsonGetPayloadResponseGloas<E> = self
|
let response: JsonGetPayloadResponseGloas<E> = self
|
||||||
.rpc_request(
|
.rpc_request(
|
||||||
ENGINE_GET_PAYLOAD_V5,
|
ENGINE_GET_PAYLOAD_V6,
|
||||||
params,
|
params,
|
||||||
ENGINE_GET_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier,
|
ENGINE_GET_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier,
|
||||||
)
|
)
|
||||||
@@ -1065,7 +1082,7 @@ impl HttpJsonRpc {
|
|||||||
.map_err(Error::BadResponse)
|
.map_err(Error::BadResponse)
|
||||||
}
|
}
|
||||||
_ => Err(Error::UnsupportedForkVariant(format!(
|
_ => Err(Error::UnsupportedForkVariant(format!(
|
||||||
"called get_payload_v5 with {}",
|
"called get_payload_v6 with {}",
|
||||||
fork_name
|
fork_name
|
||||||
))),
|
))),
|
||||||
}
|
}
|
||||||
@@ -1237,6 +1254,7 @@ impl HttpJsonRpc {
|
|||||||
get_payload_v3: capabilities.contains(ENGINE_GET_PAYLOAD_V3),
|
get_payload_v3: capabilities.contains(ENGINE_GET_PAYLOAD_V3),
|
||||||
get_payload_v4: capabilities.contains(ENGINE_GET_PAYLOAD_V4),
|
get_payload_v4: capabilities.contains(ENGINE_GET_PAYLOAD_V4),
|
||||||
get_payload_v5: capabilities.contains(ENGINE_GET_PAYLOAD_V5),
|
get_payload_v5: capabilities.contains(ENGINE_GET_PAYLOAD_V5),
|
||||||
|
get_payload_v6: capabilities.contains(ENGINE_GET_PAYLOAD_V6),
|
||||||
get_client_version_v1: capabilities.contains(ENGINE_GET_CLIENT_VERSION_V1),
|
get_client_version_v1: capabilities.contains(ENGINE_GET_CLIENT_VERSION_V1),
|
||||||
get_blobs_v1: capabilities.contains(ENGINE_GET_BLOBS_V1),
|
get_blobs_v1: capabilities.contains(ENGINE_GET_BLOBS_V1),
|
||||||
get_blobs_v2: capabilities.contains(ENGINE_GET_BLOBS_V2),
|
get_blobs_v2: capabilities.contains(ENGINE_GET_BLOBS_V2),
|
||||||
@@ -1429,10 +1447,10 @@ impl HttpJsonRpc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ForkName::Gloas => {
|
ForkName::Gloas => {
|
||||||
if engine_capabilities.get_payload_v5 {
|
if engine_capabilities.get_payload_v6 {
|
||||||
self.get_payload_v5(fork_name, payload_id).await
|
self.get_payload_v6(fork_name, payload_id).await
|
||||||
} else {
|
} else {
|
||||||
Err(Error::RequiredMethodUnsupported("engine_getPayloadv5"))
|
Err(Error::RequiredMethodUnsupported("engine_getPayloadV6"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ForkName::Base | ForkName::Altair => Err(Error::UnsupportedForkVariant(format!(
|
ForkName::Base | ForkName::Altair => Err(Error::UnsupportedForkVariant(format!(
|
||||||
|
|||||||
@@ -277,7 +277,8 @@ pub async fn handle_rpc<E: EthSpec>(
|
|||||||
| ENGINE_GET_PAYLOAD_V2
|
| ENGINE_GET_PAYLOAD_V2
|
||||||
| ENGINE_GET_PAYLOAD_V3
|
| ENGINE_GET_PAYLOAD_V3
|
||||||
| ENGINE_GET_PAYLOAD_V4
|
| ENGINE_GET_PAYLOAD_V4
|
||||||
| ENGINE_GET_PAYLOAD_V5 => {
|
| ENGINE_GET_PAYLOAD_V5
|
||||||
|
| ENGINE_GET_PAYLOAD_V6 => {
|
||||||
let request: JsonPayloadIdRequest =
|
let request: JsonPayloadIdRequest =
|
||||||
get_param(params, 0).map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?;
|
get_param(params, 0).map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?;
|
||||||
let id = request.into();
|
let id = request.into();
|
||||||
@@ -363,7 +364,8 @@ pub async fn handle_rpc<E: EthSpec>(
|
|||||||
&& (method == ENGINE_GET_PAYLOAD_V1
|
&& (method == ENGINE_GET_PAYLOAD_V1
|
||||||
|| method == ENGINE_GET_PAYLOAD_V2
|
|| method == ENGINE_GET_PAYLOAD_V2
|
||||||
|| method == ENGINE_GET_PAYLOAD_V3
|
|| method == ENGINE_GET_PAYLOAD_V3
|
||||||
|| method == ENGINE_GET_PAYLOAD_V4)
|
|| method == ENGINE_GET_PAYLOAD_V4
|
||||||
|
|| method == ENGINE_GET_PAYLOAD_V5)
|
||||||
{
|
{
|
||||||
return Err((
|
return Err((
|
||||||
format!("{} called after Gloas fork!", method),
|
format!("{} called after Gloas fork!", method),
|
||||||
@@ -455,13 +457,18 @@ pub async fn handle_rpc<E: EthSpec>(
|
|||||||
})
|
})
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
ENGINE_GET_PAYLOAD_V6 => {
|
||||||
|
Ok(match JsonExecutionPayload::try_from(response).unwrap() {
|
||||||
JsonExecutionPayload::Gloas(execution_payload) => {
|
JsonExecutionPayload::Gloas(execution_payload) => {
|
||||||
serde_json::to_value(JsonGetPayloadResponseGloas {
|
serde_json::to_value(JsonGetPayloadResponseGloas {
|
||||||
execution_payload,
|
execution_payload,
|
||||||
block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI),
|
block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI),
|
||||||
blobs_bundle: maybe_blobs
|
blobs_bundle: maybe_blobs
|
||||||
.ok_or((
|
.ok_or((
|
||||||
"No blobs returned despite V5 Payload".to_string(),
|
"No blobs returned despite V6 Payload".to_string(),
|
||||||
GENERIC_ERROR_CODE,
|
GENERIC_ERROR_CODE,
|
||||||
))?
|
))?
|
||||||
.into(),
|
.into(),
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ pub const DEFAULT_ENGINE_CAPABILITIES: EngineCapabilities = EngineCapabilities {
|
|||||||
get_payload_v3: true,
|
get_payload_v3: true,
|
||||||
get_payload_v4: true,
|
get_payload_v4: true,
|
||||||
get_payload_v5: true,
|
get_payload_v5: true,
|
||||||
|
get_payload_v6: true,
|
||||||
get_client_version_v1: true,
|
get_client_version_v1: true,
|
||||||
get_blobs_v1: true,
|
get_blobs_v1: true,
|
||||||
get_blobs_v2: true,
|
get_blobs_v2: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user