reth_node_ethereum/
payload.rs
1use 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#[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}