mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: simplify PayloadBuilder setup (#14276)
This commit is contained in:
@ -34,12 +34,11 @@ use reth::{
|
||||
node::{NodeTypes, NodeTypesWithEngine},
|
||||
rpc::{EngineValidatorBuilder, RpcAddOns},
|
||||
BuilderContext, FullNodeTypes, Node, NodeAdapter, NodeBuilder, NodeComponentsBuilder,
|
||||
PayloadBuilderConfig,
|
||||
},
|
||||
network::NetworkHandle,
|
||||
payload::ExecutionPayloadValidator,
|
||||
primitives::{Block, EthPrimitives, SealedBlock, TransactionSigned},
|
||||
providers::{CanonStateSubscriptions, EthStorage, StateProviderFactory},
|
||||
providers::{EthStorage, StateProviderFactory},
|
||||
rpc::{
|
||||
eth::EthApi,
|
||||
types::engine::{ExecutionPayload, PayloadError},
|
||||
@ -48,10 +47,7 @@ use reth::{
|
||||
transaction_pool::{PoolTransaction, TransactionPool},
|
||||
version::default_extra_data_bytes,
|
||||
};
|
||||
use reth_basic_payload_builder::{
|
||||
BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig, BuildArguments, BuildOutcome,
|
||||
PayloadBuilder, PayloadConfig,
|
||||
};
|
||||
use reth_basic_payload_builder::{BuildArguments, BuildOutcome, PayloadBuilder, PayloadConfig};
|
||||
use reth_chainspec::{Chain, ChainSpec, ChainSpecProvider};
|
||||
use reth_engine_local::payload::UnsupportedLocalAttributes;
|
||||
use reth_ethereum_payload_builder::EthereumBuilderConfig;
|
||||
@ -68,10 +64,7 @@ use reth_node_ethereum::{
|
||||
},
|
||||
EthEvmConfig,
|
||||
};
|
||||
use reth_payload_builder::{
|
||||
EthBuiltPayload, EthPayloadBuilderAttributes, PayloadBuilderError, PayloadBuilderHandle,
|
||||
PayloadBuilderService,
|
||||
};
|
||||
use reth_payload_builder::{EthBuiltPayload, EthPayloadBuilderAttributes, PayloadBuilderError};
|
||||
use reth_tracing::{RethTracer, Tracer};
|
||||
use reth_trie_db::MerklePatriciaTrie;
|
||||
use serde::{Deserialize, Serialize};
|
||||
@ -367,11 +360,13 @@ where
|
||||
+ Unpin
|
||||
+ 'static,
|
||||
{
|
||||
async fn spawn_payload_service(
|
||||
self,
|
||||
type PayloadBuilder = CustomPayloadBuilder<Pool, Node::Provider>;
|
||||
|
||||
async fn build_payload_builder(
|
||||
&self,
|
||||
ctx: &BuilderContext<Node>,
|
||||
pool: Pool,
|
||||
) -> eyre::Result<PayloadBuilderHandle<<Node::Types as NodeTypesWithEngine>::Engine>> {
|
||||
) -> eyre::Result<Self::PayloadBuilder> {
|
||||
let payload_builder = CustomPayloadBuilder {
|
||||
inner: reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
|
||||
ctx.provider().clone(),
|
||||
@ -380,24 +375,6 @@ where
|
||||
EthereumBuilderConfig::new(default_extra_data_bytes()),
|
||||
),
|
||||
};
|
||||
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 = BasicPayloadJobGenerator::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("payload builder service", Box::pin(payload_service));
|
||||
|
||||
Ok(payload_builder)
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ reth-evm-ethereum.workspace = true
|
||||
reth-node-api.workspace = true
|
||||
reth-node-core.workspace = true
|
||||
reth-primitives.workspace = true
|
||||
reth-ethereum-payload-builder.workspace = true
|
||||
reth-node-ethereum = { workspace = true, features = ["test-utils"] }
|
||||
reth-tracing.workspace = true
|
||||
reth-evm.workspace = true
|
||||
|
||||
@ -204,12 +204,15 @@ where
|
||||
PayloadBuilderAttributes = EthPayloadBuilderAttributes,
|
||||
>,
|
||||
{
|
||||
async fn spawn_payload_service(
|
||||
self,
|
||||
type PayloadBuilder =
|
||||
reth_ethereum_payload_builder::EthereumPayloadBuilder<Pool, Node::Provider, MyEvmConfig>;
|
||||
|
||||
async fn build_payload_builder(
|
||||
&self,
|
||||
ctx: &BuilderContext<Node>,
|
||||
pool: Pool,
|
||||
) -> eyre::Result<reth::payload::PayloadBuilderHandle<Types::Engine>> {
|
||||
self.inner.spawn(MyEvmConfig::new(ctx.chain_spec()), ctx, pool)
|
||||
) -> eyre::Result<Self::PayloadBuilder> {
|
||||
self.inner.build(MyEvmConfig::new(ctx.chain_spec()), ctx, pool)
|
||||
}
|
||||
}
|
||||
#[tokio::main]
|
||||
|
||||
@ -11,20 +11,15 @@
|
||||
|
||||
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
|
||||
|
||||
use generator::EmptyBlockPayloadJobGenerator;
|
||||
use reth::{
|
||||
builder::{components::PayloadServiceBuilder, node::FullNodeTypes, BuilderContext},
|
||||
cli::{config::PayloadBuilderConfig, Cli},
|
||||
payload::PayloadBuilderHandle,
|
||||
providers::CanonStateSubscriptions,
|
||||
transaction_pool::{PoolTransaction, TransactionPool},
|
||||
};
|
||||
use reth_basic_payload_builder::BasicPayloadJobGeneratorConfig;
|
||||
use reth_chainspec::ChainSpec;
|
||||
use reth_ethereum_payload_builder::EthereumBuilderConfig;
|
||||
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::PayloadBuilderService;
|
||||
use reth_primitives::{EthPrimitives, TransactionSigned};
|
||||
|
||||
pub mod generator;
|
||||
@ -47,38 +42,22 @@ where
|
||||
+ Unpin
|
||||
+ 'static,
|
||||
{
|
||||
async fn spawn_payload_service(
|
||||
self,
|
||||
type PayloadBuilder = EthereumPayloadBuilder<Pool, Node::Provider, EthEvmConfig>;
|
||||
|
||||
async fn build_payload_builder(
|
||||
&self,
|
||||
ctx: &BuilderContext<Node>,
|
||||
pool: Pool,
|
||||
) -> eyre::Result<PayloadBuilderHandle<<Node::Types as NodeTypesWithEngine>::Engine>> {
|
||||
) -> eyre::Result<Self::PayloadBuilder> {
|
||||
tracing::info!("Spawning a custom payload builder");
|
||||
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(
|
||||
Ok(reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
|
||||
ctx.provider().clone(),
|
||||
ctx.task_executor().clone(),
|
||||
payload_job_config,
|
||||
reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
|
||||
ctx.provider().clone(),
|
||||
pool,
|
||||
EthEvmConfig::new(ctx.chain_spec()),
|
||||
EthereumBuilderConfig::new(conf.extra_data_bytes()),
|
||||
),
|
||||
);
|
||||
|
||||
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)
|
||||
pool,
|
||||
EthEvmConfig::new(ctx.chain_spec()),
|
||||
EthereumBuilderConfig::new(conf.extra_data_bytes()),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user