fix: use custom generator in custom builder example (#14320)

This commit is contained in:
Arsenii Kulikov
2025-02-08 09:12:27 +04:00
committed by GitHub
parent ea86211636
commit d99f0fa5ae
3 changed files with 36 additions and 4 deletions

View File

@ -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 {

View File

@ -30,7 +30,7 @@ pub trait PayloadServiceBuilder<Node: FullNodeTypes, Pool: TransactionPool>: Sen
self,
ctx: &BuilderContext<Node>,
payload_builder: Self::PayloadBuilder,
) -> PayloadBuilderHandle<<Node::Types as NodeTypesWithEngine>::Engine> {
) -> eyre::Result<PayloadBuilderHandle<<Node::Types as NodeTypesWithEngine>::Engine>> {
let conf = ctx.config().builder.clone();
let payload_job_config = BasicPayloadJobGeneratorConfig::default()
@ -49,7 +49,7 @@ pub trait PayloadServiceBuilder<Node: FullNodeTypes, Pool: TransactionPool>: Sen
ctx.task_executor().spawn_critical("payload builder service", Box::pin(payload_service));
payload_service_handle
Ok(payload_service_handle)
}
}

View File

@ -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<Node>,
payload_builder: Self::PayloadBuilder,
) -> eyre::Result<PayloadBuilderHandle<<Node::Types as NodeTypesWithEngine>::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() {