mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
feat: use chain specific bootnodes (#1826)
This commit is contained in:
@ -2,10 +2,9 @@
|
||||
|
||||
use crate::dirs::{KnownPeersPath, PlatformPath};
|
||||
use clap::Args;
|
||||
use reth_discv4::bootnodes::mainnet_nodes;
|
||||
use reth_net_nat::NatResolver;
|
||||
use reth_network::NetworkConfigBuilder;
|
||||
use reth_primitives::{ChainSpec, NodeRecord};
|
||||
use reth_primitives::{mainnet_nodes, ChainSpec, NodeRecord};
|
||||
use reth_staged_sync::Config;
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
|
||||
@ -55,9 +54,11 @@ impl NetworkArgs {
|
||||
config: &Config,
|
||||
chain_spec: Arc<ChainSpec>,
|
||||
) -> NetworkConfigBuilder {
|
||||
let chain_bootnodes = chain_spec.chain.bootnodes().unwrap_or_else(mainnet_nodes);
|
||||
|
||||
let network_config_builder = config
|
||||
.network_config(self.nat, self.persistent_peers_file())
|
||||
.boot_nodes(self.bootnodes.clone().unwrap_or_else(mainnet_nodes))
|
||||
.boot_nodes(self.bootnodes.clone().unwrap_or(chain_bootnodes))
|
||||
.chain_spec(chain_spec);
|
||||
|
||||
self.discovery.apply_to_builder(network_config_builder)
|
||||
|
||||
@ -1,57 +0,0 @@
|
||||
//! Various known bootstrap nodes for networks
|
||||
|
||||
// <https://github.com/ledgerwatch/erigon/blob/610e648dc43ec8cd6563313e28f06f534a9091b3/params/bootnodes.go>
|
||||
|
||||
use reth_primitives::NodeRecord;
|
||||
|
||||
/// Ethereum Foundation Go Bootnodes
|
||||
pub static MAINNET_BOOTNODES : [&str; 4] = [
|
||||
"enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303", // bootnode-aws-ap-southeast-1-001
|
||||
"enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303", // bootnode-aws-us-east-1-001
|
||||
"enode://2b252ab6a1d0f971d9722cb839a42cb81db019ba44c08754628ab4a823487071b5695317c8ccd085219c3a03af063495b2f1da8d18218da2d6a82981b45e6ffc@65.108.70.101:30303", // bootnode-hetzner-hel
|
||||
"enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn
|
||||
];
|
||||
|
||||
/// SEPOLIA BOOTNODES
|
||||
pub static SEPOLIA_BOOTNODES : [&str; 2] = [
|
||||
// geth
|
||||
"enode://9246d00bc8fd1742e5ad2428b80fc4dc45d786283e05ef6edbd9002cbc335d40998444732fbe921cb88e1d2c73d1b1de53bae6a2237996e9bfe14f871baf7066@18.168.182.86:30303",
|
||||
// besu
|
||||
"enode://ec66ddcf1a974950bd4c782789a7e04f8aa7110a72569b6e65fcd51e937e74eed303b1ea734e4d19cfaec9fbff9b6ee65bf31dcb50ba79acce9dd63a6aca61c7@52.14.151.177:30303",
|
||||
];
|
||||
|
||||
/// GOERLI bootnodes
|
||||
pub static GOERLI_BOOTNODES : [&str; 7] = [
|
||||
// Upstream bootnodes
|
||||
"enode://011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a@51.141.78.53:30303",
|
||||
"enode://176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b@13.93.54.137:30303",
|
||||
"enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313",
|
||||
"enode://b5948a2d3e9d486c4d75bf32713221c2bd6cf86463302339299bd227dc2e276cd5a1c7ca4f43a0e9122fe9af884efed563bd2a1fd28661f3b5f5ad7bf1de5949@18.218.250.66:30303",
|
||||
|
||||
// Ethereum Foundation bootnode
|
||||
"enode://a61215641fb8714a373c80edbfa0ea8878243193f57c96eeb44d0bc019ef295abd4e044fd619bfc4c59731a73fb79afe84e9ab6da0c743ceb479cbb6d263fa91@3.11.147.67:30303",
|
||||
|
||||
// Goerli Initiative bootnodes
|
||||
"enode://d4f764a48ec2a8ecf883735776fdefe0a3949eb0ca476bd7bc8d0954a9defe8fea15ae5da7d40b5d2d59ce9524a99daedadf6da6283fca492cc80b53689fb3b3@46.4.99.122:32109",
|
||||
"enode://d2b720352e8216c9efc470091aa91ddafc53e222b32780f505c817ceef69e01d5b0b0797b69db254c586f493872352f5a022b4d8479a00fc92ec55f9ad46a27e@88.99.70.182:30303",
|
||||
];
|
||||
|
||||
/// Returns parsed mainnet nodes
|
||||
pub fn mainnet_nodes() -> Vec<NodeRecord> {
|
||||
parse_nodes(&MAINNET_BOOTNODES[..])
|
||||
}
|
||||
|
||||
/// Returns parsed goerli nodes
|
||||
pub fn goerli_nodes() -> Vec<NodeRecord> {
|
||||
parse_nodes(&GOERLI_BOOTNODES[..])
|
||||
}
|
||||
|
||||
/// Returns parsed sepolia nodes
|
||||
pub fn sepolia_nodes() -> Vec<NodeRecord> {
|
||||
parse_nodes(&SEPOLIA_BOOTNODES[..])
|
||||
}
|
||||
|
||||
/// Parses all the nodes
|
||||
pub fn parse_nodes(nodes: impl IntoIterator<Item = impl AsRef<str>>) -> Vec<NodeRecord> {
|
||||
nodes.into_iter().map(|s| s.as_ref().parse().unwrap()).collect()
|
||||
}
|
||||
@ -56,7 +56,6 @@ use tokio::{
|
||||
use tokio_stream::{wrappers::ReceiverStream, Stream, StreamExt};
|
||||
use tracing::{debug, info, trace, warn};
|
||||
|
||||
pub mod bootnodes;
|
||||
pub mod error;
|
||||
mod proto;
|
||||
|
||||
@ -1942,12 +1941,9 @@ pub enum DiscoveryUpdate {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::{
|
||||
bootnodes::mainnet_nodes,
|
||||
test_utils::{create_discv4, create_discv4_with_config, rng_endpoint, rng_record},
|
||||
};
|
||||
use crate::test_utils::{create_discv4, create_discv4_with_config, rng_endpoint, rng_record};
|
||||
use rand::{thread_rng, Rng};
|
||||
use reth_primitives::{hex_literal::hex, ForkHash};
|
||||
use reth_primitives::{hex_literal::hex, mainnet_nodes, ForkHash};
|
||||
use std::{future::poll_fn, net::Ipv4Addr};
|
||||
|
||||
#[test]
|
||||
|
||||
@ -21,7 +21,6 @@ use std::{
|
||||
/// reexports for convenience
|
||||
#[doc(hidden)]
|
||||
mod __reexport {
|
||||
pub use reth_discv4::bootnodes::*;
|
||||
pub use secp256k1::SecretKey;
|
||||
}
|
||||
pub use __reexport::*;
|
||||
|
||||
@ -55,9 +55,10 @@
|
||||
//!
|
||||
//! ```
|
||||
//! # async fn launch() {
|
||||
//! use reth_network::config::{rng_secret_key, mainnet_nodes};
|
||||
//! use reth_network::config::rng_secret_key;
|
||||
//! use reth_network::{NetworkConfig, NetworkManager};
|
||||
//! use reth_provider::test_utils::NoopProvider;
|
||||
//! use reth_primitives::mainnet_nodes;
|
||||
//!
|
||||
//! // This block provider implementation is used for testing purposes.
|
||||
//! let client = NoopProvider::default();
|
||||
@ -84,7 +85,7 @@
|
||||
//! ```
|
||||
//! use reth_provider::test_utils::NoopProvider;
|
||||
//! use reth_transaction_pool::TransactionPool;
|
||||
//! use reth_discv4::bootnodes::mainnet_nodes;
|
||||
//! use reth_primitives::mainnet_nodes;
|
||||
//! use reth_network::config::rng_secret_key;
|
||||
//! use reth_network::{NetworkConfig, NetworkManager};
|
||||
//! async fn launch<Pool: TransactionPool>(pool: Pool) {
|
||||
|
||||
@ -240,7 +240,7 @@ where
|
||||
/// ```
|
||||
/// use reth_provider::test_utils::NoopProvider;
|
||||
/// use reth_transaction_pool::TransactionPool;
|
||||
/// use reth_discv4::bootnodes::mainnet_nodes;
|
||||
/// use reth_primitives::mainnet_nodes;
|
||||
/// use reth_network::config::rng_secret_key;
|
||||
/// use reth_network::{NetworkConfig, NetworkManager};
|
||||
/// async fn launch<Pool: TransactionPool>(pool: Pool) {
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
use ethers_core::utils::Geth;
|
||||
use ethers_providers::{Http, Middleware, Provider};
|
||||
use futures::StreamExt;
|
||||
use reth_discv4::{bootnodes::mainnet_nodes, Discv4Config};
|
||||
use reth_discv4::Discv4Config;
|
||||
use reth_eth_wire::DisconnectReason;
|
||||
use reth_interfaces::{
|
||||
p2p::headers::client::{HeadersClient, HeadersRequest},
|
||||
@ -17,7 +17,7 @@ use reth_network::{
|
||||
NetworkConfigBuilder, NetworkEvent, NetworkManager, PeersConfig,
|
||||
};
|
||||
use reth_network_api::{NetworkInfo, Peers, PeersInfo};
|
||||
use reth_primitives::{HeadersDirection, NodeRecord, PeerId};
|
||||
use reth_primitives::{mainnet_nodes, HeadersDirection, NodeRecord, PeerId};
|
||||
use reth_provider::test_utils::NoopProvider;
|
||||
use reth_transaction_pool::test_utils::testing_pool;
|
||||
use secp256k1::SecretKey;
|
||||
|
||||
@ -1,4 +1,7 @@
|
||||
use crate::U256;
|
||||
use crate::{
|
||||
net::{goerli_nodes, mainnet_nodes, sepolia_nodes},
|
||||
NodeRecord, U256,
|
||||
};
|
||||
use ethers_core::types::U64;
|
||||
use reth_codecs::add_arbitrary_tests;
|
||||
use reth_rlp::{Decodable, Encodable};
|
||||
@ -72,6 +75,17 @@ impl Chain {
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
/// Returns bootnodes for the given chain.
|
||||
pub fn bootnodes(self) -> Option<Vec<NodeRecord>> {
|
||||
use ethers_core::types::Chain::*;
|
||||
match self.try_into().ok()? {
|
||||
Mainnet => Some(mainnet_nodes()),
|
||||
Goerli => Some(goerli_nodes()),
|
||||
Sepolia => Some(sepolia_nodes()),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Chain {
|
||||
|
||||
@ -57,7 +57,10 @@ pub use header::{Head, Header, HeadersDirection, SealedHeader};
|
||||
pub use hex_bytes::Bytes;
|
||||
pub use integer_list::IntegerList;
|
||||
pub use log::Log;
|
||||
pub use net::NodeRecord;
|
||||
pub use net::{
|
||||
goerli_nodes, mainnet_nodes, sepolia_nodes, NodeRecord, GOERLI_BOOTNODES, MAINNET_BOOTNODES,
|
||||
SEPOLIA_BOOTNODES,
|
||||
};
|
||||
pub use peer::{PeerId, WithPeerId};
|
||||
pub use receipt::Receipt;
|
||||
pub use revm_primitives::JumpMap;
|
||||
|
||||
@ -115,6 +115,60 @@ impl fmt::Display for NodeRecord {
|
||||
}
|
||||
}
|
||||
|
||||
// <https://github.com/ledgerwatch/erigon/blob/610e648dc43ec8cd6563313e28f06f534a9091b3/params/bootnodes.go>
|
||||
|
||||
/// Ethereum Foundation Go Bootnodes
|
||||
pub static MAINNET_BOOTNODES : [&str; 4] = [
|
||||
"enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303", // bootnode-aws-ap-southeast-1-001
|
||||
"enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303", // bootnode-aws-us-east-1-001
|
||||
"enode://2b252ab6a1d0f971d9722cb839a42cb81db019ba44c08754628ab4a823487071b5695317c8ccd085219c3a03af063495b2f1da8d18218da2d6a82981b45e6ffc@65.108.70.101:30303", // bootnode-hetzner-hel
|
||||
"enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", // bootnode-hetzner-fsn
|
||||
];
|
||||
|
||||
/// SEPOLIA BOOTNODES
|
||||
pub static SEPOLIA_BOOTNODES : [&str; 2] = [
|
||||
// geth
|
||||
"enode://9246d00bc8fd1742e5ad2428b80fc4dc45d786283e05ef6edbd9002cbc335d40998444732fbe921cb88e1d2c73d1b1de53bae6a2237996e9bfe14f871baf7066@18.168.182.86:30303",
|
||||
// besu
|
||||
"enode://ec66ddcf1a974950bd4c782789a7e04f8aa7110a72569b6e65fcd51e937e74eed303b1ea734e4d19cfaec9fbff9b6ee65bf31dcb50ba79acce9dd63a6aca61c7@52.14.151.177:30303",
|
||||
];
|
||||
|
||||
/// GOERLI bootnodes
|
||||
pub static GOERLI_BOOTNODES : [&str; 7] = [
|
||||
// Upstream bootnodes
|
||||
"enode://011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a@51.141.78.53:30303",
|
||||
"enode://176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b@13.93.54.137:30303",
|
||||
"enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313",
|
||||
"enode://b5948a2d3e9d486c4d75bf32713221c2bd6cf86463302339299bd227dc2e276cd5a1c7ca4f43a0e9122fe9af884efed563bd2a1fd28661f3b5f5ad7bf1de5949@18.218.250.66:30303",
|
||||
|
||||
// Ethereum Foundation bootnode
|
||||
"enode://a61215641fb8714a373c80edbfa0ea8878243193f57c96eeb44d0bc019ef295abd4e044fd619bfc4c59731a73fb79afe84e9ab6da0c743ceb479cbb6d263fa91@3.11.147.67:30303",
|
||||
|
||||
// Goerli Initiative bootnodes
|
||||
"enode://d4f764a48ec2a8ecf883735776fdefe0a3949eb0ca476bd7bc8d0954a9defe8fea15ae5da7d40b5d2d59ce9524a99daedadf6da6283fca492cc80b53689fb3b3@46.4.99.122:32109",
|
||||
"enode://d2b720352e8216c9efc470091aa91ddafc53e222b32780f505c817ceef69e01d5b0b0797b69db254c586f493872352f5a022b4d8479a00fc92ec55f9ad46a27e@88.99.70.182:30303",
|
||||
];
|
||||
|
||||
/// Returns parsed mainnet nodes
|
||||
pub fn mainnet_nodes() -> Vec<NodeRecord> {
|
||||
parse_nodes(&MAINNET_BOOTNODES[..])
|
||||
}
|
||||
|
||||
/// Returns parsed goerli nodes
|
||||
pub fn goerli_nodes() -> Vec<NodeRecord> {
|
||||
parse_nodes(&GOERLI_BOOTNODES[..])
|
||||
}
|
||||
|
||||
/// Returns parsed sepolia nodes
|
||||
pub fn sepolia_nodes() -> Vec<NodeRecord> {
|
||||
parse_nodes(&SEPOLIA_BOOTNODES[..])
|
||||
}
|
||||
|
||||
/// Parses all the nodes
|
||||
fn parse_nodes(nodes: impl IntoIterator<Item = impl AsRef<str>>) -> Vec<NodeRecord> {
|
||||
nodes.into_iter().map(|s| s.as_ref().parse().unwrap()).collect()
|
||||
}
|
||||
|
||||
/// Possible error types when parsing a `NodeRecord`
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum NodeRecordParseError {
|
||||
|
||||
Reference in New Issue
Block a user