mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 02:49:55 +00:00
feat: Add testnet chainspec
This commit is contained in:
@ -34,12 +34,10 @@ pub static HL_HARDFORKS: LazyLock<ChainHardforks> = LazyLock::new(|| {
|
||||
])
|
||||
});
|
||||
|
||||
/// The Hyperliqiud Mainnet spec
|
||||
pub fn hl_mainnet() -> ChainSpec {
|
||||
pub fn hl_chainspec(chain: Chain, genesis: &'static str) -> ChainSpec {
|
||||
ChainSpec {
|
||||
chain: Chain::from_named(NamedChain::Hyperliquid),
|
||||
genesis: serde_json::from_str(include_str!("genesis.json"))
|
||||
.expect("Can't deserialize Hyperliquid Mainnet genesis json"),
|
||||
chain,
|
||||
genesis: serde_json::from_str(genesis).expect("Can't deserialize Hyperliquid genesis json"),
|
||||
genesis_header: empty_genesis_header(),
|
||||
paris_block_and_final_difficulty: Some((0, U256::from(0))),
|
||||
hardforks: HL_HARDFORKS.clone(),
|
||||
@ -48,6 +46,18 @@ pub fn hl_mainnet() -> ChainSpec {
|
||||
}
|
||||
}
|
||||
|
||||
/// The Hyperliqiud Mainnet spec
|
||||
pub fn hl_mainnet() -> ChainSpec {
|
||||
hl_chainspec(Chain::from_named(NamedChain::Hyperliquid), include_str!("genesis.json"))
|
||||
}
|
||||
|
||||
/// The Hyperliqiud Testnet spec
|
||||
pub fn hl_testnet() -> ChainSpec {
|
||||
// Note: Testnet sync starts from snapshotted state [1] instead of genesis block.
|
||||
// So the `alloc` field is not used, which makes it fine to reuse mainnet genesis file.
|
||||
hl_chainspec(Chain::from_id_unchecked(998), include_str!("genesis.json"))
|
||||
}
|
||||
|
||||
/// Empty genesis header for Hyperliquid Mainnet.
|
||||
///
|
||||
/// The exact value is not known per se, but the parent hash of block 1 is known to be
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
use crate::chainspec::HlChainSpec;
|
||||
use crate::chainspec::{hl::hl_testnet, HlChainSpec};
|
||||
|
||||
use super::hl::hl_mainnet;
|
||||
use reth_cli::chainspec::ChainSpecParser;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// Chains supported by HyperEVM. First value should be used as the default.
|
||||
pub const SUPPORTED_CHAINS: &[&str] = &["mainnet"];
|
||||
pub const SUPPORTED_CHAINS: &[&str] = &["mainnet", "testnet"];
|
||||
|
||||
/// Hyperliquid chain specification parser.
|
||||
#[derive(Debug, Clone, Default)]
|
||||
@ -27,6 +27,7 @@ impl ChainSpecParser for HlChainSpecParser {
|
||||
pub fn chain_value_parser(s: &str) -> eyre::Result<Arc<HlChainSpec>> {
|
||||
match s {
|
||||
"mainnet" => Ok(Arc::new(HlChainSpec { inner: hl_mainnet() })),
|
||||
"testnet" => Ok(Arc::new(HlChainSpec { inner: hl_testnet() })),
|
||||
_ => Err(eyre::eyre!("Unsupported chain: {}", s)),
|
||||
}
|
||||
}
|
||||
|
||||
@ -50,6 +50,7 @@ pub async fn start_pseudo_peer(
|
||||
|
||||
// Create network manager
|
||||
let (mut network, start_tx) = create_network_manager::<BlockSourceBoxed>(
|
||||
(*chain_spec).clone(),
|
||||
destination_peer,
|
||||
block_source.clone(),
|
||||
blockhash_cache.clone(),
|
||||
|
||||
@ -19,6 +19,7 @@ pub struct NetworkBuilder {
|
||||
boot_nodes: Vec<TrustedPeer>,
|
||||
discovery_port: u16,
|
||||
listener_port: u16,
|
||||
chain_spec: HlChainSpec,
|
||||
}
|
||||
|
||||
impl Default for NetworkBuilder {
|
||||
@ -29,6 +30,7 @@ impl Default for NetworkBuilder {
|
||||
boot_nodes: vec![],
|
||||
discovery_port: 0,
|
||||
listener_port: 0,
|
||||
chain_spec: HlChainSpec::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -55,6 +57,11 @@ impl NetworkBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_chain_spec(mut self, chain_spec: HlChainSpec) -> Self {
|
||||
self.chain_spec = chain_spec;
|
||||
self
|
||||
}
|
||||
|
||||
pub async fn build<BS>(
|
||||
self,
|
||||
block_source: Arc<Box<dyn super::sources::BlockSource>>,
|
||||
@ -80,12 +87,14 @@ impl NetworkBuilder {
|
||||
}
|
||||
|
||||
pub async fn create_network_manager<BS>(
|
||||
chain_spec: HlChainSpec,
|
||||
destination_peer: String,
|
||||
block_source: Arc<Box<dyn super::sources::BlockSource>>,
|
||||
blockhash_cache: BlockHashCache,
|
||||
) -> eyre::Result<(NetworkManager<HlNetworkPrimitives>, mpsc::Sender<()>)> {
|
||||
NetworkBuilder::default()
|
||||
.with_boot_nodes(vec![TrustedPeer::from_str(&destination_peer).unwrap()])
|
||||
.with_chain_spec(chain_spec)
|
||||
.build::<BS>(block_source, blockhash_cache)
|
||||
.await
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user