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_evm_ethereum::EthEvmConfig;
11use reth_node_api::{FullNodeTypes, NodeTypesWithEngine, PrimitivesTy, TxTy};
12use reth_node_builder::{
13 components::PayloadBuilderBuilder, BuilderContext, PayloadBuilderConfig, PayloadTypes,
14};
15use reth_transaction_pool::{PoolTransaction, TransactionPool};
16
17#[derive(Clone, Default, Debug)]
19#[non_exhaustive]
20pub struct EthereumPayloadBuilder;
21
22impl EthereumPayloadBuilder {
23 pub fn build<Types, Node, Evm, Pool>(
26 self,
27 evm_config: Evm,
28 ctx: &BuilderContext<Node>,
29 pool: Pool,
30 ) -> eyre::Result<
31 reth_ethereum_payload_builder::EthereumPayloadBuilder<Pool, Node::Provider, Evm>,
32 >
33 where
34 Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
35 Node: FullNodeTypes<Types = Types>,
36 Evm: ConfigureEvm<Primitives = PrimitivesTy<Types>>,
37 Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
38 + Unpin
39 + 'static,
40 Types::Engine: PayloadTypes<
41 BuiltPayload = EthBuiltPayload,
42 PayloadAttributes = EthPayloadAttributes,
43 PayloadBuilderAttributes = EthPayloadBuilderAttributes,
44 >,
45 {
46 let conf = ctx.payload_builder_config();
47 Ok(reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
48 ctx.provider().clone(),
49 pool,
50 evm_config,
51 EthereumBuilderConfig::new().with_gas_limit(conf.gas_limit()),
52 ))
53 }
54}
55
56impl<Types, Node, Pool> PayloadBuilderBuilder<Node, Pool> for EthereumPayloadBuilder
57where
58 Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
59 Node: FullNodeTypes<Types = Types>,
60 Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
61 + Unpin
62 + 'static,
63 Types::Engine: PayloadTypes<
64 BuiltPayload = EthBuiltPayload,
65 PayloadAttributes = EthPayloadAttributes,
66 PayloadBuilderAttributes = EthPayloadBuilderAttributes,
67 >,
68{
69 type PayloadBuilder =
70 reth_ethereum_payload_builder::EthereumPayloadBuilder<Pool, Node::Provider, EthEvmConfig>;
71
72 async fn build_payload_builder(
73 self,
74 ctx: &BuilderContext<Node>,
75 pool: Pool,
76 ) -> eyre::Result<Self::PayloadBuilder> {
77 self.build(EthEvmConfig::new(ctx.chain_spec()), ctx, pool)
78 }
79}