@@ -33,6 +33,7 @@ use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, Balance
33
33
use crate :: chain:: transaction:: { OutPoint , TransactionData } ;
34
34
use crate :: ln:: types:: ChannelId ;
35
35
use crate :: ln:: msgs:: { self , BaseMessageHandler , Init , MessageSendEvent } ;
36
+ use crate :: ln:: our_peer_storage:: DecryptedOurPeerStorage ;
36
37
use crate :: sign:: ecdsa:: EcdsaChannelSigner ;
37
38
use crate :: sign:: { EntropySource , PeerStorageKey } ;
38
39
use crate :: events:: { self , Event , EventHandler , ReplayEvent } ;
@@ -260,6 +261,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
260
261
261
262
/// Messages to send to the peer. This is currently used to distribute PeerStorage to channel partners.
262
263
pending_send_only_events : Mutex < Vec < MessageSendEvent > > ,
264
+
265
+ our_peerstorage_encryption_key : PeerStorageKey ,
263
266
}
264
267
265
268
impl < 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,
419
422
highest_chain_height : AtomicUsize :: new ( 0 ) ,
420
423
event_notifier : Notifier :: new ( ) ,
421
424
pending_send_only_events : Mutex :: new ( Vec :: new ( ) ) ,
425
+ our_peerstorage_encryption_key
422
426
}
423
427
}
424
428
@@ -699,7 +703,19 @@ where C::Target: chain::Filter,
699
703
}
700
704
701
705
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)
703
719
}
704
720
}
705
721
@@ -745,6 +761,12 @@ where
745
761
monitor. block_connected (
746
762
header, txdata, height, & * self . broadcaster , & * self . fee_estimator , & self . logger )
747
763
} ) ;
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
+
748
770
// Assume we may have some new events and wake the event processor
749
771
self . event_notifier . notify ( ) ;
750
772
}
@@ -797,6 +819,12 @@ where
797
819
header, height, & * self . broadcaster , & * self . fee_estimator , & self . logger
798
820
)
799
821
} ) ;
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
+
800
828
// Assume we may have some new events and wake the event processor
801
829
self . event_notifier . notify ( ) ;
802
830
}
0 commit comments