mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
refactor: Move official RPC url to HlChainSpec
This commit is contained in:
@ -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"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user