Skip to content

Commit 1d6355e

Browse files
committed
feat: support custom payload attributes in dev mode
1 parent 51e9fab commit 1d6355e

File tree

12 files changed

+41
-647
lines changed

12 files changed

+41
-647
lines changed

Cargo.lock

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bin/reth/src/main.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ fn main() {
2020
if let Err(err) = Cli::<EthereumChainSpecParser>::parse().run(|builder, _| async move {
2121
info!(target: "reth::cli", "Launching node");
2222
let handle = builder.launch_node(EthereumNode::default()).await?;
23-
handle.node_exit_future().await
23+
handle.node_exit_future.await
2424
}) {
2525
eprintln!("Error: {err:?}");
2626
std::process::exit(1);

crates/engine/local/Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ reth-consensus.workspace = true
1515
reth-engine-primitives.workspace = true
1616
reth-engine-service.workspace = true
1717
reth-engine-tree.workspace = true
18-
reth-node-api.workspace = true
1918
reth-node-types.workspace = true
2019
reth-evm.workspace = true
2120
reth-ethereum-engine-primitives.workspace = true

crates/engine/local/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
)]
88
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
99
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
10+
#![allow(incomplete_features)]
11+
#![feature(specialization)]
1012

11-
// pub mod engine;
1213
pub mod miner;
1314
pub mod payload;
1415
pub mod service;
1516

16-
// pub use engine::LocalEngineNodeLauncher;
1717
pub use miner::MiningMode;
1818
pub use payload::LocalPayloadAttributesBuilder;
1919
pub use service::LocalEngineService;

crates/engine/local/src/payload.rs

+9-22
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
use alloy_primitives::{Address, B256};
55
use reth_chainspec::EthereumHardforks;
66
use reth_ethereum_engine_primitives::EthPayloadAttributes;
7-
use reth_node_api::{AddOnsContext, FullNodeComponents, NodeTypesWithEngine, PayloadTypes};
87
use reth_payload_primitives::PayloadAttributesBuilder;
9-
use std::{future::Future, sync::Arc};
8+
use std::sync::Arc;
109

1110
/// The attributes builder for local Ethereum payload.
1211
#[derive(Debug)]
@@ -20,11 +19,6 @@ impl<ChainSpec> LocalPayloadAttributesBuilder<ChainSpec> {
2019
pub const fn new(chain_spec: Arc<ChainSpec>) -> Self {
2120
Self { chain_spec }
2221
}
23-
24-
/// Returns the chain spec.
25-
pub fn chain_spec(&self) -> &ChainSpec {
26-
&self.chain_spec
27-
}
2822
}
2923

3024
impl<ChainSpec> PayloadAttributesBuilder<EthPayloadAttributes>
@@ -66,18 +60,11 @@ where
6660
}
6761
}
6862

69-
// / A temporary workaround to support local payload engine launcher for arbitrary payload
70-
// / attributes.
71-
// TODO(mattsse): This should be reworked so that LocalPayloadAttributesBuilder can be implemented
72-
// for any
73-
// pub trait UnsupportedLocalAttributes: Send + Sync + 'static {}
74-
75-
// impl<T, ChainSpec> PayloadAttributesBuilder<T> for LocalPayloadAttributesBuilder<ChainSpec>
76-
// where
77-
// ChainSpec: Send + Sync + 'static,
78-
// T: UnsupportedLocalAttributes,
79-
// {
80-
// fn build(&self, _: u64) -> T {
81-
// panic!("Unsupported payload attributes")
82-
// }
83-
// }
63+
impl<T, ChainSpec> PayloadAttributesBuilder<T> for LocalPayloadAttributesBuilder<ChainSpec>
64+
where
65+
ChainSpec: Send + Sync + 'static,
66+
{
67+
default fn build(&self, _: u64) -> T {
68+
panic!("Unsupported payload attributes")
69+
}
70+
}

crates/node/builder/src/builder/mod.rs

