feat: add version_specific_fields method to EngineTypes (#6050)

This commit is contained in:
Dan Cline
2024-01-15 15:29:45 -05:00
committed by GitHub
parent 685d1c51e4
commit 9d65a4cfbb
9 changed files with 135 additions and 21 deletions

View File

@@ -1,8 +1,16 @@
use reth_node_api::EngineTypes;
use reth_payload_builder::{
EthBuiltPayload, EthPayloadBuilderAttributes, OptimismPayloadBuilderAttributes,
#[cfg(feature = "optimism")]
use reth_node_api::optimism_validate_version_specific_fields;
use reth_node_api::{
validate_version_specific_fields, AttributesValidationError, EngineApiMessageVersion,
EngineTypes, PayloadOrAttributes,
};
use reth_rpc_types::engine::{OptimismPayloadAttributes, PayloadAttributes};
#[cfg(feature = "optimism")]
use reth_payload_builder::OptimismPayloadBuilderAttributes;
use reth_payload_builder::{EthBuiltPayload, EthPayloadBuilderAttributes};
use reth_primitives::ChainSpec;
#[cfg(feature = "optimism")]
use reth_rpc_types::engine::OptimismPayloadAttributes;
use reth_rpc_types::engine::PayloadAttributes as EthPayloadAttributes;
/// The types used in the default mainnet ethereum beacon consensus engine.
#[derive(Debug, Default, Clone)]
@@ -10,18 +18,37 @@ use reth_rpc_types::engine::{OptimismPayloadAttributes, PayloadAttributes};
pub struct EthEngineTypes;
impl EngineTypes for EthEngineTypes {
type PayloadAttributes = PayloadAttributes;
type PayloadAttributes = EthPayloadAttributes;
type PayloadBuilderAttributes = EthPayloadBuilderAttributes;
type BuiltPayload = EthBuiltPayload;
fn validate_version_specific_fields(
chain_spec: &ChainSpec,
version: EngineApiMessageVersion,
payload_or_attrs: PayloadOrAttributes<'_, EthPayloadAttributes>,
) -> Result<(), AttributesValidationError> {
validate_version_specific_fields(chain_spec, version, payload_or_attrs)
}
}
#[cfg(feature = "optimism")]
/// The types used in the optimism beacon consensus engine.
#[derive(Debug, Default, Clone)]
#[non_exhaustive]
pub struct OptimismEngineTypes;
// TODO: remove cfg once Hardfork::Canyon can be used without the flag
#[cfg(feature = "optimism")]
impl EngineTypes for OptimismEngineTypes {
type PayloadAttributes = OptimismPayloadAttributes;
type PayloadBuilderAttributes = OptimismPayloadBuilderAttributes;
type BuiltPayload = EthBuiltPayload;
fn validate_version_specific_fields(
chain_spec: &ChainSpec,
version: EngineApiMessageVersion,
payload_or_attrs: PayloadOrAttributes<'_, OptimismPayloadAttributes>,
) -> Result<(), AttributesValidationError> {
optimism_validate_version_specific_fields(chain_spec, version, payload_or_attrs)
}
}