mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-04-08 03:01:12 -04:00
refactor: introduce Enginvalidator in tree (#17598)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user