mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59: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_chainspec(chain: Chain, genesis: &'static str) -> ChainSpec {
|
||||||
pub fn hl_mainnet() -> ChainSpec {
|
|
||||||
ChainSpec {
|
ChainSpec {
|
||||||
chain: Chain::from_named(NamedChain::Hyperliquid),
|
chain,
|
||||||
genesis: serde_json::from_str(include_str!("genesis.json"))
|
genesis: serde_json::from_str(genesis).expect("Can't deserialize Hyperliquid genesis json"),
|
||||||
.expect("Can't deserialize Hyperliquid Mainnet genesis json"),
|
|
||||||
genesis_header: empty_genesis_header(),
|
genesis_header: empty_genesis_header(),
|
||||||
paris_block_and_final_difficulty: Some((0, U256::from(0))),
|
paris_block_and_final_difficulty: Some((0, U256::from(0))),
|
||||||
hardforks: HL_HARDFORKS.clone(),
|
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.
|
/// 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
|
/// 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 super::hl::hl_mainnet;
|
||||||
use reth_cli::chainspec::ChainSpecParser;
|
use reth_cli::chainspec::ChainSpecParser;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// Chains supported by HyperEVM. First value should be used as the default.
|
/// 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.
|
/// Hyperliquid chain specification parser.
|
||||||
#[derive(Debug, Clone, Default)]
|
#[derive(Debug, Clone, Default)]
|
||||||
@ -27,6 +27,7 @@ impl ChainSpecParser for HlChainSpecParser {
|
|||||||
pub fn chain_value_parser(s: &str) -> eyre::Result<Arc<HlChainSpec>> {
|
pub fn chain_value_parser(s: &str) -> eyre::Result<Arc<HlChainSpec>> {
|
||||||
match s {
|
match s {
|
||||||
"mainnet" => Ok(Arc::new(HlChainSpec { inner: hl_mainnet() })),
|
"mainnet" => Ok(Arc::new(HlChainSpec { inner: hl_mainnet() })),
|
||||||
|
"testnet" => Ok(Arc::new(HlChainSpec { inner: hl_testnet() })),
|
||||||
_ => Err(eyre::eyre!("Unsupported chain: {}", s)),
|
_ => Err(eyre::eyre!("Unsupported chain: {}", s)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,6 +50,7 @@ pub async fn start_pseudo_peer(
|
|||||||
|
|
||||||
// Create network manager
|
// Create network manager
|
||||||
let (mut network, start_tx) = create_network_manager::<BlockSourceBoxed>(
|
let (mut network, start_tx) = create_network_manager::<BlockSourceBoxed>(
|
||||||
|
(*chain_spec).clone(),
|
||||||
destination_peer,
|
destination_peer,
|
||||||
block_source.clone(),
|
block_source.clone(),
|
||||||
blockhash_cache.clone(),
|
blockhash_cache.clone(),
|
||||||
|
|||||||
@ -19,6 +19,7 @@ pub struct NetworkBuilder {
|
|||||||
boot_nodes: Vec<TrustedPeer>,
|
boot_nodes: Vec<TrustedPeer>,
|
||||||
discovery_port: u16,
|
discovery_port: u16,
|
||||||
listener_port: u16,
|
listener_port: u16,
|
||||||
|
chain_spec: HlChainSpec,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for NetworkBuilder {
|
impl Default for NetworkBuilder {
|
||||||
@ -29,6 +30,7 @@ impl Default for NetworkBuilder {
|
|||||||
boot_nodes: vec![],
|
boot_nodes: vec![],
|
||||||
discovery_port: 0,
|
discovery_port: 0,
|
||||||
listener_port: 0,
|
listener_port: 0,
|
||||||
|
chain_spec: HlChainSpec::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,6 +57,11 @@ impl NetworkBuilder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_chain_spec(mut self, chain_spec: HlChainSpec) -> Self {
|
||||||
|
self.chain_spec = chain_spec;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn build<BS>(
|
pub async fn build<BS>(
|
||||||
self,
|
self,
|
||||||
block_source: Arc<Box<dyn super::sources::BlockSource>>,
|
block_source: Arc<Box<dyn super::sources::BlockSource>>,
|
||||||
@ -80,12 +87,14 @@ impl NetworkBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn create_network_manager<BS>(
|
pub async fn create_network_manager<BS>(
|
||||||
|
chain_spec: HlChainSpec,
|
||||||
destination_peer: String,
|
destination_peer: String,
|
||||||
block_source: Arc<Box<dyn super::sources::BlockSource>>,
|
block_source: Arc<Box<dyn super::sources::BlockSource>>,
|
||||||
blockhash_cache: BlockHashCache,
|
blockhash_cache: BlockHashCache,
|
||||||
) -> eyre::Result<(NetworkManager<HlNetworkPrimitives>, mpsc::Sender<()>)> {
|
) -> eyre::Result<(NetworkManager<HlNetworkPrimitives>, mpsc::Sender<()>)> {
|
||||||
NetworkBuilder::default()
|
NetworkBuilder::default()
|
||||||
.with_boot_nodes(vec![TrustedPeer::from_str(&destination_peer).unwrap()])
|
.with_boot_nodes(vec![TrustedPeer::from_str(&destination_peer).unwrap()])
|
||||||
|
.with_chain_spec(chain_spec)
|
||||||
.build::<BS>(block_source, blockhash_cache)
|
.build::<BS>(block_source, blockhash_cache)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user