refactor: Move official RPC url to HlChainSpec

This commit is contained in:
sprites0
2025-07-05 03:07:27 +00:00
parent bb8feaeb86
commit 450e228a8f
4 changed files with 41 additions and 7 deletions

View File

@ -137,3 +137,16 @@ impl HlHardforks for Arc<HlChainSpec> {
self.as_ref().hl_fork_activation(fork) self.as_ref().hl_fork_activation(fork)
} }
} }
impl HlChainSpec {
pub const MAINNET_RPC_URL: &str = "https://rpc.hyperliquid.xyz/evm";
pub const TESTNET_RPC_URL: &str = "https://rpc.hyperliquid-testnet.xyz/evm";
pub fn official_rpc_url(&self) -> &'static str {
match self.inner.chain().id() {
999 => Self::MAINNET_RPC_URL,
998 => Self::TESTNET_RPC_URL,
_ => unreachable!("Unreachable since ChainSpecParser won't return other chains"),
}
}
}

View File

@ -226,11 +226,18 @@ where
let network = NetworkManager::builder(network_config).await?; let network = NetworkManager::builder(network_config).await?;
let handle = ctx.start_network(network, pool); let handle = ctx.start_network(network, pool);
let local_node_record = handle.local_node_record(); let local_node_record = handle.local_node_record();
let chain_spec = ctx.chain_spec();
info!(target: "reth::cli", enode=%local_node_record, "P2P networking initialized"); info!(target: "reth::cli", enode=%local_node_record, "P2P networking initialized");
ctx.task_executor().spawn_critical("pseudo peer", async move { ctx.task_executor().spawn_critical("pseudo peer", async move {
let block_source = block_source_config.create_cached_block_source().await; let block_source = block_source_config.create_cached_block_source().await;
start_pseudo_peer(local_node_record.to_string(), block_source).await.unwrap(); start_pseudo_peer(
chain_spec,
local_node_record.to_string(),
block_source,
)
.await
.unwrap();
}); });
Ok(handle) Ok(handle)

View File

@ -12,6 +12,8 @@ pub mod service;
pub mod sources; pub mod sources;
pub mod utils; pub mod utils;
use std::sync::Arc;
pub use cli::*; pub use cli::*;
pub use config::*; pub use config::*;
pub use error::*; pub use error::*;
@ -35,10 +37,12 @@ pub mod prelude {
}; };
} }
use crate::chainspec::HlChainSpec;
use reth_network::{NetworkEvent, NetworkEventListenerProvider}; use reth_network::{NetworkEvent, NetworkEventListenerProvider};
/// Main function that starts the network manager and processes eth requests /// Main function that starts the network manager and processes eth requests
pub async fn start_pseudo_peer( pub async fn start_pseudo_peer(
chain_spec: Arc<HlChainSpec>,
destination_peer: String, destination_peer: String,
block_source: BlockSourceBoxed, block_source: BlockSourceBoxed,
) -> eyre::Result<()> { ) -> eyre::Result<()> {
@ -63,7 +67,7 @@ pub async fn start_pseudo_peer(
let mut network_events = network_handle.event_listener(); let mut network_events = network_handle.event_listener();
info!("Starting network manager..."); info!("Starting network manager...");
let mut service = PseudoPeer::new(block_source, blockhash_cache.clone()); let mut service = PseudoPeer::new(chain_spec, block_source, blockhash_cache.clone());
tokio::spawn(network); tokio::spawn(network);
let mut first = true; let mut first = true;

View File

@ -1,7 +1,10 @@
use super::{sources::BlockSource, utils::LruBiMap}; use super::{sources::BlockSource, utils::LruBiMap};
use crate::node::{ use crate::{
chainspec::HlChainSpec,
node::{
network::{HlNetworkPrimitives, HlNewBlock}, network::{HlNetworkPrimitives, HlNewBlock},
types::BlockAndReceipts, types::BlockAndReceipts,
},
}; };
use alloy_eips::HashOrNumber; use alloy_eips::HashOrNumber;
use alloy_primitives::{B256, U128}; use alloy_primitives::{B256, U128};
@ -116,6 +119,7 @@ impl BlockImport<HlNewBlock> for BlockPoller {
/// A pseudo peer that can process eth requests and feed blocks to reth /// A pseudo peer that can process eth requests and feed blocks to reth
pub struct PseudoPeer<BS: BlockSource> { pub struct PseudoPeer<BS: BlockSource> {
chain_spec: Arc<HlChainSpec>,
block_source: BS, block_source: BS,
blockhash_cache: BlockHashCache, blockhash_cache: BlockHashCache,
warm_cache_size: u64, warm_cache_size: u64,
@ -127,8 +131,13 @@ pub struct PseudoPeer<BS: BlockSource> {
} }
impl<BS: BlockSource> PseudoPeer<BS> { impl<BS: BlockSource> PseudoPeer<BS> {
pub fn new(block_source: BS, blockhash_cache: BlockHashCache) -> Self { pub fn new(
chain_spec: Arc<HlChainSpec>,
block_source: BS,
blockhash_cache: BlockHashCache,
) -> Self {
Self { Self {
chain_spec,
block_source, block_source,
blockhash_cache, blockhash_cache,
warm_cache_size: 1000, // reth default chunk size for GetBlockBodies warm_cache_size: 1000, // reth default chunk size for GetBlockBodies
@ -244,7 +253,8 @@ impl<BS: BlockSource> PseudoPeer<BS> {
use jsonrpsee_core::client::ClientT; use jsonrpsee_core::client::ClientT;
debug!("Fallback to official RPC: {hash:?}"); debug!("Fallback to official RPC: {hash:?}");
let client = HttpClientBuilder::default().build("https://rpc.hyperliquid.xyz/evm").unwrap(); let client =
HttpClientBuilder::default().build(self.chain_spec.official_rpc_url()).unwrap();
let target_block: Block = client.request("eth_getBlockByHash", (hash, false)).await?; let target_block: Block = client.request("eth_getBlockByHash", (hash, false)).await?;
debug!("From official RPC: {:?} for {hash:?}", target_block.header.number); debug!("From official RPC: {:?} for {hash:?}", target_block.header.number);