iuna

iuna

iuna - experimental mainnet-candidate protocol
git clone https://getiuna.org/git/iuna.git
Log | Files | Refs | README | LICENSE

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:
Msrc/adapters/p2p/network.rs | 43++++++++++++++++++++++++++++++++++++-------
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);