@@ -35,6 +35,7 @@ use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, Balance
35
35
use crate :: chain:: transaction:: { OutPoint , TransactionData } ;
36
36
use crate :: ln:: types:: ChannelId ;
37
37
use crate :: ln:: msgs:: { self , BaseMessageHandler , Init , MessageSendEvent } ;
38
+ use crate :: ln:: our_peer_storage:: DecryptedOurPeerStorage ;
38
39
use crate :: sign:: ecdsa:: EcdsaChannelSigner ;
39
40
use crate :: sign:: { EntropySource , PeerStorageKey } ;
40
41
use crate :: events:: { self , Event , EventHandler , ReplayEvent } ;
@@ -262,6 +263,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
262
263
263
264
/// Messages to send to the peer. This is currently used to distribute PeerStorage to channel partners.
264
265
pending_send_only_events : Mutex < Vec < MessageSendEvent > > ,
266
+
267
+ our_peerstorage_encryption_key : PeerStorageKey ,
265
268
}
266
269
267
270
impl < ChannelSigner : EcdsaChannelSigner , C : Deref , T : Deref , F : Deref , L : Deref , P : Deref , ES : Deref > ChainMonitor < ChannelSigner , C , T , F , L , P , ES >
@@ -421,6 +424,7 @@ where C::Target: chain::Filter,
421
424
highest_chain_height : AtomicUsize :: new ( 0 ) ,
422
425
event_notifier : Notifier :: new ( ) ,
423
426
pending_send_only_events : Mutex :: new ( Vec :: new ( ) ) ,
427
+ our_peerstorage_encryption_key
424
428
}
425
429
}
426
430
@@ -701,7 +705,19 @@ where C::Target: chain::Filter,
701
705
}
702
706
703
707
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 = DecryptedOurPeerStorage :: new ( serialised_channels) ;
713
+ let cipher = our_peer_storage. encrypt ( & 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)
705
721
}
706
722
}
707
723
@@ -747,6 +763,12 @@ where
747
763
monitor. block_connected (
748
764
header, txdata, height, & * self . broadcaster , & * self . fee_estimator , & self . logger )
749
765
} ) ;
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
+
750
772
// Assume we may have some new events and wake the event processor
751
773
self . event_notifier . notify ( ) ;
752
774
}
@@ -799,6 +821,12 @@ where
799
821
header, height, & * self . broadcaster , & * self . fee_estimator , & self . logger
800
822
)
801
823
} ) ;
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
+
802
830
// Assume we may have some new events and wake the event processor
803
831
self . event_notifier . notify ( ) ;
804
832
}
0 commit comments