Skip to content

Commit 32b2408

Browse files
committed
Refactor: Extract get_peers_for_blinded_path helper
Encapsulates logic for fetching peers used in blinded path creation. Reduces duplication and improves reusability across functions.
1 parent 7cd4601 commit 32b2408

File tree

1 file changed

+34
-20
lines changed

1 file changed

+34
-20
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ use core::{cmp, mem};
123123
use core::borrow::Borrow;
124124
use core::cell::RefCell;
125125
use crate::io::Read;
126-
use crate::sync::{Arc, Mutex, RwLock, RwLockReadGuard, FairRwLock, LockTestExt, LockHeldState};
126+
use crate::sync::{Arc, FairRwLock, LockHeldState, LockTestExt, Mutex, MutexGuard, RwLock, RwLockReadGuard};
127127
use core::sync::atomic::{AtomicUsize, AtomicBool, Ordering};
128128
use core::time::Duration;
129129
use core::ops::Deref;
@@ -10891,6 +10891,27 @@ where
1089110891
now
1089210892
}
1089310893

10894+
fn get_peers_for_blinded_path<'a, I>(
10895+
peer_state_iter: I,
10896+
) -> impl Iterator<Item = MessageForwardNode> + 'a
10897+
where
10898+
I: Iterator<Item = (&'a PublicKey, MutexGuard<'a, PeerState<SP>>)> + 'a,
10899+
PeerState<SP>: 'a,
10900+
{
10901+
peer_state_iter
10902+
.filter(|(_, peer)| peer.is_connected)
10903+
.filter(|(_, peer)| peer.latest_features.supports_onion_messages())
10904+
.map(|(node_id, peer)| MessageForwardNode {
10905+
node_id: *node_id,
10906+
short_channel_id: peer
10907+
.channel_by_id
10908+
.iter()
10909+
.filter(|(_, channel)| channel.context().is_usable())
10910+
.min_by_key(|(_, channel)| channel.context().channel_creation_height)
10911+
.and_then(|(_, channel)| channel.context().get_short_channel_id()),
10912+
})
10913+
}
10914+
1089410915
/// Creates a collection of blinded paths by delegating to
1089510916
/// [`MessageRouter::create_blinded_paths`].
1089610917
///
@@ -10899,13 +10920,14 @@ where
1089910920
let recipient = self.get_our_node_id();
1090010921
let secp_ctx = &self.secp_ctx;
1090110922

10902-
let peers = self.per_peer_state.read().unwrap()
10923+
let per_peer_state = self.per_peer_state.read().unwrap();
10924+
let peer_state_iter = per_peer_state
1090310925
.iter()
10904-
.map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()))
10905-
.filter(|(_, peer)| peer.is_connected)
10906-
.filter(|(_, peer)| peer.latest_features.supports_onion_messages())
10907-
.map(|(node_id, _)| *node_id)
10908-
.collect::<Vec<_>>();
10926+
.map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()));
10927+
10928+
let peers = Self::get_peers_for_blinded_path(peer_state_iter)
10929+
.map(|node| node.node_id)
10930+
.collect();
1090910931

1091010932
self.message_router
1091110933
.create_blinded_paths(recipient, context, peers, secp_ctx)
@@ -10920,20 +10942,12 @@ where
1092010942
let recipient = self.get_our_node_id();
1092110943
let secp_ctx = &self.secp_ctx;
1092210944

10923-
let peers = self.per_peer_state.read().unwrap()
10945+
let per_peer_state = self.per_peer_state.read().unwrap();
10946+
let peer_state_iter = per_peer_state
1092410947
.iter()
10925-
.map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()))
10926-
.filter(|(_, peer)| peer.is_connected)
10927-
.filter(|(_, peer)| peer.latest_features.supports_onion_messages())
10928-
.map(|(node_id, peer)| MessageForwardNode {
10929-
node_id: *node_id,
10930-
short_channel_id: peer.channel_by_id
10931-
.iter()
10932-
.filter(|(_, channel)| channel.context().is_usable())
10933-
.min_by_key(|(_, channel)| channel.context().channel_creation_height)
10934-
.and_then(|(_, channel)| channel.context().get_short_channel_id()),
10935-
})
10936-
.collect::<Vec<_>>();
10948+
.map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()));
10949+
10950+
let peers = Self::get_peers_for_blinded_path(peer_state_iter).collect();
1093710951

1093810952
self.message_router
1093910953
.create_compact_blinded_paths(recipient, MessageContext::Offers(context), peers, secp_ctx)

0 commit comments

Comments
 (0)