feat(engine-api): exchange capabilities (#1469)

Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
This commit is contained in:
Roman Krasiuk
2023-02-21 07:50:40 +02:00
committed by GitHub
parent 03832d6d23
commit 20aceb750c
3 changed files with 23 additions and 1 deletions

View File

@ -66,4 +66,8 @@ pub trait EngineApi {
&self,
transition_configuration: TransitionConfiguration,
) -> Result<TransitionConfiguration>;
/// See also <https://github.com/ethereum/execution-apis/blob/6452a6b194d7db269bf1dbd087a267251d3cc7f8/src/engine/common.md#capabilities>
#[method(name = "engine_exchangeCapabilities")]
async fn exchange_capabilities(&self, capabilities: Vec<String>) -> Result<Vec<String>>;
}

View File

@ -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: <https://github.com/ethereum/execution-apis/blob/6709c2a795b707202e93c4f2867fa0bf2640a84f/src/engine/paris.md#executionpayloadv1>

View File

@ -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 <https://github.com/ethereum/execution-apis/blob/6452a6b194d7db269bf1dbd087a267251d3cc7f8/src/engine/common.md#capabilities>
async fn exchange_capabilities(&self, _capabilities: Vec<String>) -> Result<Vec<String>> {
Ok(CAPABILITIES.into_iter().map(str::to_owned).collect())
}
}