reth_optimism_payload_builder/
lib.rs

1//! Optimism's payload builder implementation.
2
3#![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/paradigmxyz/reth/issues/"
7)]
8#![cfg_attr(not(test), warn(unused_crate_dependencies))]
9#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
10#![allow(clippy::useless_let_if_seq)]
11
12extern crate alloc;
13
14pub mod builder;
15pub use builder::OpPayloadBuilder;
16pub mod error;
17pub mod payload;
18use op_alloy_rpc_types_engine::OpExecutionData;
19pub use payload::{
20    payload_id_optimism, OpBuiltPayload, OpPayloadAttributes, OpPayloadBuilderAttributes,
21};
22mod traits;
23use reth_optimism_primitives::OpPrimitives;
24use reth_payload_primitives::{BuiltPayload, PayloadTypes};
25use reth_primitives_traits::{Block, NodePrimitives, SealedBlock};
26pub use traits::*;
27pub mod validator;
28pub use validator::OpExecutionPayloadValidator;
29
30pub mod config;
31
32/// ZST that aggregates Optimism [`PayloadTypes`].
33#[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)]
34#[non_exhaustive]
35pub struct OpPayloadTypes<N: NodePrimitives = OpPrimitives>(core::marker::PhantomData<N>);
36
37impl<N: NodePrimitives> PayloadTypes for OpPayloadTypes<N>
38where
39    OpBuiltPayload<N>: BuiltPayload,
40{
41    type ExecutionData = OpExecutionData;
42    type BuiltPayload = OpBuiltPayload<N>;
43    type PayloadAttributes = OpPayloadAttributes;
44    type PayloadBuilderAttributes = OpPayloadBuilderAttributes<N::SignedTx>;
45
46    fn block_to_payload(
47        block: SealedBlock<
48            <<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block,
49        >,
50    ) -> Self::ExecutionData {
51        OpExecutionData::from_block_unchecked(
52            block.hash(),
53            &block.into_block().into_ethereum_block(),
54        )
55    }
56}