reth_node_ethereum/
payload.rs

1//! Payload component configuration for the Ethereum node.
2
3use reth_chainspec::ChainSpec;
4use reth_ethereum_engine_primitives::{
5    EthBuiltPayload, EthPayloadAttributes, EthPayloadBuilderAttributes,
6};
7use reth_ethereum_payload_builder::EthereumBuilderConfig;
8use reth_ethereum_primitives::EthPrimitives;
9use reth_evm::ConfigureEvm;
10use reth_node_api::{FullNodeTypes, NodeTypes, PrimitivesTy, TxTy};
11use reth_node_builder::{
12    components::PayloadBuilderBuilder, BuilderContext, PayloadBuilderConfig, PayloadTypes,
13};
14use reth_transaction_pool::{PoolTransaction, TransactionPool};
15
16/// A basic ethereum payload service.
17#[derive(Clone, Default, Debug)]
18#[non_exhaustive]
19pub struct EthereumPayloadBuilder;
20
21impl<Types, Node, Pool, Evm> PayloadBuilderBuilder<Node, Pool, Evm> for EthereumPayloadBuilder
22where
23    Types: NodeTypes<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
24    Node: FullNodeTypes<Types = Types>,
25    Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
26        + Unpin
27        + 'static,
28    Evm: ConfigureEvm<
29            Primitives = PrimitivesTy<Types>,
30            NextBlockEnvCtx = reth_evm::NextBlockEnvAttributes,
31        > + 'static,
32    Types::Payload: PayloadTypes<
33        BuiltPayload = EthBuiltPayload,
34        PayloadAttributes = EthPayloadAttributes,
35        PayloadBuilderAttributes = EthPayloadBuilderAttributes,
36    >,
37{
38    type PayloadBuilder =
39        reth_ethereum_payload_builder::EthereumPayloadBuilder<Pool, Node::Provider, Evm>;
40
41    async fn build_payload_builder(
42        self,
43        ctx: &BuilderContext<Node>,
44        pool: Pool,
45        evm_config: Evm,
46    ) -> eyre::Result<Self::PayloadBuilder> {
47        let conf = ctx.payload_builder_config();
48        Ok(reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
49            ctx.provider().clone(),
50            pool,
51            evm_config,
52            EthereumBuilderConfig::new().with_gas_limit(conf.gas_limit()),
53        ))
54    }
55}