@@ -33,6 +33,7 @@ use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, Balance
3333use crate :: chain:: transaction:: { OutPoint , TransactionData } ;
3434use crate :: ln:: types:: ChannelId ;
3535use crate :: ln:: msgs:: { self , BaseMessageHandler , Init , MessageSendEvent } ;
36+ use crate :: ln:: our_peer_storage:: OurPeerStorage ;
3637use crate :: sign:: ecdsa:: EcdsaChannelSigner ;
3738use crate :: events:: { self , Event , EventHandler , ReplayEvent } ;
3839use crate :: util:: logger:: { Logger , WithContext } ;
@@ -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 >
@@ -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 our_peer_storage = 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 : our_peer_storage. encrypted_data ( ) } } )
694703 }
695704}
696705
@@ -703,9 +712,8 @@ where C::Target: chain::Filter,
703712{
704713 fn get_and_clear_pending_msg_events ( & self ) -> Vec < MessageSendEvent > {
705714 let mut pending_events = self . pending_send_only_events . lock ( ) . unwrap ( ) ;
706- let mut ret = Vec :: new ( ) ;
707- core:: mem:: swap ( & mut ret, & mut * pending_events) ;
708- ret }
715+ core:: mem:: take ( & mut * pending_events)
716+ }
709717
710718 fn peer_disconnected ( & self , _their_node_id : PublicKey ) { }
711719
@@ -735,6 +743,12 @@ where
735743 monitor. block_connected (
736744 header, txdata, height, & * self . broadcaster , & * self . fee_estimator , & self . logger )
737745 } ) ;
746+
747+ // Send peer storage everytime a new block arrives.
748+ for node_id in self . get_peer_node_ids ( ) {
749+ self . send_peer_storage ( node_id) ;
750+ }
751+
738752 // Assume we may have some new events and wake the event processor
739753 self . event_notifier . notify ( ) ;
740754 }
@@ -786,6 +800,12 @@ where
786800 header, height, & * self . broadcaster , & * self . fee_estimator , & self . logger
787801 )
788802 } ) ;
803+
804+ // Send peer storage everytime a new block arrives.
805+ for node_id in self . get_peer_node_ids ( ) {
806+ self . send_peer_storage ( node_id) ;
807+ }
808+
789809 // Assume we may have some new events and wake the event processor
790810 self . event_notifier . notify ( ) ;
791811 }
0 commit comments