reth_node_ethereum/
payload.rs

1//! Payload component configuration for the Ethereum node.
2
3use reth_chainspec::{EthChainSpec, EthereumHardforks};
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: EthereumHardforks, 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        let chain = ctx.chain_spec().chain();
49        let gas_limit = conf.gas_limit_for(chain);
50
51        Ok(reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
52            ctx.provider().clone(),
53            pool,
54            evm_config,
55            EthereumBuilderConfig::new().with_gas_limit(gas_limit),
56        ))
57    }
58}