mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
refactor(net): move node record constants to network-peers crate (#9161)
This commit is contained in:
3
Cargo.lock
generated
3
Cargo.lock
generated
@ -2725,6 +2725,7 @@ dependencies = [
|
|||||||
"reth-discv4",
|
"reth-discv4",
|
||||||
"reth-network",
|
"reth-network",
|
||||||
"reth-network-api",
|
"reth-network-api",
|
||||||
|
"reth-network-peers",
|
||||||
"reth-primitives",
|
"reth-primitives",
|
||||||
"reth-tracing",
|
"reth-tracing",
|
||||||
"secp256k1",
|
"secp256k1",
|
||||||
@ -6909,6 +6910,7 @@ dependencies = [
|
|||||||
"reth",
|
"reth",
|
||||||
"reth-chainspec",
|
"reth-chainspec",
|
||||||
"reth-db",
|
"reth-db",
|
||||||
|
"reth-network-peers",
|
||||||
"reth-node-builder",
|
"reth-node-builder",
|
||||||
"reth-payload-builder",
|
"reth-payload-builder",
|
||||||
"reth-primitives",
|
"reth-primitives",
|
||||||
@ -8109,6 +8111,7 @@ dependencies = [
|
|||||||
"reth-ipc",
|
"reth-ipc",
|
||||||
"reth-metrics",
|
"reth-metrics",
|
||||||
"reth-network-api",
|
"reth-network-api",
|
||||||
|
"reth-network-peers",
|
||||||
"reth-node-core",
|
"reth-node-core",
|
||||||
"reth-payload-builder",
|
"reth-payload-builder",
|
||||||
"reth-primitives",
|
"reth-primitives",
|
||||||
|
|||||||
@ -26,9 +26,6 @@ extern crate alloc;
|
|||||||
/// The chain info module.
|
/// The chain info module.
|
||||||
mod info;
|
mod info;
|
||||||
|
|
||||||
/// Network related constants
|
|
||||||
pub mod net;
|
|
||||||
|
|
||||||
/// The chain spec module.
|
/// The chain spec module.
|
||||||
mod spec;
|
mod spec;
|
||||||
|
|
||||||
|
|||||||
@ -1,250 +0,0 @@
|
|||||||
pub use reth_network_peers::{NodeRecord, NodeRecordParseError, TrustedPeer};
|
|
||||||
|
|
||||||
#[cfg(not(feature = "std"))]
|
|
||||||
use alloc::vec::Vec;
|
|
||||||
|
|
||||||
// Ethereum bootnodes come from <https://github.com/ledgerwatch/erigon/blob/devel/params/bootnodes.go>
|
|
||||||
// OP bootnodes come from <https://github.com/ethereum-optimism/op-geth/blob/optimism/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
|
|
||||||
];
|
|
||||||
|
|
||||||
/// Ethereum Foundation Sepolia Bootnodes
|
|
||||||
pub static SEPOLIA_BOOTNODES : [&str; 5] = [
|
|
||||||
"enode://4e5e92199ee224a01932a377160aa432f31d0b351f84ab413a8e0a42f4f36476f8fb1cbe914af0d9aef0d51665c214cf653c651c4bbd9d5550a934f241f1682b@138.197.51.181:30303", // sepolia-bootnode-1-nyc3
|
|
||||||
"enode://143e11fb766781d22d92a2e33f8f104cddae4411a122295ed1fdb6638de96a6ce65f5b7c964ba3763bba27961738fef7d3ecc739268f3e5e771fb4c87b6234ba@146.190.1.103:30303", // sepolia-bootnode-1-sfo3
|
|
||||||
"enode://8b61dc2d06c3f96fddcbebb0efb29d60d3598650275dc469c22229d3e5620369b0d3dedafd929835fe7f489618f19f456fe7c0df572bf2d914a9f4e006f783a9@170.64.250.88:30303", // sepolia-bootnode-1-syd1
|
|
||||||
"enode://10d62eff032205fcef19497f35ca8477bea0eadfff6d769a147e895d8b2b8f8ae6341630c645c30f5df6e67547c03494ced3d9c5764e8622a26587b083b028e8@139.59.49.206:30303", // sepolia-bootnode-1-blr1
|
|
||||||
"enode://9e9492e2e8836114cc75f5b929784f4f46c324ad01daf87d956f98b3b6c5fcba95524d6e5cf9861dc96a2c8a171ea7105bb554a197455058de185fa870970c7c@138.68.123.152:30303", // sepolia-bootnode-1-ams3
|
|
||||||
];
|
|
||||||
|
|
||||||
/// Görli 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",
|
|
||||||
];
|
|
||||||
|
|
||||||
/// Ethereum Foundation Holesky Bootnodes
|
|
||||||
pub static HOLESKY_BOOTNODES : [&str; 2] = [
|
|
||||||
"enode://ac906289e4b7f12df423d654c5a962b6ebe5b3a74cc9e06292a85221f9a64a6f1cfdd6b714ed6dacef51578f92b34c60ee91e9ede9c7f8fadc4d347326d95e2b@146.190.13.128:30303",
|
|
||||||
"enode://a3435a0155a3e837c02f5e7f5662a2f1fbc25b48e4dc232016e1c51b544cb5b4510ef633ea3278c0e970fa8ad8141e2d4d0f9f95456c537ff05fdf9b31c15072@178.128.136.233:30303",
|
|
||||||
];
|
|
||||||
|
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
/// OP stack mainnet boot nodes.
|
|
||||||
pub static OP_BOOTNODES: &[&str] = &[
|
|
||||||
// OP Labs
|
|
||||||
"enode://ca2774c3c401325850b2477fd7d0f27911efbf79b1e8b335066516e2bd8c4c9e0ba9696a94b1cb030a88eac582305ff55e905e64fb77fe0edcd70a4e5296d3ec@34.65.175.185:30305",
|
|
||||||
"enode://dd751a9ef8912be1bfa7a5e34e2c3785cc5253110bd929f385e07ba7ac19929fb0e0c5d93f77827291f4da02b2232240fbc47ea7ce04c46e333e452f8656b667@34.65.107.0:30305",
|
|
||||||
"enode://c5d289b56a77b6a2342ca29956dfd07aadf45364dde8ab20d1dc4efd4d1bc6b4655d902501daea308f4d8950737a4e93a4dfedd17b49cd5760ffd127837ca965@34.65.202.239:30305",
|
|
||||||
// Base
|
|
||||||
"enode://87a32fd13bd596b2ffca97020e31aef4ddcc1bbd4b95bb633d16c1329f654f34049ed240a36b449fda5e5225d70fe40bc667f53c304b71f8e68fc9d448690b51@3.231.138.188:30301",
|
|
||||||
"enode://ca21ea8f176adb2e229ce2d700830c844af0ea941a1d8152a9513b966fe525e809c3a6c73a2c18a12b74ed6ec4380edf91662778fe0b79f6a591236e49e176f9@184.72.129.189:30301",
|
|
||||||
"enode://acf4507a211ba7c1e52cdf4eef62cdc3c32e7c9c47998954f7ba024026f9a6b2150cd3f0b734d9c78e507ab70d59ba61dfe5c45e1078c7ad0775fb251d7735a2@3.220.145.177:30301",
|
|
||||||
"enode://8a5a5006159bf079d06a04e5eceab2a1ce6e0f721875b2a9c96905336219dbe14203d38f70f3754686a6324f786c2f9852d8c0dd3adac2d080f4db35efc678c5@3.231.11.52:30301",
|
|
||||||
"enode://cdadbe835308ad3557f9a1de8db411da1a260a98f8421d62da90e71da66e55e98aaa8e90aa7ce01b408a54e4bd2253d701218081ded3dbe5efbbc7b41d7cef79@54.198.153.150:30301"
|
|
||||||
];
|
|
||||||
|
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
/// OP stack testnet boot nodes.
|
|
||||||
pub static OP_TESTNET_BOOTNODES: &[&str] = &[
|
|
||||||
// OP Labs
|
|
||||||
"enode://2bd2e657bb3c8efffb8ff6db9071d9eb7be70d7c6d7d980ff80fc93b2629675c5f750bc0a5ef27cd788c2e491b8795a7e9a4a6e72178c14acc6753c0e5d77ae4@34.65.205.244:30305",
|
|
||||||
"enode://db8e1cab24624cc62fc35dbb9e481b88a9ef0116114cd6e41034c55b5b4f18755983819252333509bd8e25f6b12aadd6465710cd2e956558faf17672cce7551f@34.65.173.88:30305",
|
|
||||||
"enode://bfda2e0110cfd0f4c9f7aa5bf5ec66e6bd18f71a2db028d36b8bf8b0d6fdb03125c1606a6017b31311d96a36f5ef7e1ad11604d7a166745e6075a715dfa67f8a@34.65.229.245:30305",
|
|
||||||
// Base
|
|
||||||
"enode://548f715f3fc388a7c917ba644a2f16270f1ede48a5d88a4d14ea287cc916068363f3092e39936f1a3e7885198bef0e5af951f1d7b1041ce8ba4010917777e71f@18.210.176.114:30301",
|
|
||||||
"enode://6f10052847a966a725c9f4adf6716f9141155b99a0fb487fea3f51498f4c2a2cb8d534e680ee678f9447db85b93ff7c74562762c3714783a7233ac448603b25f@107.21.251.55:30301",
|
|
||||||
];
|
|
||||||
|
|
||||||
/// 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[..])
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns parsed holesky nodes
|
|
||||||
pub fn holesky_nodes() -> Vec<NodeRecord> {
|
|
||||||
parse_nodes(&HOLESKY_BOOTNODES[..])
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
/// Returns parsed op-stack mainnet nodes
|
|
||||||
pub fn op_nodes() -> Vec<NodeRecord> {
|
|
||||||
parse_nodes(OP_BOOTNODES)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
/// Returns parsed op-stack testnet nodes
|
|
||||||
pub fn op_testnet_nodes() -> Vec<NodeRecord> {
|
|
||||||
parse_nodes(OP_TESTNET_BOOTNODES)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
/// Returns parsed op-stack base mainnet nodes
|
|
||||||
pub fn base_nodes() -> Vec<NodeRecord> {
|
|
||||||
parse_nodes(OP_BOOTNODES)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
/// Returns parsed op-stack base testnet nodes
|
|
||||||
pub fn base_testnet_nodes() -> Vec<NodeRecord> {
|
|
||||||
parse_nodes(OP_TESTNET_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()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
use alloy_rlp::Decodable;
|
|
||||||
use rand::{thread_rng, Rng, RngCore};
|
|
||||||
use std::net::{IpAddr, Ipv4Addr};
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_mapped_ipv6() {
|
|
||||||
let mut rng = thread_rng();
|
|
||||||
|
|
||||||
let v4: Ipv4Addr = "0.0.0.0".parse().unwrap();
|
|
||||||
let v6 = v4.to_ipv6_mapped();
|
|
||||||
|
|
||||||
let record = NodeRecord {
|
|
||||||
address: v6.into(),
|
|
||||||
tcp_port: rng.gen(),
|
|
||||||
udp_port: rng.gen(),
|
|
||||||
id: rng.gen(),
|
|
||||||
};
|
|
||||||
|
|
||||||
assert!(record.clone().convert_ipv4_mapped());
|
|
||||||
assert_eq!(record.into_ipv4_mapped().address, IpAddr::from(v4));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_mapped_ipv4() {
|
|
||||||
let mut rng = thread_rng();
|
|
||||||
let v4: Ipv4Addr = "0.0.0.0".parse().unwrap();
|
|
||||||
|
|
||||||
let record = NodeRecord {
|
|
||||||
address: v4.into(),
|
|
||||||
tcp_port: rng.gen(),
|
|
||||||
udp_port: rng.gen(),
|
|
||||||
id: rng.gen(),
|
|
||||||
};
|
|
||||||
|
|
||||||
assert!(!record.clone().convert_ipv4_mapped());
|
|
||||||
assert_eq!(record.into_ipv4_mapped().address, IpAddr::from(v4));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_noderecord_codec_ipv4() {
|
|
||||||
let mut rng = thread_rng();
|
|
||||||
for _ in 0..100 {
|
|
||||||
let mut ip = [0u8; 4];
|
|
||||||
rng.fill_bytes(&mut ip);
|
|
||||||
let record = NodeRecord {
|
|
||||||
address: IpAddr::V4(ip.into()),
|
|
||||||
tcp_port: rng.gen(),
|
|
||||||
udp_port: rng.gen(),
|
|
||||||
id: rng.gen(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let decoded = NodeRecord::decode(&mut alloy_rlp::encode(record).as_slice()).unwrap();
|
|
||||||
assert_eq!(record, decoded);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_noderecord_codec_ipv6() {
|
|
||||||
let mut rng = thread_rng();
|
|
||||||
for _ in 0..100 {
|
|
||||||
let mut ip = [0u8; 16];
|
|
||||||
rng.fill_bytes(&mut ip);
|
|
||||||
let record = NodeRecord {
|
|
||||||
address: IpAddr::V6(ip.into()),
|
|
||||||
tcp_port: rng.gen(),
|
|
||||||
udp_port: rng.gen(),
|
|
||||||
id: rng.gen(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let decoded = NodeRecord::decode(&mut alloy_rlp::encode(record).as_slice()).unwrap();
|
|
||||||
assert_eq!(record, decoded);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_url_parse() {
|
|
||||||
let url = "enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301";
|
|
||||||
let node: NodeRecord = url.parse().unwrap();
|
|
||||||
assert_eq!(node, NodeRecord {
|
|
||||||
address: IpAddr::V4([10,3,58,6].into()),
|
|
||||||
tcp_port: 30303,
|
|
||||||
udp_port: 30301,
|
|
||||||
id: "6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0".parse().unwrap(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_node_display() {
|
|
||||||
let url = "enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303";
|
|
||||||
let node: NodeRecord = url.parse().unwrap();
|
|
||||||
assert_eq!(url, &format!("{node}"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_node_display_discport() {
|
|
||||||
let url = "enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301";
|
|
||||||
let node: NodeRecord = url.parse().unwrap();
|
|
||||||
assert_eq!(url, &format!("{node}"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_node_serialize() {
|
|
||||||
let node = NodeRecord{
|
|
||||||
address: IpAddr::V4([10, 3, 58, 6].into()),
|
|
||||||
tcp_port: 30303u16,
|
|
||||||
udp_port: 30301u16,
|
|
||||||
id: "6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0".parse().unwrap(),
|
|
||||||
};
|
|
||||||
let ser = serde_json::to_string::<NodeRecord>(&node).expect("couldn't serialize");
|
|
||||||
assert_eq!(ser, "\"enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301\"")
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_node_deserialize() {
|
|
||||||
let url = "\"enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301\"";
|
|
||||||
let node: NodeRecord = serde_json::from_str(url).expect("couldn't deserialize");
|
|
||||||
assert_eq!(node, NodeRecord{
|
|
||||||
address: IpAddr::V4([10, 3, 58, 6].into()),
|
|
||||||
tcp_port: 30303u16,
|
|
||||||
udp_port: 30301u16,
|
|
||||||
id: "6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0".parse().unwrap(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -37,10 +37,10 @@ use crate::constants::optimism::{
|
|||||||
pub use alloy_eips::eip1559::BaseFeeParams;
|
pub use alloy_eips::eip1559::BaseFeeParams;
|
||||||
#[cfg(feature = "optimism")]
|
#[cfg(feature = "optimism")]
|
||||||
use reth_ethereum_forks::OptimismHardfork;
|
use reth_ethereum_forks::OptimismHardfork;
|
||||||
|
use reth_network_peers::{
|
||||||
#[cfg(feature = "optimism")]
|
base_nodes, base_testnet_nodes, goerli_nodes, holesky_nodes, mainnet_nodes, op_nodes,
|
||||||
use crate::net::{base_nodes, base_testnet_nodes, op_nodes, op_testnet_nodes};
|
op_testnet_nodes, sepolia_nodes,
|
||||||
use crate::net::{goerli_nodes, holesky_nodes, mainnet_nodes, sepolia_nodes};
|
};
|
||||||
|
|
||||||
/// The Ethereum mainnet spec
|
/// The Ethereum mainnet spec
|
||||||
pub static MAINNET: Lazy<Arc<ChainSpec>> = Lazy::new(|| {
|
pub static MAINNET: Lazy<Arc<ChainSpec>> = Lazy::new(|| {
|
||||||
@ -727,13 +727,9 @@ impl ChainSpec {
|
|||||||
C::Goerli => Some(goerli_nodes()),
|
C::Goerli => Some(goerli_nodes()),
|
||||||
C::Sepolia => Some(sepolia_nodes()),
|
C::Sepolia => Some(sepolia_nodes()),
|
||||||
C::Holesky => Some(holesky_nodes()),
|
C::Holesky => Some(holesky_nodes()),
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
C::Base => Some(base_nodes()),
|
C::Base => Some(base_nodes()),
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
C::Optimism => Some(op_nodes()),
|
C::Optimism => Some(op_nodes()),
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
C::BaseGoerli | C::BaseSepolia => Some(base_testnet_nodes()),
|
C::BaseGoerli | C::BaseSepolia => Some(base_testnet_nodes()),
|
||||||
#[cfg(feature = "optimism")]
|
|
||||||
C::OptimismSepolia | C::OptimismGoerli | C::OptimismKovan => Some(op_testnet_nodes()),
|
C::OptimismSepolia | C::OptimismGoerli | C::OptimismKovan => Some(op_testnet_nodes()),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@ reth-provider.workspace = true
|
|||||||
reth-node-builder.workspace = true
|
reth-node-builder.workspace = true
|
||||||
reth-tokio-util.workspace = true
|
reth-tokio-util.workspace = true
|
||||||
reth-stages-types.workspace = true
|
reth-stages-types.workspace = true
|
||||||
|
reth-network-peers.workspace = true
|
||||||
|
|
||||||
jsonrpsee.workspace = true
|
jsonrpsee.workspace = true
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@ use reth::{
|
|||||||
network::{NetworkEvent, NetworkEvents, NetworkHandle, PeersInfo},
|
network::{NetworkEvent, NetworkEvents, NetworkHandle, PeersInfo},
|
||||||
rpc::types::PeerId,
|
rpc::types::PeerId,
|
||||||
};
|
};
|
||||||
use reth_chainspec::net::NodeRecord;
|
use reth_network_peers::NodeRecord;
|
||||||
use reth_tokio_util::EventStream;
|
use reth_tokio_util::EventStream;
|
||||||
use reth_tracing::tracing::info;
|
use reth_tracing::tracing::info;
|
||||||
|
|
||||||
|
|||||||
@ -214,9 +214,8 @@ impl Discv4 {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use std::io;
|
/// # use std::io;
|
||||||
/// use rand::thread_rng;
|
/// use rand::thread_rng;
|
||||||
/// use reth_chainspec::net::NodeRecord;
|
|
||||||
/// use reth_discv4::{Discv4, Discv4Config};
|
/// use reth_discv4::{Discv4, Discv4Config};
|
||||||
/// use reth_network_peers::{pk2id, PeerId};
|
/// use reth_network_peers::{pk2id, NodeRecord, PeerId};
|
||||||
/// use secp256k1::SECP256K1;
|
/// use secp256k1::SECP256K1;
|
||||||
/// use std::{net::SocketAddr, str::FromStr};
|
/// use std::{net::SocketAddr, str::FromStr};
|
||||||
/// # async fn t() -> io::Result<()> {
|
/// # async fn t() -> io::Result<()> {
|
||||||
@ -2288,8 +2287,8 @@ mod tests {
|
|||||||
use alloy_primitives::hex;
|
use alloy_primitives::hex;
|
||||||
use alloy_rlp::{Decodable, Encodable};
|
use alloy_rlp::{Decodable, Encodable};
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
use reth_chainspec::net::mainnet_nodes;
|
|
||||||
use reth_ethereum_forks::{EnrForkIdEntry, ForkHash};
|
use reth_ethereum_forks::{EnrForkIdEntry, ForkHash};
|
||||||
|
use reth_network_peers::mainnet_nodes;
|
||||||
use std::future::poll_fn;
|
use std::future::poll_fn;
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
|||||||
@ -6,15 +6,12 @@ use crate::{
|
|||||||
transactions::TransactionsManagerConfig,
|
transactions::TransactionsManagerConfig,
|
||||||
NetworkHandle, NetworkManager,
|
NetworkHandle, NetworkManager,
|
||||||
};
|
};
|
||||||
use reth_chainspec::{
|
use reth_chainspec::{ChainSpec, MAINNET};
|
||||||
net::{mainnet_nodes, sepolia_nodes, TrustedPeer},
|
|
||||||
ChainSpec, MAINNET,
|
|
||||||
};
|
|
||||||
use reth_discv4::{Discv4Config, Discv4ConfigBuilder, NatResolver, DEFAULT_DISCOVERY_ADDRESS};
|
use reth_discv4::{Discv4Config, Discv4ConfigBuilder, NatResolver, DEFAULT_DISCOVERY_ADDRESS};
|
||||||
use reth_discv5::NetworkStackId;
|
use reth_discv5::NetworkStackId;
|
||||||
use reth_dns_discovery::DnsDiscoveryConfig;
|
use reth_dns_discovery::DnsDiscoveryConfig;
|
||||||
use reth_eth_wire::{HelloMessage, HelloMessageWithProtocols, Status};
|
use reth_eth_wire::{HelloMessage, HelloMessageWithProtocols, Status};
|
||||||
use reth_network_peers::{pk2id, PeerId};
|
use reth_network_peers::{mainnet_nodes, pk2id, sepolia_nodes, PeerId, TrustedPeer};
|
||||||
use reth_network_types::{PeersConfig, SessionsConfig};
|
use reth_network_types::{PeersConfig, SessionsConfig};
|
||||||
use reth_primitives::{ForkFilter, Head};
|
use reth_primitives::{ForkFilter, Head};
|
||||||
use reth_provider::{BlockReader, HeaderProvider};
|
use reth_provider::{BlockReader, HeaderProvider};
|
||||||
|
|||||||
@ -46,8 +46,8 @@
|
|||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
//! # async fn launch() {
|
//! # async fn launch() {
|
||||||
//! use reth_chainspec::net::mainnet_nodes;
|
|
||||||
//! use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager};
|
//! use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager};
|
||||||
|
//! use reth_network_peers::mainnet_nodes;
|
||||||
//! use reth_provider::test_utils::NoopProvider;
|
//! use reth_provider::test_utils::NoopProvider;
|
||||||
//!
|
//!
|
||||||
//! // This block provider implementation is used for testing purposes.
|
//! // This block provider implementation is used for testing purposes.
|
||||||
@ -71,8 +71,8 @@
|
|||||||
//! ### Configure all components of the Network with the [`NetworkBuilder`]
|
//! ### Configure all components of the Network with the [`NetworkBuilder`]
|
||||||
//!
|
//!
|
||||||
//! ```
|
//! ```
|
||||||
//! use reth_chainspec::net::mainnet_nodes;
|
|
||||||
//! use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager};
|
//! use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager};
|
||||||
|
//! use reth_network_peers::mainnet_nodes;
|
||||||
//! use reth_provider::test_utils::NoopProvider;
|
//! use reth_provider::test_utils::NoopProvider;
|
||||||
//! use reth_transaction_pool::TransactionPool;
|
//! use reth_transaction_pool::TransactionPool;
|
||||||
//! async fn launch<Pool: TransactionPool>(pool: Pool) {
|
//! async fn launch<Pool: TransactionPool>(pool: Pool) {
|
||||||
|
|||||||
@ -280,8 +280,8 @@ where
|
|||||||
/// components of the network
|
/// components of the network
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// use reth_chainspec::net::mainnet_nodes;
|
|
||||||
/// use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager};
|
/// use reth_network::{config::rng_secret_key, NetworkConfig, NetworkManager};
|
||||||
|
/// use reth_network_peers::mainnet_nodes;
|
||||||
/// use reth_provider::test_utils::NoopProvider;
|
/// use reth_provider::test_utils::NoopProvider;
|
||||||
/// use reth_transaction_pool::TransactionPool;
|
/// use reth_transaction_pool::TransactionPool;
|
||||||
/// async fn launch<Pool: TransactionPool>(pool: Pool) {
|
/// async fn launch<Pool: TransactionPool>(pool: Pool) {
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
use alloy_node_bindings::Geth;
|
use alloy_node_bindings::Geth;
|
||||||
use alloy_provider::{ext::AdminApi, ProviderBuilder};
|
use alloy_provider::{ext::AdminApi, ProviderBuilder};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use reth_chainspec::net::mainnet_nodes;
|
|
||||||
use reth_discv4::Discv4Config;
|
use reth_discv4::Discv4Config;
|
||||||
use reth_eth_wire::DisconnectReason;
|
use reth_eth_wire::DisconnectReason;
|
||||||
use reth_net_banlist::BanList;
|
use reth_net_banlist::BanList;
|
||||||
@ -16,7 +15,7 @@ use reth_network_p2p::{
|
|||||||
headers::client::{HeadersClient, HeadersRequest},
|
headers::client::{HeadersClient, HeadersRequest},
|
||||||
sync::{NetworkSyncUpdater, SyncState},
|
sync::{NetworkSyncUpdater, SyncState},
|
||||||
};
|
};
|
||||||
use reth_network_peers::NodeRecord;
|
use reth_network_peers::{mainnet_nodes, NodeRecord};
|
||||||
use reth_primitives::HeadersDirection;
|
use reth_primitives::HeadersDirection;
|
||||||
use reth_provider::test_utils::NoopProvider;
|
use reth_provider::test_utils::NoopProvider;
|
||||||
use reth_transaction_pool::test_utils::testing_pool;
|
use reth_transaction_pool::test_utils::testing_pool;
|
||||||
|
|||||||
40
crates/net/peers/src/bootnodes/ethereum.rs
Normal file
40
crates/net/peers/src/bootnodes/ethereum.rs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
//! Ethereum bootnodes come from <https://github.com/ledgerwatch/erigon/blob/devel/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
|
||||||
|
];
|
||||||
|
|
||||||
|
/// Ethereum Foundation Sepolia Bootnodes
|
||||||
|
pub static SEPOLIA_BOOTNODES : [&str; 5] = [
|
||||||
|
"enode://4e5e92199ee224a01932a377160aa432f31d0b351f84ab413a8e0a42f4f36476f8fb1cbe914af0d9aef0d51665c214cf653c651c4bbd9d5550a934f241f1682b@138.197.51.181:30303", // sepolia-bootnode-1-nyc3
|
||||||
|
"enode://143e11fb766781d22d92a2e33f8f104cddae4411a122295ed1fdb6638de96a6ce65f5b7c964ba3763bba27961738fef7d3ecc739268f3e5e771fb4c87b6234ba@146.190.1.103:30303", // sepolia-bootnode-1-sfo3
|
||||||
|
"enode://8b61dc2d06c3f96fddcbebb0efb29d60d3598650275dc469c22229d3e5620369b0d3dedafd929835fe7f489618f19f456fe7c0df572bf2d914a9f4e006f783a9@170.64.250.88:30303", // sepolia-bootnode-1-syd1
|
||||||
|
"enode://10d62eff032205fcef19497f35ca8477bea0eadfff6d769a147e895d8b2b8f8ae6341630c645c30f5df6e67547c03494ced3d9c5764e8622a26587b083b028e8@139.59.49.206:30303", // sepolia-bootnode-1-blr1
|
||||||
|
"enode://9e9492e2e8836114cc75f5b929784f4f46c324ad01daf87d956f98b3b6c5fcba95524d6e5cf9861dc96a2c8a171ea7105bb554a197455058de185fa870970c7c@138.68.123.152:30303", // sepolia-bootnode-1-ams3
|
||||||
|
];
|
||||||
|
|
||||||
|
/// Görli 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",
|
||||||
|
];
|
||||||
|
|
||||||
|
/// Ethereum Foundation Holesky Bootnodes
|
||||||
|
pub static HOLESKY_BOOTNODES : [&str; 2] = [
|
||||||
|
"enode://ac906289e4b7f12df423d654c5a962b6ebe5b3a74cc9e06292a85221f9a64a6f1cfdd6b714ed6dacef51578f92b34c60ee91e9ede9c7f8fadc4d347326d95e2b@146.190.13.128:30303",
|
||||||
|
"enode://a3435a0155a3e837c02f5e7f5662a2f1fbc25b48e4dc232016e1c51b544cb5b4510ef633ea3278c0e970fa8ad8141e2d4d0f9f95456c537ff05fdf9b31c15072@178.128.136.233:30303",
|
||||||
|
];
|
||||||
54
crates/net/peers/src/bootnodes/mod.rs
Normal file
54
crates/net/peers/src/bootnodes/mod.rs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
//! Bootnodes for the network
|
||||||
|
|
||||||
|
use crate::NodeRecord;
|
||||||
|
|
||||||
|
mod ethereum;
|
||||||
|
pub use ethereum::*;
|
||||||
|
|
||||||
|
mod optimism;
|
||||||
|
pub use optimism::*;
|
||||||
|
|
||||||
|
/// 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[..])
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns parsed holesky nodes
|
||||||
|
pub fn holesky_nodes() -> Vec<NodeRecord> {
|
||||||
|
parse_nodes(&HOLESKY_BOOTNODES[..])
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns parsed op-stack mainnet nodes
|
||||||
|
pub fn op_nodes() -> Vec<NodeRecord> {
|
||||||
|
parse_nodes(OP_BOOTNODES)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns parsed op-stack testnet nodes
|
||||||
|
pub fn op_testnet_nodes() -> Vec<NodeRecord> {
|
||||||
|
parse_nodes(OP_TESTNET_BOOTNODES)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns parsed op-stack base mainnet nodes
|
||||||
|
pub fn base_nodes() -> Vec<NodeRecord> {
|
||||||
|
parse_nodes(OP_BOOTNODES)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns parsed op-stack base testnet nodes
|
||||||
|
pub fn base_testnet_nodes() -> Vec<NodeRecord> {
|
||||||
|
parse_nodes(OP_TESTNET_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()
|
||||||
|
}
|
||||||
26
crates/net/peers/src/bootnodes/optimism.rs
Normal file
26
crates/net/peers/src/bootnodes/optimism.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//! OP bootnodes come from <https://github.com/ethereum-optimism/op-geth/blob/optimism/params/bootnodes.go>
|
||||||
|
|
||||||
|
/// OP stack mainnet boot nodes.
|
||||||
|
pub static OP_BOOTNODES: &[&str] = &[
|
||||||
|
// OP Labs
|
||||||
|
"enode://ca2774c3c401325850b2477fd7d0f27911efbf79b1e8b335066516e2bd8c4c9e0ba9696a94b1cb030a88eac582305ff55e905e64fb77fe0edcd70a4e5296d3ec@34.65.175.185:30305",
|
||||||
|
"enode://dd751a9ef8912be1bfa7a5e34e2c3785cc5253110bd929f385e07ba7ac19929fb0e0c5d93f77827291f4da02b2232240fbc47ea7ce04c46e333e452f8656b667@34.65.107.0:30305",
|
||||||
|
"enode://c5d289b56a77b6a2342ca29956dfd07aadf45364dde8ab20d1dc4efd4d1bc6b4655d902501daea308f4d8950737a4e93a4dfedd17b49cd5760ffd127837ca965@34.65.202.239:30305",
|
||||||
|
// Base
|
||||||
|
"enode://87a32fd13bd596b2ffca97020e31aef4ddcc1bbd4b95bb633d16c1329f654f34049ed240a36b449fda5e5225d70fe40bc667f53c304b71f8e68fc9d448690b51@3.231.138.188:30301",
|
||||||
|
"enode://ca21ea8f176adb2e229ce2d700830c844af0ea941a1d8152a9513b966fe525e809c3a6c73a2c18a12b74ed6ec4380edf91662778fe0b79f6a591236e49e176f9@184.72.129.189:30301",
|
||||||
|
"enode://acf4507a211ba7c1e52cdf4eef62cdc3c32e7c9c47998954f7ba024026f9a6b2150cd3f0b734d9c78e507ab70d59ba61dfe5c45e1078c7ad0775fb251d7735a2@3.220.145.177:30301",
|
||||||
|
"enode://8a5a5006159bf079d06a04e5eceab2a1ce6e0f721875b2a9c96905336219dbe14203d38f70f3754686a6324f786c2f9852d8c0dd3adac2d080f4db35efc678c5@3.231.11.52:30301",
|
||||||
|
"enode://cdadbe835308ad3557f9a1de8db411da1a260a98f8421d62da90e71da66e55e98aaa8e90aa7ce01b408a54e4bd2253d701218081ded3dbe5efbbc7b41d7cef79@54.198.153.150:30301"
|
||||||
|
];
|
||||||
|
|
||||||
|
/// OP stack testnet boot nodes.
|
||||||
|
pub static OP_TESTNET_BOOTNODES: &[&str] = &[
|
||||||
|
// OP Labs
|
||||||
|
"enode://2bd2e657bb3c8efffb8ff6db9071d9eb7be70d7c6d7d980ff80fc93b2629675c5f750bc0a5ef27cd788c2e491b8795a7e9a4a6e72178c14acc6753c0e5d77ae4@34.65.205.244:30305",
|
||||||
|
"enode://db8e1cab24624cc62fc35dbb9e481b88a9ef0116114cd6e41034c55b5b4f18755983819252333509bd8e25f6b12aadd6465710cd2e956558faf17672cce7551f@34.65.173.88:30305",
|
||||||
|
"enode://bfda2e0110cfd0f4c9f7aa5bf5ec66e6bd18f71a2db028d36b8bf8b0d6fdb03125c1606a6017b31311d96a36f5ef7e1ad11604d7a166745e6075a715dfa67f8a@34.65.229.245:30305",
|
||||||
|
// Base
|
||||||
|
"enode://548f715f3fc388a7c917ba644a2f16270f1ede48a5d88a4d14ea287cc916068363f3092e39936f1a3e7885198bef0e5af951f1d7b1041ce8ba4010917777e71f@18.210.176.114:30301",
|
||||||
|
"enode://6f10052847a966a725c9f4adf6716f9141155b99a0fb487fea3f51498f4c2a2cb8d534e680ee678f9447db85b93ff7c74562762c3714783a7233ac448603b25f@107.21.251.55:30301",
|
||||||
|
];
|
||||||
@ -63,6 +63,9 @@ pub use node_record::{NodeRecord, NodeRecordParseError};
|
|||||||
pub mod trusted_peer;
|
pub mod trusted_peer;
|
||||||
pub use trusted_peer::TrustedPeer;
|
pub use trusted_peer::TrustedPeer;
|
||||||
|
|
||||||
|
mod bootnodes;
|
||||||
|
pub use bootnodes::*;
|
||||||
|
|
||||||
/// This tag should be set to indicate to libsecp256k1 that the following bytes denote an
|
/// This tag should be set to indicate to libsecp256k1 that the following bytes denote an
|
||||||
/// uncompressed pubkey.
|
/// uncompressed pubkey.
|
||||||
///
|
///
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use crate::version::P2P_CLIENT_VERSION;
|
use crate::version::P2P_CLIENT_VERSION;
|
||||||
use clap::Args;
|
use clap::Args;
|
||||||
use reth_chainspec::{net::mainnet_nodes, ChainSpec};
|
use reth_chainspec::ChainSpec;
|
||||||
use reth_config::Config;
|
use reth_config::Config;
|
||||||
use reth_discv4::{NodeRecord, DEFAULT_DISCOVERY_ADDR, DEFAULT_DISCOVERY_PORT};
|
use reth_discv4::{NodeRecord, DEFAULT_DISCOVERY_ADDR, DEFAULT_DISCOVERY_PORT};
|
||||||
use reth_discv5::{
|
use reth_discv5::{
|
||||||
@ -18,7 +18,7 @@ use reth_network::{
|
|||||||
},
|
},
|
||||||
HelloMessageWithProtocols, NetworkConfigBuilder, SessionsConfig,
|
HelloMessageWithProtocols, NetworkConfigBuilder, SessionsConfig,
|
||||||
};
|
};
|
||||||
use reth_network_peers::TrustedPeer;
|
use reth_network_peers::{mainnet_nodes, TrustedPeer};
|
||||||
use secp256k1::SecretKey;
|
use secp256k1::SecretKey;
|
||||||
use std::{
|
use std::{
|
||||||
net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6},
|
net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6},
|
||||||
|
|||||||
@ -115,13 +115,7 @@ pub use c_kzg as kzg;
|
|||||||
#[cfg(feature = "optimism")]
|
#[cfg(feature = "optimism")]
|
||||||
mod optimism {
|
mod optimism {
|
||||||
pub use crate::transaction::{TxDeposit, DEPOSIT_TX_TYPE_ID};
|
pub use crate::transaction::{TxDeposit, DEPOSIT_TX_TYPE_ID};
|
||||||
pub use reth_chainspec::{
|
pub use reth_chainspec::{BASE_MAINNET, BASE_SEPOLIA, OP_MAINNET, OP_SEPOLIA};
|
||||||
net::{
|
|
||||||
base_nodes, base_testnet_nodes, op_nodes, op_testnet_nodes, OP_BOOTNODES,
|
|
||||||
OP_TESTNET_BOOTNODES,
|
|
||||||
},
|
|
||||||
BASE_MAINNET, BASE_SEPOLIA, OP_MAINNET, OP_SEPOLIA,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "optimism")]
|
#[cfg(feature = "optimism")]
|
||||||
|
|||||||
@ -47,6 +47,7 @@ tracing.workspace = true
|
|||||||
reth-chainspec.workspace = true
|
reth-chainspec.workspace = true
|
||||||
reth-beacon-consensus.workspace = true
|
reth-beacon-consensus.workspace = true
|
||||||
reth-network-api.workspace = true
|
reth-network-api.workspace = true
|
||||||
|
reth-network-peers.workspace = true
|
||||||
reth-evm-ethereum.workspace = true
|
reth-evm-ethereum.workspace = true
|
||||||
reth-ethereum-engine-primitives.workspace = true
|
reth-ethereum-engine-primitives.workspace = true
|
||||||
reth-payload-builder = { workspace = true, features = ["test-utils"] }
|
reth-payload-builder = { workspace = true, features = ["test-utils"] }
|
||||||
|
|||||||
@ -11,7 +11,7 @@ use jsonrpsee::{
|
|||||||
rpc_params,
|
rpc_params,
|
||||||
types::error::ErrorCode,
|
types::error::ErrorCode,
|
||||||
};
|
};
|
||||||
use reth_chainspec::net::NodeRecord;
|
use reth_network_peers::NodeRecord;
|
||||||
use reth_primitives::{
|
use reth_primitives::{
|
||||||
hex_literal::hex, Address, BlockId, BlockNumberOrTag, Bytes, TxHash, B256, B64, U256, U64,
|
hex_literal::hex, Address, BlockId, BlockNumberOrTag, Bytes, TxHash, B256, B64, U256, U64,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,6 +12,7 @@ reth-chainspec.workspace = true
|
|||||||
reth-discv4 = { workspace = true, features = ["test-utils"] }
|
reth-discv4 = { workspace = true, features = ["test-utils"] }
|
||||||
reth-network = { workspace = true, features = ["test-utils"] }
|
reth-network = { workspace = true, features = ["test-utils"] }
|
||||||
reth-network-api.workspace = true
|
reth-network-api.workspace = true
|
||||||
|
reth-network-peers.workspace = true
|
||||||
reth-primitives.workspace = true
|
reth-primitives.workspace = true
|
||||||
reth-tracing.workspace = true
|
reth-tracing.workspace = true
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
use reth_chainspec::{
|
use reth_chainspec::{
|
||||||
net::NodeRecord, BaseFeeParams, Chain, ChainHardforks, ChainSpec, EthereumHardfork,
|
BaseFeeParams, Chain, ChainHardforks, ChainSpec, EthereumHardfork, ForkCondition,
|
||||||
ForkCondition,
|
|
||||||
};
|
};
|
||||||
|
use reth_network_peers::NodeRecord;
|
||||||
use reth_primitives::{b256, B256};
|
use reth_primitives::{b256, B256};
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|||||||
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
use discv5::{enr::secp256k1::rand, Enr, Event, ListenConfig};
|
use discv5::{enr::secp256k1::rand, Enr, Event, ListenConfig};
|
||||||
use reth::network::config::SecretKey;
|
use reth::network::config::SecretKey;
|
||||||
use reth_chainspec::net::NodeRecord;
|
|
||||||
use reth_discv5::{enr::EnrCombinedKeyWrapper, Config, Discv5};
|
use reth_discv5::{enr::EnrCombinedKeyWrapper, Config, Discv5};
|
||||||
|
use reth_network_peers::NodeRecord;
|
||||||
use reth_tracing::tracing::info;
|
use reth_tracing::tracing::info;
|
||||||
use std::{
|
use std::{
|
||||||
future::Future,
|
future::Future,
|
||||||
|
|||||||
@ -10,14 +10,14 @@ use std::time::Duration;
|
|||||||
|
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use reth_chainspec::{net::mainnet_nodes, Chain, MAINNET};
|
use reth_chainspec::{Chain, MAINNET};
|
||||||
use reth_discv4::{DiscoveryUpdate, Discv4, Discv4ConfigBuilder, DEFAULT_DISCOVERY_ADDRESS};
|
use reth_discv4::{DiscoveryUpdate, Discv4, Discv4ConfigBuilder, DEFAULT_DISCOVERY_ADDRESS};
|
||||||
use reth_ecies::stream::ECIESStream;
|
use reth_ecies::stream::ECIESStream;
|
||||||
use reth_eth_wire::{
|
use reth_eth_wire::{
|
||||||
EthMessage, EthStream, HelloMessage, P2PStream, Status, UnauthedEthStream, UnauthedP2PStream,
|
EthMessage, EthStream, HelloMessage, P2PStream, Status, UnauthedEthStream, UnauthedP2PStream,
|
||||||
};
|
};
|
||||||
use reth_network::config::rng_secret_key;
|
use reth_network::config::rng_secret_key;
|
||||||
use reth_network_peers::{pk2id, NodeRecord};
|
use reth_network_peers::{mainnet_nodes, pk2id, NodeRecord};
|
||||||
use reth_primitives::{EthereumHardfork, Head, MAINNET_GENESIS_HASH};
|
use reth_primitives::{EthereumHardfork, Head, MAINNET_GENESIS_HASH};
|
||||||
use secp256k1::{SecretKey, SECP256K1};
|
use secp256k1::{SecretKey, SECP256K1};
|
||||||
use tokio::net::TcpStream;
|
use tokio::net::TcpStream;
|
||||||
|
|||||||
Reference in New Issue
Block a user