reth_ethereum_engine_primitives/
lib.rs1#![doc(
4 html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png",
5 html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256",
6 issue_tracker_base_url = "https://github.com/SeismicSystems/seismic-reth/issues/"
7)]
8#![cfg_attr(not(test), warn(unused_crate_dependencies))]
9#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
10#![cfg_attr(not(feature = "std"), no_std)]
11
12extern crate alloc;
13
14mod payload;
15pub use payload::{BlobSidecars, EthBuiltPayload, EthPayloadBuilderAttributes};
16
17mod error;
18pub use error::*;
19
20use alloy_rpc_types_engine::{ExecutionData, ExecutionPayload, ExecutionPayloadEnvelopeV5};
21pub use alloy_rpc_types_engine::{
22 ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4,
23 ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes,
24};
25use reth_engine_primitives::EngineTypes;
26use reth_payload_primitives::{BuiltPayload, PayloadTypes};
27use reth_primitives_traits::{NodePrimitives, SealedBlock};
28
29#[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)]
31#[non_exhaustive]
32pub struct EthEngineTypes<T: PayloadTypes = EthPayloadTypes> {
33 _marker: core::marker::PhantomData<T>,
34}
35
36impl<
37 T: PayloadTypes<
38 ExecutionData = ExecutionData,
39 BuiltPayload: BuiltPayload<
40 Primitives: NodePrimitives<Block = reth_ethereum_primitives::Block>,
41 >,
42 >,
43 > PayloadTypes for EthEngineTypes<T>
44{
45 type ExecutionData = T::ExecutionData;
46 type BuiltPayload = T::BuiltPayload;
47 type PayloadAttributes = T::PayloadAttributes;
48 type PayloadBuilderAttributes = T::PayloadBuilderAttributes;
49
50 fn block_to_payload(
51 block: SealedBlock<
52 <<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block,
53 >,
54 ) -> Self::ExecutionData {
55 let (payload, sidecar) =
56 ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block());
57 ExecutionData { payload, sidecar }
58 }
59}
60
61impl<T> EngineTypes for EthEngineTypes<T>
62where
63 T: PayloadTypes<ExecutionData = ExecutionData>,
64 T::BuiltPayload: BuiltPayload<Primitives: NodePrimitives<Block = reth_ethereum_primitives::Block>>
65 + TryInto<ExecutionPayloadV1>
66 + TryInto<ExecutionPayloadEnvelopeV2>
67 + TryInto<ExecutionPayloadEnvelopeV3>
68 + TryInto<ExecutionPayloadEnvelopeV4>
69 + TryInto<ExecutionPayloadEnvelopeV5>,
70{
71 type ExecutionPayloadEnvelopeV1 = ExecutionPayloadV1;
72 type ExecutionPayloadEnvelopeV2 = ExecutionPayloadEnvelopeV2;
73 type ExecutionPayloadEnvelopeV3 = ExecutionPayloadEnvelopeV3;
74 type ExecutionPayloadEnvelopeV4 = ExecutionPayloadEnvelopeV4;
75 type ExecutionPayloadEnvelopeV5 = ExecutionPayloadEnvelopeV5;
76}
77
78#[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)]
80#[non_exhaustive]
81pub struct EthPayloadTypes;
82
83impl PayloadTypes for EthPayloadTypes {
84 type BuiltPayload = EthBuiltPayload;
85 type PayloadAttributes = EthPayloadAttributes;
86 type PayloadBuilderAttributes = EthPayloadBuilderAttributes;
87 type ExecutionData = ExecutionData;
88
89 fn block_to_payload(
90 block: SealedBlock<
91 <<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block,
92 >,
93 ) -> Self::ExecutionData {
94 let (payload, sidecar) =
95 ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block());
96 ExecutionData { payload, sidecar }
97 }
98}