@@ -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:: DecryptedOurPeerStorage ;
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
@@ -699,7 +703,19 @@ where C::Target: chain::Filter,
699703 }
700704
701705 fn send_peer_storage ( & self , their_node_id : PublicKey ) {
702- // TODO: Serialize `ChannelMonitor`s inside `our_peer_storage` and update [`OurPeerStorage::block_height`] accordingly.
706+ // TODO: Serialize `ChannelMonitor`s inside `our_peer_storage`.
707+
708+ let random_bytes = self . entropy_source . get_secure_random_bytes ( ) ;
709+ let serialised_channels = Vec :: new ( ) ;
710+ let our_peer_storage = DecryptedOurPeerStorage :: new ( serialised_channels) ;
711+ let cipher = our_peer_storage. encrypt ( & self . our_peerstorage_encryption_key , random_bytes) ;
712+
713+ log_debug ! ( self . logger, "Sending Peer Storage to {}" , log_pubkey!( their_node_id) ) ;
714+ let send_peer_storage_event = MessageSendEvent :: SendPeerStorage {
715+ node_id : their_node_id, msg : msgs:: PeerStorage { data : cipher. into_vec ( ) }
716+ } ;
717+
718+ self . pending_send_only_events . lock ( ) . unwrap ( ) . push ( send_peer_storage_event)
703719 }
704720}
705721
@@ -745,6 +761,12 @@ where
745761 monitor. block_connected (
746762 header, txdata, height, & * self . broadcaster , & * self . fee_estimator , & self . logger )
747763 } ) ;
764+
765+ // Send peer storage everytime a new block arrives.
766+ for node_id in self . all_counterparty_node_ids ( ) {
767+ self . send_peer_storage ( node_id) ;
768+ }
769+
748770 // Assume we may have some new events and wake the event processor
749771 self . event_notifier . notify ( ) ;
750772 }
@@ -797,6 +819,12 @@ where
797819 header, height, & * self . broadcaster , & * self . fee_estimator , & self . logger
798820 )
799821 } ) ;
822+
823+ // Send peer storage everytime a new block arrives.
824+ for node_id in self . all_counterparty_node_ids ( ) {
825+ self . send_peer_storage ( node_id) ;
826+ }
827+
800828 // Assume we may have some new events and wake the event processor
801829 self . event_notifier . notify ( ) ;
802830 }
0 commit comments