+12-65
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::{
77
components::NodeComponentsBuilder,
88
node::FullNode,
99
rpc::{RethRpcAddOns, RethRpcServerHandles, RpcContext},
10-
BlockReaderFor, EngineNodeLauncher, LaunchNode, LocalEngineNodeLauncher, Node, NodeHandle,
10+
BlockReaderFor, EngineNodeLauncher, LaunchNode, Node,
1111
};
1212
use alloy_eips::eip4844::env_settings::EnvKzgSettings;
1313
use futures::Future;
@@ -21,13 +21,12 @@ use reth_network::{
2121
NetworkHandle, NetworkManager, NetworkPrimitives,
2222
};
2323
use reth_node_api::{
24-
FullNodeComponents, FullNodePrimitives, FullNodeTypes, FullNodeTypesAdapter, NodeAddOns,
25-
NodeTypes, NodeTypesWithDBAdapter, NodeTypesWithEngine,
24+
FullNodePrimitives, FullNodeTypes, FullNodeTypesAdapter, NodeAddOns, NodeTypes,
25+
NodeTypesWithDBAdapter, NodeTypesWithEngine,
2626
};
2727
use reth_node_core::{
2828
cli::config::{PayloadBuilderConfig, RethTransactionPoolConfig},
2929
dirs::{ChainPath, DataDirPath},
30-
exit::NodeExitFuture,
3130
node_config::NodeConfig,
3231
primitives::Head,
3332
};
@@ -344,14 +343,9 @@ where
344343
self,
345344
node: N,
346345
) -> eyre::Result<
347-
LaunchedNode<
348-
<EngineNodeLauncher as LaunchNode<
349-
NodeBuilderWithComponents<RethFullAdapter<DB, N>, N::ComponentsBuilder, N::AddOns>,
350-
>>::Node,
351-
<LocalEngineNodeLauncher as LaunchNode<
352-
NodeBuilderWithComponents<RethFullAdapter<DB, N>, N::ComponentsBuilder, N::AddOns>,
353-
>>::Node,
354-
>,
346+
<EngineNodeLauncher as LaunchNode<
347+
NodeBuilderWithComponents<RethFullAdapter<DB, N>, N::ComponentsBuilder, N::AddOns>,
348+
>>::Node,
355349
>
356350
where
357351
N: Node<RethFullAdapter<DB, N>, ChainSpec = ChainSpec> + NodeTypesForProvider,
@@ -365,9 +359,6 @@ where
365359
EngineNodeLauncher: LaunchNode<
366360
NodeBuilderWithComponents<RethFullAdapter<DB, N>, N::ComponentsBuilder, N::AddOns>,
367361
>,
368-
LocalEngineNodeLauncher: LaunchNode<
369-
NodeBuilderWithComponents<RethFullAdapter<DB, N>, N::ComponentsBuilder, N::AddOns>,
370-
>,
371362
{
372363
self.node(node).launch().await
373364
}
@@ -552,53 +543,21 @@ where
552543
}
553544
}
554545

555-
pub enum LaunchedNode<T1, T2> {
556-
Engine(T1),
557-
Local(T2),
558-
}
559-
560-
impl<T1: HasNodeExitFuture, T2: HasNodeExitFuture> LaunchedNode<T1, T2> {
561-
pub fn node_exit_future(self) -> NodeExitFuture {
562-
match self {
563-
LaunchedNode::Engine(node) => node.node_exit_future(),
564-
LaunchedNode::Local(node) => node.node_exit_future(),
565-
}
566-
}
567-
}
568-
569-
trait HasNodeExitFuture {
570-
// Change to return owned NodeExitFuture instead of reference
571-
fn node_exit_future(self) -> NodeExitFuture;
572-
}
573-
574-
impl<N: FullNodeComponents, AO: RethRpcAddOns<N>> HasNodeExitFuture for NodeHandle<N, AO> {
575-
// Update implementation to return owned NodeExitFuture
576-
fn node_exit_future(self) -> NodeExitFuture {
577-
self.node_exit_future
578-
}
579-
}
580-
581546
impl<T, DB, CB, AO> WithLaunchContext<NodeBuilderWithComponents<RethFullAdapter<DB, T>, CB, AO>>
582547
where
583548
DB: Database + DatabaseMetrics + Clone + Unpin + 'static,
584549
T: NodeTypesWithEngine + NodeTypesForProvider,
585550
CB: NodeComponentsBuilder<RethFullAdapter<DB, T>>,
586551
AO: RethRpcAddOns<NodeAdapter<RethFullAdapter<DB, T>, CB::Components>>,
587552
EngineNodeLauncher: LaunchNode<NodeBuilderWithComponents<RethFullAdapter<DB, T>, CB, AO>>,
588-
LocalEngineNodeLauncher: LaunchNode<NodeBuilderWithComponents<RethFullAdapter<DB, T>, CB, AO>>,
589553
{
590554
/// Launches the node with the [`EngineNodeLauncher`] that sets up engine API consensus and rpc
591555
pub async fn launch(
592556
self,
593557
) -> eyre::Result<
594-
LaunchedNode<
595-
<EngineNodeLauncher as LaunchNode<
596-
NodeBuilderWithComponents<RethFullAdapter<DB, T>, CB, AO>,
597-
>>::Node,
598-
<LocalEngineNodeLauncher as LaunchNode<
599-
NodeBuilderWithComponents<RethFullAdapter<DB, T>, CB, AO>,
600-
>>::Node,
601-
>,
558+
<EngineNodeLauncher as LaunchNode<
559+
NodeBuilderWithComponents<RethFullAdapter<DB, T>, CB, AO>,
560+
>>::Node,
602561
> {
603562
let Self { builder, task_executor } = self;
604563

@@ -610,21 +569,9 @@ where
610569
builder.config.engine.state_root_task_compare_updates,
611570
);
612571

613-
if builder.config.dev.dev {
614-
let launcher = LocalEngineNodeLauncher::new(
615-
task_executor,
616-
builder.config.datadir(),
617-
engine_tree_config,
618-
);
619-
Ok(LaunchedNode::Local(builder.launch_with(launcher).await?))
620-
} else {
621-
let launcher = EngineNodeLauncher::new(
622-
task_executor,
623-
builder.config.datadir(),
624-
engine_tree_config,
625-
);
626-
Ok(LaunchedNode::Engine(builder.launch_with(launcher).await?))
627-
}
572+
let launcher =
573+
EngineNodeLauncher::new(task_executor, builder.config.datadir(), engine_tree_config);
574+
builder.launch_with(launcher).await
628575
}
629576
}
630577

0 commit comments

Comments
 (0)