refactor: introduce Enginvalidator in tree (#17598)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
Arsenii Kulikov
2025-07-28 12:09:55 +03:00
committed by GitHub
parent d392c3fdf2
commit 9d1af5a09c
25 changed files with 923 additions and 1285 deletions

View File

@@ -29,15 +29,14 @@ use alloy_rpc_types::{
Withdrawal,
};
use reth_basic_payload_builder::{BuildArguments, BuildOutcome, PayloadBuilder, PayloadConfig};
use reth_engine_tree::tree::EngineValidator;
use reth_ethereum::{
chainspec::{Chain, ChainSpec, ChainSpecProvider},
node::{
api::{
payload::{EngineApiMessageVersion, EngineObjectValidationError, PayloadOrAttributes},
validate_version_specific_fields, AddOnsContext, EngineTypes, FullNodeComponents,
FullNodeTypes, InvalidPayloadAttributesError, NewPayloadError, NodeTypes,
PayloadAttributes, PayloadBuilderAttributes, PayloadTypes, PayloadValidator,
validate_version_specific_fields, AddOnsContext, EngineTypes, EngineValidator,
FullNodeComponents, FullNodeTypes, InvalidPayloadAttributesError, NewPayloadError,
NodeTypes, PayloadAttributes, PayloadBuilderAttributes, PayloadTypes, PayloadValidator,
},
builder::{
components::{BasicPayloadServiceBuilder, ComponentsBuilder, PayloadBuilderBuilder},
@@ -52,11 +51,11 @@ use reth_ethereum::{
EthEvmConfig, EthereumEthApiBuilder,
},
pool::{PoolTransaction, TransactionPool},
primitives::{RecoveredBlock, SealedBlock},
primitives::{Block, RecoveredBlock, SealedBlock},
provider::{EthStorage, StateProviderFactory},
rpc::types::engine::ExecutionPayload,
tasks::TaskManager,
Block, EthPrimitives, TransactionSigned,
EthPrimitives, TransactionSigned,
};
use reth_ethereum_payload_builder::{EthereumBuilderConfig, EthereumExecutionPayloadValidator};
use reth_payload_builder::{EthBuiltPayload, EthPayloadBuilderAttributes, PayloadBuilderError};
@@ -192,9 +191,8 @@ impl CustomEngineValidator {
}
}
impl PayloadValidator for CustomEngineValidator {
type Block = Block;
type ExecutionData = ExecutionData;
impl PayloadValidator<CustomEngineTypes> for CustomEngineValidator {
type Block = reth_ethereum::Block;
fn ensure_well_formed_payload(
&self,
@@ -203,16 +201,22 @@ impl PayloadValidator for CustomEngineValidator {
let sealed_block = self.inner.ensure_well_formed_payload(payload)?;
sealed_block.try_recover().map_err(|e| NewPayloadError::Other(e.into()))
}
fn validate_payload_attributes_against_header(
&self,
_attr: &CustomPayloadAttributes,
_header: &<Self::Block as Block>::Header,
) -> Result<(), InvalidPayloadAttributesError> {
// skip default timestamp validation
Ok(())
}
}
impl<T> EngineValidator<T> for CustomEngineValidator
where
T: PayloadTypes<PayloadAttributes = CustomPayloadAttributes, ExecutionData = ExecutionData>,
{
impl EngineValidator<CustomEngineTypes> for CustomEngineValidator {
fn validate_version_specific_fields(
&self,
version: EngineApiMessageVersion,
payload_or_attrs: PayloadOrAttributes<'_, Self::ExecutionData, T::PayloadAttributes>,
payload_or_attrs: PayloadOrAttributes<'_, ExecutionData, CustomPayloadAttributes>,
) -> Result<(), EngineObjectValidationError> {
validate_version_specific_fields(self.chain_spec(), version, payload_or_attrs)
}
@@ -220,12 +224,12 @@ where
fn ensure_well_formed_attributes(
&self,
version: EngineApiMessageVersion,
attributes: &T::PayloadAttributes,
attributes: &CustomPayloadAttributes,
) -> Result<(), EngineObjectValidationError> {
validate_version_specific_fields(
self.chain_spec(),
version,
PayloadOrAttributes::<Self::ExecutionData, T::PayloadAttributes>::PayloadAttributes(
PayloadOrAttributes::<ExecutionData, CustomPayloadAttributes>::PayloadAttributes(
attributes,
),
)?;
@@ -239,15 +243,6 @@ where
Ok(())
}
fn validate_payload_attributes_against_header(
&self,
_attr: &<T as PayloadTypes>::PayloadAttributes,
_header: &<Self::Block as reth_ethereum::primitives::Block>::Header,
) -> Result<(), InvalidPayloadAttributesError> {
// skip default timestamp validation
Ok(())
}
}
/// Custom engine validator builder