1+ use crate :: peer_store:: { PeerInfo , PeerStore } ;
2+ use crate :: types:: PeerManager ;
13use crate :: {
24 hex_utils, ChannelManager , Config , Error , KeysManager , NetworkGraph , UserChannelId , Wallet ,
5+ FilesystemLogger
36} ;
47
58use 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
256261impl < 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 ! (
0 commit comments