From d99f0fa5ae43a7ee8b2a97c03cc85f8c48fe3d57 Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Sat, 8 Feb 2025 09:12:27 +0400 Subject: [PATCH] fix: use custom generator in custom builder example (#14320) --- crates/node/builder/src/components/builder.rs | 4 +-- crates/node/builder/src/components/payload.rs | 4 +-- examples/custom-payload-builder/src/main.rs | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/crates/node/builder/src/components/builder.rs b/crates/node/builder/src/components/builder.rs index 8b8b35dd4..29e4e866e 100644 --- a/crates/node/builder/src/components/builder.rs +++ b/crates/node/builder/src/components/builder.rs @@ -346,8 +346,8 @@ where let network = network_builder.build_network(context, pool.clone()).await?; let payload_builder = payload_builder_builder.build_payload_builder(context, pool.clone()).await?; - let payload_builder_handle = - payload_builder_builder.spawn_payload_builder_service(context, payload_builder.clone()); + let payload_builder_handle = payload_builder_builder + .spawn_payload_builder_service(context, payload_builder.clone())?; let consensus = consensus_builder.build_consensus(context).await?; Ok(Components { diff --git a/crates/node/builder/src/components/payload.rs b/crates/node/builder/src/components/payload.rs index 8ad1f5ec3..5fc7102cc 100644 --- a/crates/node/builder/src/components/payload.rs +++ b/crates/node/builder/src/components/payload.rs @@ -30,7 +30,7 @@ pub trait PayloadServiceBuilder: Sen self, ctx: &BuilderContext, payload_builder: Self::PayloadBuilder, - ) -> PayloadBuilderHandle<::Engine> { + ) -> eyre::Result::Engine>> { let conf = ctx.config().builder.clone(); let payload_job_config = BasicPayloadJobGeneratorConfig::default() @@ -49,7 +49,7 @@ pub trait PayloadServiceBuilder: Sen ctx.task_executor().spawn_critical("payload builder service", Box::pin(payload_service)); - payload_service_handle + Ok(payload_service_handle) } } diff --git a/examples/custom-payload-builder/src/main.rs b/examples/custom-payload-builder/src/main.rs index f22611265..1f9a7a515 100644 --- a/examples/custom-payload-builder/src/main.rs +++ b/examples/custom-payload-builder/src/main.rs @@ -11,15 +11,19 @@ #![cfg_attr(not(test), warn(unused_crate_dependencies))] +use crate::generator::EmptyBlockPayloadJobGenerator; use reth::{ builder::{components::PayloadServiceBuilder, node::FullNodeTypes, BuilderContext}, cli::{config::PayloadBuilderConfig, Cli}, + providers::CanonStateSubscriptions, transaction_pool::{PoolTransaction, TransactionPool}, }; +use reth_basic_payload_builder::BasicPayloadJobGeneratorConfig; use reth_chainspec::ChainSpec; use reth_ethereum_payload_builder::{EthereumBuilderConfig, EthereumPayloadBuilder}; use reth_node_api::NodeTypesWithEngine; use reth_node_ethereum::{node::EthereumAddOns, EthEngineTypes, EthEvmConfig, EthereumNode}; +use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService}; use reth_primitives::{EthPrimitives, TransactionSigned}; pub mod generator; @@ -59,6 +63,34 @@ where EthereumBuilderConfig::new(conf.extra_data_bytes()), )) } + + fn spawn_payload_builder_service( + self, + ctx: &BuilderContext, + payload_builder: Self::PayloadBuilder, + ) -> eyre::Result::Engine>> { + let conf = ctx.payload_builder_config(); + + let payload_job_config = BasicPayloadJobGeneratorConfig::default() + .interval(conf.interval()) + .deadline(conf.deadline()) + .max_payload_tasks(conf.max_payload_tasks()); + + let payload_generator = EmptyBlockPayloadJobGenerator::with_builder( + ctx.provider().clone(), + ctx.task_executor().clone(), + payload_job_config, + payload_builder, + ); + + let (payload_service, payload_builder) = + PayloadBuilderService::new(payload_generator, ctx.provider().canonical_state_stream()); + + ctx.task_executor() + .spawn_critical("custom payload builder service", Box::pin(payload_service)); + + Ok(payload_builder) + } } fn main() {