feat(isthmus): Integrate OpExecutionPayloadValidator (#14207)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
Co-authored-by: caglarkaya <caglaryucekaya@gmail.com>
This commit is contained in:
Emilia Hane
2025-02-28 12:21:31 +01:00
committed by GitHub
parent 6abe4407fb
commit ffabf7ebf7
16 changed files with 137 additions and 96 deletions

View File

@@ -1,19 +1,25 @@
//! RPC component builder
use reth_optimism_rpc::engine::OP_CAPABILITIES;
pub use reth_optimism_rpc::OpEngineApi;
use alloy_rpc_types_engine::ExecutionData;
use crate::OP_NAME_CLIENT;
use alloy_rpc_types_engine::ClientVersionV1;
use op_alloy_rpc_types_engine::OpExecutionData;
use reth_chainspec::EthereumHardforks;
use reth_node_api::{
AddOnsContext, EngineTypes, FullNodeComponents, NodeTypes, NodeTypesWithEngine,
};
use reth_node_builder::rpc::{BasicEngineApiBuilder, EngineApiBuilder, EngineValidatorBuilder};
use reth_node_builder::rpc::{EngineApiBuilder, EngineValidatorBuilder};
use reth_node_core::version::{CARGO_PKG_VERSION, CLIENT_CODE, VERGEN_GIT_SHA};
use reth_optimism_rpc::engine::op_capabilities;
use reth_payload_builder::PayloadStore;
use reth_rpc_engine_api::{EngineApi, EngineCapabilities};
/// Builder for basic [`OpEngineApi`] implementation.
#[derive(Debug, Default)]
pub struct OpEngineApiBuilder<EV> {
inner: BasicEngineApiBuilder<EV>,
engine_validator_builder: EV,
capabilities: Option<EngineCapabilities>,
}
impl<N, EV> EngineApiBuilder<N> for OpEngineApiBuilder<EV>
@@ -21,7 +27,7 @@ where
N: FullNodeComponents<
Types: NodeTypesWithEngine<
ChainSpec: EthereumHardforks,
Engine: EngineTypes<ExecutionData = ExecutionData>,
Engine: EngineTypes<ExecutionData = OpExecutionData>,
>,
>,
EV: EngineValidatorBuilder<N>,
@@ -35,7 +41,26 @@ where
>;
async fn build_engine_api(self, ctx: &AddOnsContext<'_, N>) -> eyre::Result<Self::EngineApi> {
let inner = self.inner.capabilities(OP_CAPABILITIES).build_engine_api(ctx).await?;
let Self { engine_validator_builder, capabilities } = self;
let engine_validator = engine_validator_builder.build(ctx).await?;
let client = ClientVersionV1 {
code: CLIENT_CODE,
name: OP_NAME_CLIENT.to_string(),
version: CARGO_PKG_VERSION.to_string(),
commit: VERGEN_GIT_SHA.to_string(),
};
let inner = EngineApi::new(
ctx.node.provider().clone(),
ctx.config.chain.clone(),
ctx.beacon_engine_handle.clone(),
PayloadStore::new(ctx.node.payload_builder_handle().clone()),
ctx.node.pool().clone(),
Box::new(ctx.node.task_executor().clone()),
client,
capabilities.unwrap_or_else(op_capabilities),
engine_validator,
);
Ok(OpEngineApi::new(inner))
}