From 20aceb750c68fc6020f2ee884bafc0d745afe09e Mon Sep 17 00:00:00 2001 From: Roman Krasiuk Date: Tue, 21 Feb 2023 07:50:40 +0200 Subject: [PATCH] feat(engine-api): exchange capabilities (#1469) Co-authored-by: Georgios Konstantopoulos --- crates/rpc/rpc-api/src/engine.rs | 4 ++++ crates/rpc/rpc-types/src/eth/engine.rs | 13 +++++++++++++ crates/rpc/rpc/src/engine/mod.rs | 7 ++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/crates/rpc/rpc-api/src/engine.rs b/crates/rpc/rpc-api/src/engine.rs index c8fb3b642..bfe33742b 100644 --- a/crates/rpc/rpc-api/src/engine.rs +++ b/crates/rpc/rpc-api/src/engine.rs @@ -66,4 +66,8 @@ pub trait EngineApi { &self, transition_configuration: TransitionConfiguration, ) -> Result; + + /// See also + #[method(name = "engine_exchangeCapabilities")] + async fn exchange_capabilities(&self, capabilities: Vec) -> Result>; } diff --git a/crates/rpc/rpc-types/src/eth/engine.rs b/crates/rpc/rpc-types/src/eth/engine.rs index 4d0d7667b..7ef76d02b 100644 --- a/crates/rpc/rpc-types/src/eth/engine.rs +++ b/crates/rpc/rpc-types/src/eth/engine.rs @@ -8,6 +8,19 @@ use reth_primitives::{ use reth_rlp::Encodable; use serde::{Deserialize, Serialize}; +/// The list of supported Engine capabilities +pub const CAPABILITIES: [&str; 9] = [ + "engine_forkchoiceUpdatedV1", + "engine_forkchoiceUpdatedV2", + "engine_exchangeTransitionConfigurationV1", + "engine_getPayloadV1", + "engine_getPayloadV2", + "engine_newPayloadV1", + "engine_newPayloadV2", + "engine_getPayloadBodiesByHashV1", + "engine_getPayloadBodiesByRangeV1", +]; + /// This structure maps on the ExecutionPayload structure of the beacon chain spec. /// /// See also: diff --git a/crates/rpc/rpc/src/engine/mod.rs b/crates/rpc/rpc/src/engine/mod.rs index e7c492d96..677b658c4 100644 --- a/crates/rpc/rpc/src/engine/mod.rs +++ b/crates/rpc/rpc/src/engine/mod.rs @@ -13,7 +13,7 @@ use reth_rpc_engine_api::{ }; use reth_rpc_types::engine::{ ExecutionPayload, ExecutionPayloadBodies, ForkchoiceUpdated, PayloadAttributes, PayloadStatus, - TransitionConfiguration, + TransitionConfiguration, CAPABILITIES, }; use tokio::sync::{ mpsc::UnboundedSender, @@ -157,4 +157,9 @@ impl EngineApiServer for EngineApi { self.delegate_request(EngineApiMessage::ExchangeTransitionConfiguration(config, tx), rx) .await } + + /// See also + async fn exchange_capabilities(&self, _capabilities: Vec) -> Result> { + Ok(CAPABILITIES.into_iter().map(str::to_owned).collect()) + } }