1+ use crate :: peer_store:: { PeerInfo , PeerStore } ;
2+ use crate :: types:: PeerManager ;
13use crate :: {
24 hex_utils, ChannelId , ChannelManager , Config , Error , KeysManager , NetworkGraph , UserChannelId ,
3- Wallet ,
5+ Wallet , NetAddress ,
46} ;
57
68use crate :: payment_store:: {
79 PaymentDetails , PaymentDetailsUpdate , PaymentDirection , PaymentStatus , PaymentStore ,
810} ;
911
1012use crate :: io:: { KVStore , EVENT_QUEUE_PERSISTENCE_KEY , EVENT_QUEUE_PERSISTENCE_NAMESPACE } ;
11- use crate :: logger:: { log_debug, log_error, log_info, Logger } ;
13+ use crate :: logger:: { log_debug, log_error, log_info, Logger , FilesystemLogger } ;
1214
1315use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
1416use lightning:: events:: Event as LdkEvent ;
@@ -232,6 +234,8 @@ where
232234 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > ,
233235 logger : L ,
234236 config : Arc < Config > ,
237+ peer_manager : Arc < PeerManager < K > > ,
238+ peer_store : Arc < PeerStore < K , Arc < FilesystemLogger > > > ,
235239}
236240
237241impl < K : KVStore + Sync + Send + ' static , L : Deref > EventHandler < K , L >
@@ -243,6 +247,8 @@ where
243247 channel_manager : Arc < ChannelManager < K > > , network_graph : Arc < NetworkGraph > ,
244248 keys_manager : Arc < KeysManager > , payment_store : Arc < PaymentStore < K , L > > ,
245249 runtime : Arc < RwLock < Option < tokio:: runtime:: Runtime > > > , logger : L , config : Arc < Config > ,
250+ peer_manager : Arc < PeerManager < K > > ,
251+ peer_store : Arc < PeerStore < K , Arc < FilesystemLogger > > > ,
246252 ) -> Self {
247253 Self {
248254 event_queue,
@@ -254,6 +260,8 @@ where
254260 logger,
255261 runtime,
256262 config,
263+ peer_manager,
264+ peer_store
257265 }
258266 }
259267
@@ -619,6 +627,25 @@ where
619627 if allow_0conf { " trusted" } else { "" } ,
620628 counterparty_node_id,
621629 ) ;
630+ // Persist channel
631+ let peer_node_ids = self . peer_manager . get_peer_node_ids ( ) ;
632+ if let Some ( peer) = peer_node_ids. iter ( ) . find ( |( node_id, _) | node_id == & counterparty_node_id) {
633+ let address = match peer. 1 . clone ( ) {
634+ Some ( address) => address,
635+ None => {
636+ log_error ! ( self . logger, "Failed to add peer to peer store: no network address found" ) ;
637+ return ;
638+ }
639+ } ;
640+ let peer = PeerInfo { node_id : counterparty_node_id, address : NetAddress ( address) } ;
641+ if let Err ( e) = self . peer_store . add_peer ( peer) {
642+ log_error ! ( self . logger, "Failed to add peer to peer store: {}" , e) ;
643+ } ;
644+ log_info ! (
645+ self . logger,
646+ "Persisted inbound channel from peer {}" , counterparty_node_id
647+ ) ;
648+ }
622649 }
623650 Err ( e) => {
624651 log_error ! (
0 commit comments