feat: Add --hl-node-compliant

This commit is contained in:
sprites0
2025-07-04 23:19:32 +00:00
parent 77320a2b03
commit 7918101d65
4 changed files with 40 additions and 6 deletions

View File

@ -2,6 +2,7 @@ use clap::Parser;
use reth::builder::NodeHandle; use reth::builder::NodeHandle;
use reth_hl::{ use reth_hl::{
chainspec::parser::HlChainSpecParser, chainspec::parser::HlChainSpecParser,
hl_node_compliance::install_hl_node_compliance,
node::{ node::{
cli::{Cli, HlNodeArgs}, cli::{Cli, HlNodeArgs},
storage::tables::Tables, storage::tables::Tables,
@ -26,10 +27,11 @@ fn main() -> eyre::Result<()> {
Cli::<HlChainSpecParser, HlNodeArgs>::parse().run(|builder, ext| async move { Cli::<HlChainSpecParser, HlNodeArgs>::parse().run(|builder, ext| async move {
builder.builder.database.create_tables_for::<Tables>()?; builder.builder.database.create_tables_for::<Tables>()?;
let (node, engine_handle_tx) = HlNode::new(ext.block_source_args.parse().await?); let (node, engine_handle_tx) =
HlNode::new(ext.block_source_args.parse().await?, ext.hl_node_compliant);
let NodeHandle { node, node_exit_future: exit_future } = builder let NodeHandle { node, node_exit_future: exit_future } = builder
.node(node) .node(node)
.extend_rpc_modules(|ctx| { .extend_rpc_modules(move |ctx| {
let upstream_rpc_url = ext.upstream_rpc_url; let upstream_rpc_url = ext.upstream_rpc_url;
if let Some(upstream_rpc_url) = upstream_rpc_url { if let Some(upstream_rpc_url) = upstream_rpc_url {
ctx.modules.replace_configured( ctx.modules.replace_configured(
@ -38,6 +40,11 @@ fn main() -> eyre::Result<()> {
info!("Transaction forwarding enabled"); info!("Transaction forwarding enabled");
} }
if ext.hl_node_compliant {
install_hl_node_compliance(ctx)?;
}
Ok(()) Ok(())
}) })
.launch() .launch()

View File

@ -34,6 +34,9 @@ pub struct HlNodeArgs {
#[arg(long, env = "UPSTREAM_RPC_URL")] #[arg(long, env = "UPSTREAM_RPC_URL")]
pub upstream_rpc_url: Option<String>, pub upstream_rpc_url: Option<String>,
#[arg(long, env = "HL_NODE_COMPLIANT")]
pub hl_node_compliant: bool,
} }
/// The main reth_hl cli interface. /// The main reth_hl cli interface.

View File

@ -51,14 +51,23 @@ pub struct HlNode {
engine_handle_rx: engine_handle_rx:
Arc<Mutex<Option<oneshot::Receiver<BeaconConsensusEngineHandle<HlPayloadTypes>>>>>, Arc<Mutex<Option<oneshot::Receiver<BeaconConsensusEngineHandle<HlPayloadTypes>>>>>,
block_source_config: BlockSourceConfig, block_source_config: BlockSourceConfig,
hl_node_compliant: bool,
} }
impl HlNode { impl HlNode {
pub fn new( pub fn new(
block_source_config: BlockSourceConfig, block_source_config: BlockSourceConfig,
hl_node_compliant: bool,
) -> (Self, oneshot::Sender<BeaconConsensusEngineHandle<HlPayloadTypes>>) { ) -> (Self, oneshot::Sender<BeaconConsensusEngineHandle<HlPayloadTypes>>) {
let (tx, rx) = oneshot::channel(); let (tx, rx) = oneshot::channel();
(Self { engine_handle_rx: Arc::new(Mutex::new(Some(rx))), block_source_config }, tx) (
Self {
engine_handle_rx: Arc::new(Mutex::new(Some(rx))),
block_source_config,
hl_node_compliant,
},
tx,
)
} }
} }
@ -121,7 +130,12 @@ where
} }
fn add_ons(&self) -> Self::AddOns { fn add_ons(&self) -> Self::AddOns {
HlNodeAddOns::default() HlNodeAddOns::new(
HlEthApiBuilder { hl_node_compliant: self.hl_node_compliant },
Default::default(),
Default::default(),
Default::default(),
)
} }
} }

View File

@ -250,9 +250,18 @@ where
} }
/// Builds [`HlEthApi`] for HL. /// Builds [`HlEthApi`] for HL.
#[derive(Debug, Default)] #[derive(Debug)]
#[non_exhaustive] #[non_exhaustive]
pub struct HlEthApiBuilder; pub struct HlEthApiBuilder {
/// Whether the node is in HL node compliant mode.
pub(crate) hl_node_compliant: bool,
}
impl Default for HlEthApiBuilder {
fn default() -> Self {
Self { hl_node_compliant: false }
}
}
impl<N> EthApiBuilder<N> for HlEthApiBuilder impl<N> EthApiBuilder<N> for HlEthApiBuilder
where where
@ -280,6 +289,7 @@ where
Ok(HlEthApi { Ok(HlEthApi {
inner: Arc::new(HlEthApiInner { eth_api }), inner: Arc::new(HlEthApiInner { eth_api }),
tx_resp_builder: Default::default(), tx_resp_builder: Default::default(),
hl_node_compliant: self.hl_node_compliant,
}) })
} }
} }