From 7918101d65b8d6876a0ff3ad71097629e453d3e7 Mon Sep 17 00:00:00 2001 From: sprites0 <199826320+sprites0@users.noreply.github.com> Date: Fri, 4 Jul 2025 23:19:32 +0000 Subject: [PATCH] feat: Add --hl-node-compliant --- src/main.rs | 11 +++++++++-- src/node/cli.rs | 3 +++ src/node/mod.rs | 18 ++++++++++++++++-- src/node/rpc/mod.rs | 14 ++++++++++++-- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index 1f91537ec..8a31f6dbe 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use clap::Parser; use reth::builder::NodeHandle; use reth_hl::{ chainspec::parser::HlChainSpecParser, + hl_node_compliance::install_hl_node_compliance, node::{ cli::{Cli, HlNodeArgs}, storage::tables::Tables, @@ -26,10 +27,11 @@ fn main() -> eyre::Result<()> { Cli::::parse().run(|builder, ext| async move { builder.builder.database.create_tables_for::()?; - 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 .node(node) - .extend_rpc_modules(|ctx| { + .extend_rpc_modules(move |ctx| { let upstream_rpc_url = ext.upstream_rpc_url; if let Some(upstream_rpc_url) = upstream_rpc_url { ctx.modules.replace_configured( @@ -38,6 +40,11 @@ fn main() -> eyre::Result<()> { info!("Transaction forwarding enabled"); } + + if ext.hl_node_compliant { + install_hl_node_compliance(ctx)?; + } + Ok(()) }) .launch() diff --git a/src/node/cli.rs b/src/node/cli.rs index fc63a4ef2..48c0ecc70 100644 --- a/src/node/cli.rs +++ b/src/node/cli.rs @@ -34,6 +34,9 @@ pub struct HlNodeArgs { #[arg(long, env = "UPSTREAM_RPC_URL")] pub upstream_rpc_url: Option, + + #[arg(long, env = "HL_NODE_COMPLIANT")] + pub hl_node_compliant: bool, } /// The main reth_hl cli interface. diff --git a/src/node/mod.rs b/src/node/mod.rs index d59850870..535592cc9 100644 --- a/src/node/mod.rs +++ b/src/node/mod.rs @@ -51,14 +51,23 @@ pub struct HlNode { engine_handle_rx: Arc>>>>, block_source_config: BlockSourceConfig, + hl_node_compliant: bool, } impl HlNode { pub fn new( block_source_config: BlockSourceConfig, + hl_node_compliant: bool, ) -> (Self, oneshot::Sender>) { 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 { - HlNodeAddOns::default() + HlNodeAddOns::new( + HlEthApiBuilder { hl_node_compliant: self.hl_node_compliant }, + Default::default(), + Default::default(), + Default::default(), + ) } } diff --git a/src/node/rpc/mod.rs b/src/node/rpc/mod.rs index 42ffaf1f8..2c2a8c402 100644 --- a/src/node/rpc/mod.rs +++ b/src/node/rpc/mod.rs @@ -250,9 +250,18 @@ where } /// Builds [`HlEthApi`] for HL. -#[derive(Debug, Default)] +#[derive(Debug)] #[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 EthApiBuilder for HlEthApiBuilder where @@ -280,6 +289,7 @@ where Ok(HlEthApi { inner: Arc::new(HlEthApiInner { eth_api }), tx_resp_builder: Default::default(), + hl_node_compliant: self.hl_node_compliant, }) } }