Skip to content

Commit 77f124a

Browse files
committed
Persist inbound channel coming through OpenChannelRequest
- Add `peer_store` and `peer_manager` to `[EventHandler::new]` function - Persist channel peer info in `[LdkEvent::OpenChannelRequest]` event
1 parent beb2345 commit 77f124a

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/event.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
use crate::peer_store::{PeerInfo, PeerStore};
2+
use crate::types::PeerManager;
13
use crate::{
24
hex_utils, ChannelManager, Config, Error, KeysManager, NetworkGraph, UserChannelId, Wallet,
5+
FilesystemLogger
36
};
47

58
use crate::payment_store::{
@@ -251,6 +254,8 @@ where
251254
runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>,
252255
logger: L,
253256
config: Arc<Config>,
257+
peer_manager: Arc<PeerManager<K>>,
258+
peer_store: Arc<PeerStore<K, Arc<FilesystemLogger>>>,
254259
}
255260

256261
impl<K: KVStore + Sync + Send + 'static, L: Deref> EventHandler<K, L>
@@ -262,6 +267,8 @@ where
262267
channel_manager: Arc<ChannelManager<K>>, network_graph: Arc<NetworkGraph>,
263268
keys_manager: Arc<KeysManager>, payment_store: Arc<PaymentStore<K, L>>,
264269
runtime: Arc<RwLock<Option<tokio::runtime::Runtime>>>, logger: L, config: Arc<Config>,
270+
peer_manager: Arc<PeerManager<K>>,
271+
peer_store: Arc<PeerStore<K, Arc<FilesystemLogger>>>,
265272
) -> Self {
266273
Self {
267274
event_queue,
@@ -273,6 +280,8 @@ where
273280
logger,
274281
runtime,
275282
config,
283+
peer_manager,
284+
peer_store
276285
}
277286
}
278287

@@ -641,6 +650,25 @@ where
641650
if allow_0conf { " trusted" } else { "" },
642651
counterparty_node_id,
643652
);
653+
// Persist channel
654+
let peer_node_ids = self.peer_manager.get_peer_node_ids();
655+
if let Some(peer) = peer_node_ids.iter().find(|(node_id, _)| node_id == &counterparty_node_id) {
656+
let address = match peer.1.clone() {
657+
Some(address) => address,
658+
None => {
659+
log_error!(self.logger, "Failed to add peer to peer store: no network address found");
660+
return;
661+
}
662+
};
663+
let peer = PeerInfo { node_id: counterparty_node_id, address: address.into() };
664+
if let Err(e) = self.peer_store.add_peer(peer) {
665+
log_error!(self.logger, "Failed to add peer to peer store: {}", e);
666+
};
667+
log_info!(
668+
self.logger,
669+
"Persisted inbound channel from peer {}", counterparty_node_id
670+
);
671+
}
644672
}
645673
Err(e) => {
646674
log_error!(

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,8 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
656656
Arc::clone(&self.runtime),
657657
Arc::clone(&self.logger),
658658
Arc::clone(&self.config),
659+
Arc::clone(&self.peer_manager),
660+
Arc::clone(&self.peer_store),
659661
));
660662

661663
// Setup background processing

0 commit comments

Comments
 (0)