@@ -46,6 +46,7 @@ use crate::types::features::{InitFeatures, NodeFeatures};
4646use core:: ops:: Deref ;
4747use core:: sync:: atomic:: { AtomicUsize , Ordering } ;
4848use bitcoin:: secp256k1:: PublicKey ;
49+ use crate :: ln:: our_peer_storage:: OurPeerStorage ;
4950
5051/// `Persist` defines behavior for persisting channel monitors: this could mean
5152/// writing once to disk, and/or uploading to one or more backup services.
@@ -255,6 +256,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
255256 /// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
256257 event_notifier : Notifier ,
257258 pending_send_only_events : Mutex < Vec < MessageSendEvent > > ,
259+
260+ our_peerstorage_encryption_key : [ u8 ; 32 ] ,
258261}
259262
260263impl < ChannelSigner : EcdsaChannelSigner , C : Deref , T : Deref , F : Deref , L : Deref , P : Deref > ChainMonitor < ChannelSigner , C , T , F , L , P >
@@ -390,7 +393,7 @@ where C::Target: chain::Filter,
390393 /// transactions relevant to the watched channels.
391394 ///
392395 /// # Note
393- /// `our_peerstorage_encryption_key` must be obtained from [`sign::KeysManager::get_peer_storage_key()`].
396+ /// `our_peerstorage_encryption_key` must be obtained from [`crate:: sign::KeysManager::get_peer_storage_key()`].
394397 /// This key is used to encrypt peer storage backups.
395398 ///
396399 /// **Important**: This key should not be set arbitrarily or changed after initialization. The same key
@@ -408,6 +411,7 @@ where C::Target: chain::Filter,
408411 highest_chain_height : AtomicUsize :: new ( 0 ) ,
409412 event_notifier : Notifier :: new ( ) ,
410413 pending_send_only_events : Mutex :: new ( Vec :: new ( ) ) ,
414+ our_peerstorage_encryption_key
411415 }
412416 }
413417
@@ -690,7 +694,12 @@ where C::Target: chain::Filter,
690694 }
691695
692696 fn send_peer_storage ( & self , their_node_id : PublicKey ) {
693- // TODO: Serialize `ChannelMonitor`s inside `our_peer_storage` and update [`OurPeerStorage::block_height`] accordingly.
697+ // TODO: Serialize `ChannelMonitor`s inside `our_peer_storage`.
698+
699+ let encrypted_data= OurPeerStorage :: create_from_data ( self . our_peerstorage_encryption_key , Vec :: new ( ) ) ;
700+ log_debug ! ( self . logger, "Sending Peer Storage from chainmonitor" ) ;
701+ self . pending_send_only_events . lock ( ) . unwrap ( ) . push ( MessageSendEvent :: SendPeerStorage { node_id : their_node_id
702+ , msg : msgs:: PeerStorage { data : encrypted_data } } )
694703 }
695704}
696705
@@ -705,7 +714,8 @@ where C::Target: chain::Filter,
705714 let mut pending_events = self . pending_send_only_events . lock ( ) . unwrap ( ) ;
706715 let mut ret = Vec :: new ( ) ;
707716 core:: mem:: swap ( & mut ret, & mut * pending_events) ;
708- ret }
717+ ret
718+ }
709719
710720 fn peer_disconnected ( & self , _their_node_id : PublicKey ) { }
711721
@@ -735,6 +745,12 @@ where
735745 monitor. block_connected (
736746 header, txdata, height, & * self . broadcaster , & * self . fee_estimator , & self . logger )
737747 } ) ;
748+
749+ // Send peer storage everytime a new block arrives.
750+ for node_id in self . get_peer_node_ids ( ) {
751+ self . send_peer_storage ( node_id) ;
752+ }
753+
738754 // Assume we may have some new events and wake the event processor
739755 self . event_notifier . notify ( ) ;
740756 }
@@ -786,6 +802,12 @@ where
786802 header, height, & * self . broadcaster , & * self . fee_estimator , & self . logger
787803 )
788804 } ) ;
805+
806+ // Send peer storage everytime a new block arrives.
807+ for node_id in self . get_peer_node_ids ( ) {
808+ self . send_peer_storage ( node_id) ;
809+ }
810+
789811 // Assume we may have some new events and wake the event processor
790812 self . event_notifier . notify ( ) ;
791813 }
0 commit comments