mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
chore: move payload builder types to standalone mod (#13593)
This commit is contained in:
@ -23,3 +23,5 @@ pub use evm::{
|
|||||||
|
|
||||||
pub mod node;
|
pub mod node;
|
||||||
pub use node::EthereumNode;
|
pub use node::EthereumNode;
|
||||||
|
|
||||||
|
pub mod payload;
|
||||||
|
|||||||
@ -1,26 +1,23 @@
|
|||||||
//! Ethereum Node types config.
|
//! Ethereum Node types config.
|
||||||
|
|
||||||
use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig};
|
use crate::{EthEngineTypes, EthEvmConfig};
|
||||||
use reth_beacon_consensus::EthBeaconConsensus;
|
use reth_beacon_consensus::EthBeaconConsensus;
|
||||||
use reth_chainspec::ChainSpec;
|
use reth_chainspec::ChainSpec;
|
||||||
use reth_ethereum_engine_primitives::{
|
use reth_ethereum_engine_primitives::{
|
||||||
EthBuiltPayload, EthPayloadAttributes, EthPayloadBuilderAttributes,
|
EthBuiltPayload, EthPayloadAttributes, EthPayloadBuilderAttributes,
|
||||||
};
|
};
|
||||||
use reth_ethereum_payload_builder::EthereumBuilderConfig;
|
|
||||||
use reth_evm::execute::BasicBlockExecutorProvider;
|
use reth_evm::execute::BasicBlockExecutorProvider;
|
||||||
use reth_evm_ethereum::execute::EthExecutionStrategyFactory;
|
use reth_evm_ethereum::execute::EthExecutionStrategyFactory;
|
||||||
use reth_network::{EthNetworkPrimitives, NetworkHandle, PeersInfo};
|
use reth_network::{EthNetworkPrimitives, NetworkHandle, PeersInfo};
|
||||||
use reth_node_api::{AddOnsContext, ConfigureEvm, FullNodeComponents, HeaderTy, TxTy};
|
use reth_node_api::{AddOnsContext, FullNodeComponents, TxTy};
|
||||||
use reth_node_builder::{
|
use reth_node_builder::{
|
||||||
components::{
|
components::{
|
||||||
ComponentsBuilder, ConsensusBuilder, ExecutorBuilder, NetworkBuilder,
|
ComponentsBuilder, ConsensusBuilder, ExecutorBuilder, NetworkBuilder, PoolBuilder,
|
||||||
PayloadServiceBuilder, PoolBuilder,
|
|
||||||
},
|
},
|
||||||
node::{FullNodeTypes, NodeTypes, NodeTypesWithEngine},
|
node::{FullNodeTypes, NodeTypes, NodeTypesWithEngine},
|
||||||
rpc::{EngineValidatorBuilder, RpcAddOns},
|
rpc::{EngineValidatorBuilder, RpcAddOns},
|
||||||
BuilderContext, Node, NodeAdapter, NodeComponentsBuilder, PayloadBuilderConfig, PayloadTypes,
|
BuilderContext, Node, NodeAdapter, NodeComponentsBuilder, PayloadTypes,
|
||||||
};
|
};
|
||||||
use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService};
|
|
||||||
use reth_primitives::{EthPrimitives, PooledTransaction};
|
use reth_primitives::{EthPrimitives, PooledTransaction};
|
||||||
use reth_provider::{CanonStateSubscriptions, EthStorage};
|
use reth_provider::{CanonStateSubscriptions, EthStorage};
|
||||||
use reth_rpc::EthApi;
|
use reth_rpc::EthApi;
|
||||||
@ -32,8 +29,7 @@ use reth_transaction_pool::{
|
|||||||
use reth_trie_db::MerklePatriciaTrie;
|
use reth_trie_db::MerklePatriciaTrie;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::{EthEngineTypes, EthEvmConfig};
|
pub use crate::payload::EthereumPayloadBuilder;
|
||||||
|
|
||||||
pub use reth_ethereum_engine_primitives::EthereumEngineValidator;
|
pub use reth_ethereum_engine_primitives::EthereumEngineValidator;
|
||||||
|
|
||||||
/// Type configuration for a regular Ethereum node.
|
/// Type configuration for a regular Ethereum node.
|
||||||
@ -218,81 +214,6 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A basic ethereum payload service.
|
|
||||||
#[derive(Clone, Default, Debug)]
|
|
||||||
#[non_exhaustive]
|
|
||||||
pub struct EthereumPayloadBuilder;
|
|
||||||
|
|
||||||
impl EthereumPayloadBuilder {
|
|
||||||
/// A helper method initializing [`PayloadBuilderService`] with the given EVM config.
|
|
||||||
pub fn spawn<Types, Node, Evm, Pool>(
|
|
||||||
self,
|
|
||||||
evm_config: Evm,
|
|
||||||
ctx: &BuilderContext<Node>,
|
|
||||||
pool: Pool,
|
|
||||||
) -> eyre::Result<PayloadBuilderHandle<Types::Engine>>
|
|
||||||
where
|
|
||||||
Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
|
|
||||||
Node: FullNodeTypes<Types = Types>,
|
|
||||||
Evm: ConfigureEvm<Header = HeaderTy<Types>, Transaction = TxTy<Node::Types>>,
|
|
||||||
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
|
|
||||||
+ Unpin
|
|
||||||
+ 'static,
|
|
||||||
Types::Engine: PayloadTypes<
|
|
||||||
BuiltPayload = EthBuiltPayload,
|
|
||||||
PayloadAttributes = EthPayloadAttributes,
|
|
||||||
PayloadBuilderAttributes = EthPayloadBuilderAttributes,
|
|
||||||
>,
|
|
||||||
{
|
|
||||||
let conf = ctx.payload_builder_config();
|
|
||||||
let payload_builder = reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
|
|
||||||
evm_config,
|
|
||||||
EthereumBuilderConfig::new(conf.extra_data_bytes()).with_gas_limit(conf.gas_limit()),
|
|
||||||
);
|
|
||||||
|
|
||||||
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(),
|
|
||||||
pool,
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<Types, Node, Pool> PayloadServiceBuilder<Node, Pool> for EthereumPayloadBuilder
|
|
||||||
where
|
|
||||||
Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
|
|
||||||
Node: FullNodeTypes<Types = Types>,
|
|
||||||
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
|
|
||||||
+ Unpin
|
|
||||||
+ 'static,
|
|
||||||
Types::Engine: PayloadTypes<
|
|
||||||
BuiltPayload = EthBuiltPayload,
|
|
||||||
PayloadAttributes = EthPayloadAttributes,
|
|
||||||
PayloadBuilderAttributes = EthPayloadBuilderAttributes,
|
|
||||||
>,
|
|
||||||
{
|
|
||||||
async fn spawn_payload_service(
|
|
||||||
self,
|
|
||||||
ctx: &BuilderContext<Node>,
|
|
||||||
pool: Pool,
|
|
||||||
) -> eyre::Result<PayloadBuilderHandle<Types::Engine>> {
|
|
||||||
self.spawn(EthEvmConfig::new(ctx.chain_spec()), ctx, pool)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A basic ethereum payload service.
|
/// A basic ethereum payload service.
|
||||||
#[derive(Debug, Default, Clone, Copy)]
|
#[derive(Debug, Default, Clone, Copy)]
|
||||||
pub struct EthereumNetworkBuilder {
|
pub struct EthereumNetworkBuilder {
|
||||||
|
|||||||
93
crates/ethereum/node/src/payload.rs
Normal file
93
crates/ethereum/node/src/payload.rs
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
//! Payload component configuration for the Ethereum node.
|
||||||
|
|
||||||
|
use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig};
|
||||||
|
use reth_chainspec::ChainSpec;
|
||||||
|
use reth_ethereum_engine_primitives::{
|
||||||
|
EthBuiltPayload, EthPayloadAttributes, EthPayloadBuilderAttributes,
|
||||||
|
};
|
||||||
|
use reth_ethereum_payload_builder::EthereumBuilderConfig;
|
||||||
|
use reth_evm::ConfigureEvm;
|
||||||
|
use reth_evm_ethereum::EthEvmConfig;
|
||||||
|
use reth_node_api::{FullNodeTypes, HeaderTy, NodeTypesWithEngine, TxTy};
|
||||||
|
use reth_node_builder::{
|
||||||
|
components::PayloadServiceBuilder, BuilderContext, PayloadBuilderConfig, PayloadTypes,
|
||||||
|
};
|
||||||
|
use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService};
|
||||||
|
use reth_primitives::EthPrimitives;
|
||||||
|
use reth_provider::CanonStateSubscriptions;
|
||||||
|
use reth_transaction_pool::{PoolTransaction, TransactionPool};
|
||||||
|
|
||||||
|
/// A basic ethereum payload service.
|
||||||
|
#[derive(Clone, Default, Debug)]
|
||||||
|
#[non_exhaustive]
|
||||||
|
pub struct EthereumPayloadBuilder;
|
||||||
|
|
||||||
|
impl EthereumPayloadBuilder {
|
||||||
|
/// A helper method initializing [`PayloadBuilderService`] with the given EVM config.
|
||||||
|
pub fn spawn<Types, Node, Evm, Pool>(
|
||||||
|
self,
|
||||||
|
evm_config: Evm,
|
||||||
|
ctx: &BuilderContext<Node>,
|
||||||
|
pool: Pool,
|
||||||
|
) -> eyre::Result<PayloadBuilderHandle<Types::Engine>>
|
||||||
|
where
|
||||||
|
Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
|
||||||
|
Node: FullNodeTypes<Types = Types>,
|
||||||
|
Evm: ConfigureEvm<Header = HeaderTy<Types>, Transaction = TxTy<Node::Types>>,
|
||||||
|
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
|
||||||
|
+ Unpin
|
||||||
|
+ 'static,
|
||||||
|
Types::Engine: PayloadTypes<
|
||||||
|
BuiltPayload = EthBuiltPayload,
|
||||||
|
PayloadAttributes = EthPayloadAttributes,
|
||||||
|
PayloadBuilderAttributes = EthPayloadBuilderAttributes,
|
||||||
|
>,
|
||||||
|
{
|
||||||
|
let conf = ctx.payload_builder_config();
|
||||||
|
let payload_builder = reth_ethereum_payload_builder::EthereumPayloadBuilder::new(
|
||||||
|
evm_config,
|
||||||
|
EthereumBuilderConfig::new(conf.extra_data_bytes()).with_gas_limit(conf.gas_limit()),
|
||||||
|
);
|
||||||
|
|
||||||
|
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(),
|
||||||
|
pool,
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<Types, Node, Pool> PayloadServiceBuilder<Node, Pool> for EthereumPayloadBuilder
|
||||||
|
where
|
||||||
|
Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
|
||||||
|
Node: FullNodeTypes<Types = Types>,
|
||||||
|
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
|
||||||
|
+ Unpin
|
||||||
|
+ 'static,
|
||||||
|
Types::Engine: PayloadTypes<
|
||||||
|
BuiltPayload = EthBuiltPayload,
|
||||||
|
PayloadAttributes = EthPayloadAttributes,
|
||||||
|
PayloadBuilderAttributes = EthPayloadBuilderAttributes,
|
||||||
|
>,
|
||||||
|
{
|
||||||
|
async fn spawn_payload_service(
|
||||||
|
self,
|
||||||
|
ctx: &BuilderContext<Node>,
|
||||||
|
pool: Pool,
|
||||||
|
) -> eyre::Result<PayloadBuilderHandle<Types::Engine>> {
|
||||||
|
self.spawn(EthEvmConfig::new(ctx.chain_spec()), ctx, pool)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user