diff --git a/crates/rpc/rpc-api/src/engine.rs b/crates/rpc/rpc-api/src/engine.rs index c8fb3b642d..bfe33742b8 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 4d0d7667bb..7ef76d02b6 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 e7c492d963..677b658c4d 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()) + } }