Skip to content

Commit 7731b5f

Browse files
authored
Gloas engine api updates (sigp#9150)
Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>
1 parent 02c2841 commit 7731b5f

5 files changed

Lines changed: 47 additions & 16 deletions

File tree

beacon_node/client/src/notifier.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ use execution_layer::{
77
EngineCapabilities,
88
http::{
99
ENGINE_FORKCHOICE_UPDATED_V2, ENGINE_FORKCHOICE_UPDATED_V3, ENGINE_GET_PAYLOAD_V2,
10-
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_NEW_PAYLOAD_V2,
11-
ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4,
10+
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_GET_PAYLOAD_V6,
11+
ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5,
1212
},
1313
};
1414
use lighthouse_network::{NetworkGlobals, types::SyncState};
@@ -555,11 +555,11 @@ fn methods_required_for_fork(
555555
}
556556
}
557557
ForkName::Gloas => {
558-
if !capabilities.get_payload_v5 {
559-
missing_methods.push(ENGINE_GET_PAYLOAD_V5);
558+
if !capabilities.get_payload_v6 {
559+
missing_methods.push(ENGINE_GET_PAYLOAD_V6);
560560
}
561-
if !capabilities.new_payload_v4 {
562-
missing_methods.push(ENGINE_NEW_PAYLOAD_V4);
561+
if !capabilities.new_payload_v5 {
562+
missing_methods.push(ENGINE_NEW_PAYLOAD_V5);
563563
}
564564
}
565565
}

beacon_node/execution_layer/src/engine_api.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use crate::http::{
44
ENGINE_FORKCHOICE_UPDATED_V4, ENGINE_GET_BLOBS_V1, ENGINE_GET_BLOBS_V2,
55
ENGINE_GET_CLIENT_VERSION_V1, ENGINE_GET_PAYLOAD_BODIES_BY_HASH_V1,
66
ENGINE_GET_PAYLOAD_BODIES_BY_RANGE_V1, ENGINE_GET_PAYLOAD_V1, ENGINE_GET_PAYLOAD_V2,
7-
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_NEW_PAYLOAD_V1,
8-
ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5,
7+
ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, ENGINE_GET_PAYLOAD_V5, ENGINE_GET_PAYLOAD_V6,
8+
ENGINE_NEW_PAYLOAD_V1, ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4,
9+
ENGINE_NEW_PAYLOAD_V5,
910
};
1011
use eth2::types::{
1112
BlobsBundle, SsePayloadAttributes, SsePayloadAttributesV1, SsePayloadAttributesV2,
@@ -591,6 +592,7 @@ pub struct EngineCapabilities {
591592
pub get_payload_v3: bool,
592593
pub get_payload_v4: bool,
593594
pub get_payload_v5: bool,
595+
pub get_payload_v6: bool,
594596
pub get_client_version_v1: bool,
595597
pub get_blobs_v1: bool,
596598
pub get_blobs_v2: bool,
@@ -647,6 +649,9 @@ impl EngineCapabilities {
647649
if self.get_payload_v5 {
648650
response.push(ENGINE_GET_PAYLOAD_V5);
649651
}
652+
if self.get_payload_v6 {
653+
response.push(ENGINE_GET_PAYLOAD_V6);
654+
}
650655
if self.get_client_version_v1 {
651656
response.push(ENGINE_GET_CLIENT_VERSION_V1);
652657
}

beacon_node/execution_layer/src/engine_api/http.rs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ pub const ENGINE_GET_PAYLOAD_V2: &str = "engine_getPayloadV2";
4343
pub const ENGINE_GET_PAYLOAD_V3: &str = "engine_getPayloadV3";
4444
pub const ENGINE_GET_PAYLOAD_V4: &str = "engine_getPayloadV4";
4545
pub const ENGINE_GET_PAYLOAD_V5: &str = "engine_getPayloadV5";
46+
pub const ENGINE_GET_PAYLOAD_V6: &str = "engine_getPayloadV6";
4647
pub const ENGINE_GET_PAYLOAD_TIMEOUT: Duration = Duration::from_secs(2);
4748

4849
pub const ENGINE_FORKCHOICE_UPDATED_V1: &str = "engine_forkchoiceUpdatedV1";
@@ -82,6 +83,7 @@ pub static LIGHTHOUSE_CAPABILITIES: &[&str] = &[
8283
ENGINE_GET_PAYLOAD_V3,
8384
ENGINE_GET_PAYLOAD_V4,
8485
ENGINE_GET_PAYLOAD_V5,
86+
ENGINE_GET_PAYLOAD_V6,
8587
ENGINE_FORKCHOICE_UPDATED_V1,
8688
ENGINE_FORKCHOICE_UPDATED_V2,
8789
ENGINE_FORKCHOICE_UPDATED_V3,
@@ -1052,10 +1054,25 @@ impl HttpJsonRpc {
10521054
.try_into()
10531055
.map_err(Error::BadResponse)
10541056
}
1057+
_ => Err(Error::UnsupportedForkVariant(format!(
1058+
"called get_payload_v5 with {}",
1059+
fork_name
1060+
))),
1061+
}
1062+
}
1063+
1064+
pub async fn get_payload_v6<E: EthSpec>(
1065+
&self,
1066+
fork_name: ForkName,
1067+
payload_id: PayloadId,
1068+
) -> Result<GetPayloadResponse<E>, Error> {
1069+
let params = json!([JsonPayloadIdRequest::from(payload_id)]);
1070+
1071+
match fork_name {
10551072
ForkName::Gloas => {
10561073
let response: JsonGetPayloadResponseGloas<E> = self
10571074
.rpc_request(
1058-
ENGINE_GET_PAYLOAD_V5,
1075+
ENGINE_GET_PAYLOAD_V6,
10591076
params,
10601077
ENGINE_GET_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier,
10611078
)
@@ -1065,7 +1082,7 @@ impl HttpJsonRpc {
10651082
.map_err(Error::BadResponse)
10661083
}
10671084
_ => Err(Error::UnsupportedForkVariant(format!(
1068-
"called get_payload_v5 with {}",
1085+
"called get_payload_v6 with {}",
10691086
fork_name
10701087
))),
10711088
}
@@ -1237,6 +1254,7 @@ impl HttpJsonRpc {
12371254
get_payload_v3: capabilities.contains(ENGINE_GET_PAYLOAD_V3),
12381255
get_payload_v4: capabilities.contains(ENGINE_GET_PAYLOAD_V4),
12391256
get_payload_v5: capabilities.contains(ENGINE_GET_PAYLOAD_V5),
1257+
get_payload_v6: capabilities.contains(ENGINE_GET_PAYLOAD_V6),
12401258
get_client_version_v1: capabilities.contains(ENGINE_GET_CLIENT_VERSION_V1),
12411259
get_blobs_v1: capabilities.contains(ENGINE_GET_BLOBS_V1),
12421260
get_blobs_v2: capabilities.contains(ENGINE_GET_BLOBS_V2),
@@ -1429,10 +1447,10 @@ impl HttpJsonRpc {
14291447
}
14301448
}
14311449
ForkName::Gloas => {
1432-
if engine_capabilities.get_payload_v5 {
1433-
self.get_payload_v5(fork_name, payload_id).await
1450+
if engine_capabilities.get_payload_v6 {
1451+
self.get_payload_v6(fork_name, payload_id).await
14341452
} else {
1435-
Err(Error::RequiredMethodUnsupported("engine_getPayloadv5"))
1453+
Err(Error::RequiredMethodUnsupported("engine_getPayloadV6"))
14361454
}
14371455
}
14381456
ForkName::Base | ForkName::Altair => Err(Error::UnsupportedForkVariant(format!(

beacon_node/execution_layer/src/test_utils/handle_rpc.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ pub async fn handle_rpc<E: EthSpec>(
277277
| ENGINE_GET_PAYLOAD_V2
278278
| ENGINE_GET_PAYLOAD_V3
279279
| ENGINE_GET_PAYLOAD_V4
280-
| ENGINE_GET_PAYLOAD_V5 => {
280+
| ENGINE_GET_PAYLOAD_V5
281+
| ENGINE_GET_PAYLOAD_V6 => {
281282
let request: JsonPayloadIdRequest =
282283
get_param(params, 0).map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?;
283284
let id = request.into();
@@ -363,7 +364,8 @@ pub async fn handle_rpc<E: EthSpec>(
363364
&& (method == ENGINE_GET_PAYLOAD_V1
364365
|| method == ENGINE_GET_PAYLOAD_V2
365366
|| method == ENGINE_GET_PAYLOAD_V3
366-
|| method == ENGINE_GET_PAYLOAD_V4)
367+
|| method == ENGINE_GET_PAYLOAD_V4
368+
|| method == ENGINE_GET_PAYLOAD_V5)
367369
{
368370
return Err((
369371
format!("{} called after Gloas fork!", method),
@@ -455,13 +457,18 @@ pub async fn handle_rpc<E: EthSpec>(
455457
})
456458
.unwrap()
457459
}
460+
_ => unreachable!(),
461+
})
462+
}
463+
ENGINE_GET_PAYLOAD_V6 => {
464+
Ok(match JsonExecutionPayload::try_from(response).unwrap() {
458465
JsonExecutionPayload::Gloas(execution_payload) => {
459466
serde_json::to_value(JsonGetPayloadResponseGloas {
460467
execution_payload,
461468
block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI),
462469
blobs_bundle: maybe_blobs
463470
.ok_or((
464-
"No blobs returned despite V5 Payload".to_string(),
471+
"No blobs returned despite V6 Payload".to_string(),
465472
GENERIC_ERROR_CODE,
466473
))?
467474
.into(),

beacon_node/execution_layer/src/test_utils/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ pub const DEFAULT_ENGINE_CAPABILITIES: EngineCapabilities = EngineCapabilities {
5555
get_payload_v3: true,
5656
get_payload_v4: true,
5757
get_payload_v5: true,
58+
get_payload_v6: true,
5859
get_client_version_v1: true,
5960
get_blobs_v1: true,
6061
get_blobs_v2: true,

0 commit comments

Comments
 (0)