From ce73883ce083596d2c67d6f99935ce1945792b24 Mon Sep 17 00:00:00 2001 From: hanabi1224 Date: Wed, 21 Jan 2026 19:42:39 +0800 Subject: [PATCH] fix: whitelist nebula crawlers --- CHANGELOG.md | 2 ++ src/libp2p/peer_manager.rs | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7c0c982d863..329e68977c0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,8 @@ - [#6430](https://github.com/ChainSafe/forest/issues/6430) Fixed a panic when syncing from genesis on the calibration network. +- [#6456](https://github.com/ChainSafe/forest/pull/6456) Whitelisted nebula and hermes crawlers. + ## Forest v0.30.5 "Dulce de Leche" Non-mandatory release supporting new API methods and addressing a critical panic issue. diff --git a/src/libp2p/peer_manager.rs b/src/libp2p/peer_manager.rs index 1436a9cdaf34..cd755641d902 100644 --- a/src/libp2p/peer_manager.rs +++ b/src/libp2p/peer_manager.rs @@ -220,9 +220,18 @@ impl PeerManager { if self.is_peer_protected(&peer) { return; } + + let user_agent = get_user_agent(&peer); + // Whitelist crawlers + if let Some(ua) = &user_agent + && is_crawler(ua) + { + tracing::debug!("whitelisted crawler peer {peer} with user agent {ua}"); + return; + } + let mut locked = self.peer_ban_list.write().await; locked.insert(peer, duration.and_then(|d| Instant::now().checked_add(d))); - let user_agent = get_user_agent(&peer); if let Err(e) = self .peer_ops_tx .send_async(PeerOperation::Ban { @@ -333,3 +342,25 @@ pub enum PeerOperation { }, Unban(PeerId), } + +fn is_crawler(user_agent: impl AsRef) -> bool { + let ua = user_agent.as_ref(); + ua.starts_with("nebula/") || ua.starts_with("hermes") +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_is_crawler() { + assert!(is_crawler("nebula/")); + assert!(is_crawler("nebula/1.0")); + assert!(is_crawler("hermes")); + assert!(is_crawler("hermes/1.0")); + + assert!(!is_crawler("forest")); + assert!(!is_crawler("lotus")); + assert!(!is_crawler("venus")); + } +}