commit ff48f2f9df644012356b27601362cd017285c496
parent d5c7bccf068ee3c79c0f845539aa5b41a95f3d97
Author: Joris Hartog <jorishartog@hotmail.com>
Date: Fri, 21 Aug 2026 21:09:43 +0200
Limit setup peer discovery dials
Diffstat:
1 file changed, 36 insertions(+), 7 deletions(-)
diff --git a/src/adapters/p2p/network.rs b/src/adapters/p2p/network.rs
@@ -207,15 +207,20 @@ impl GossipNetwork {
STALE_INBOUND_PEER_RETENTION_MS,
STALE_DISCOVERED_PEER_RETENTION_MS,
);
+ let max_discovered_outbound_dials = {
+ let node = self.inner.node.lock().await;
+ if node.ledger().is_setup_placeholder() {
+ 0
+ } else {
+ MAX_DISCOVERED_OUTBOUND_DIALS_PER_CYCLE
+ }
+ };
let addresses = self
.inner
.peers
.lock()
.await
- .outbound_session_candidates_at(
- crate::app::now_ms(),
- MAX_DISCOVERED_OUTBOUND_DIALS_PER_CYCLE,
- );
+ .outbound_session_candidates_at(crate::app::now_ms(), max_discovered_outbound_dials);
let address_set = addresses.iter().cloned().collect::<BTreeSet<_>>();
let self_filter_addr = self.self_filter_addr().await;
let mut sessions = self.inner.sessions.lock().await;
@@ -254,11 +259,11 @@ impl GossipNetwork {
#[cfg(test)]
mod tests {
- use std::sync::Arc;
+ use std::{collections::BTreeMap, sync::Arc};
use crate::{
- app::{GossipEnvelope, PeerBook},
- domain::Wallet,
+ app::{GossipEnvelope, NodeCore, PeerBook},
+ domain::{Ledger, Wallet},
};
use super::super::test_support::{allocations, gossip_network, node};
@@ -282,6 +287,30 @@ mod tests {
}
#[tokio::test]
+ async fn setup_placeholder_only_dials_explicit_outbound_peers() {
+ let alice = Wallet::from_seed("setup-placeholder-outbound-alice");
+ let node = Arc::new(tokio::sync::Mutex::new(NodeCore::from_ledger(
+ alice,
+ Ledger::new(BTreeMap::new(), 1),
+ 0,
+ )));
+ let peers = Arc::new(tokio::sync::Mutex::new(PeerBook::from_addresses(vec![
+ "127.0.0.1:9545".to_string(),
+ ])));
+ peers
+ .lock()
+ .await
+ .add_discovered_peer("127.0.0.1:9546".to_string());
+ let network = gossip_network(node, peers, "127.0.0.1:9544".parse().unwrap(), None);
+
+ network.ensure_outbound_sessions().await;
+
+ let sessions = network.inner.sessions.lock().await;
+ assert!(sessions.contains_key("127.0.0.1:9545"));
+ assert!(!sessions.contains_key("127.0.0.1:9546"));
+ }
+
+ #[tokio::test]
async fn peer_exchange_omits_hostname_bootstrap_peers() {
let alice = Wallet::from_seed("px-hostname-alice");
let allocations = allocations(std::slice::from_ref(&alice), 1_000);