@@ -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 :: sign:: { EntropySource , PeerStorageKey } ;
3839use crate :: events:: { self , Event , EventHandler , ReplayEvent } ;
@@ -260,6 +261,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
260261
261262 /// Messages to send to the peer. This is currently used to distribute PeerStorage to channel partners.
262263 pending_send_only_events : Mutex < Vec < MessageSendEvent > > ,
264+
265+ our_peerstorage_encryption_key : PeerStorageKey ,
263266}
264267
265268impl < ChannelSigner : EcdsaChannelSigner , C : Deref , T : Deref , F : Deref , L : Deref , P : Deref , ES : Deref > ChainMonitor < ChannelSigner , C , T , F , L , P , ES >
@@ -419,6 +422,7 @@ where C::Target: chain::Filter,
419422 highest_chain_height : AtomicUsize :: new ( 0 ) ,
420423 event_notifier : Notifier :: new ( ) ,
421424 pending_send_only_events : Mutex :: new ( Vec :: new ( ) ) ,
425+ our_peerstorage_encryption_key
422426 }
423427 }
424428
@@ -701,7 +705,19 @@ where C::Target: chain::Filter,
701705 }
702706
703707 fn send_peer_storage ( & self , their_node_id : PublicKey ) {
704- // TODO: Serialize `ChannelMonitor`s inside `our_peer_storage` and update [`OurPeerStorage::block_height`] accordingly.
708+ // TODO: Serialize `ChannelMonitor`s inside `our_peer_storage`.
709+
710+ let random_bytes = self . entropy_source . get_secure_random_bytes ( ) ;
711+ let serialised_channels = Vec :: new ( ) ;
712+ let our_peer_storage = OurPeerStorage :: DecryptedPeerStorage { data : serialised_channels } ;
713+ let cipher = our_peer_storage. encrypt_peer_storage ( & self . our_peerstorage_encryption_key , random_bytes) ;
714+
715+ log_debug ! ( self . logger, "Sending Peer Storage to {}" , log_pubkey!( their_node_id) ) ;
716+ let send_peer_storage_event = MessageSendEvent :: SendPeerStorage {
717+ node_id : their_node_id, msg : msgs:: PeerStorage { data : cipher. into_vec ( ) }
718+ } ;
719+
720+ self . pending_send_only_events . lock ( ) . unwrap ( ) . push ( send_peer_storage_event)
705721 }
706722}
707723
@@ -747,6 +763,12 @@ where
747763 monitor. block_connected (
748764 header, txdata, height, & * self . broadcaster , & * self . fee_estimator , & self . logger )
749765 } ) ;
766+
767+ // Send peer storage everytime a new block arrives.
768+ for node_id in self . all_counterparty_node_ids ( ) {
769+ self . send_peer_storage ( node_id) ;
770+ }
771+
750772 // Assume we may have some new events and wake the event processor
751773 self . event_notifier . notify ( ) ;
752774 }
@@ -799,6 +821,12 @@ where
799821 header, height, & * self . broadcaster , & * self . fee_estimator , & self . logger
800822 )
801823 } ) ;
824+
825+ // Send peer storage everytime a new block arrives.
826+ for node_id in self . all_counterparty_node_ids ( ) {
827+ self . send_peer_storage ( node_id) ;
828+ }
829+
802830 // Assume we may have some new events and wake the event processor
803831 self . event_notifier . notify ( ) ;
804832 }
0 commit comments