@@ -46,6 +46,7 @@ use crate::types::features::{InitFeatures, NodeFeatures};
46
46
use core:: ops:: Deref ;
47
47
use core:: sync:: atomic:: { AtomicUsize , Ordering } ;
48
48
use bitcoin:: secp256k1:: PublicKey ;
49
+ use crate :: ln:: our_peer_storage:: OurPeerStorage ;
49
50
50
51
/// `Persist` defines behavior for persisting channel monitors: this could mean
51
52
/// writing once to disk, and/or uploading to one or more backup services.
@@ -255,6 +256,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
255
256
/// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
256
257
event_notifier : Notifier ,
257
258
pending_send_only_events : Mutex < Vec < MessageSendEvent > > ,
259
+
260
+ our_peerstorage_encryption_key : [ u8 ; 32 ] ,
258
261
}
259
262
260
263
impl < ChannelSigner : EcdsaChannelSigner , C : Deref , T : Deref , F : Deref , L : Deref , P : Deref > ChainMonitor < ChannelSigner , C , T , F , L , P >
@@ -390,7 +393,7 @@ where C::Target: chain::Filter,
390
393
/// transactions relevant to the watched channels.
391
394
///
392
395
/// # Note
393
- /// `our_peerstorage_encryption_key` must be obtained from [`sign::KeysManager::get_peer_storage_key()`].
396
+ /// `our_peerstorage_encryption_key` must be obtained from [`crate:: sign::KeysManager::get_peer_storage_key()`].
394
397
/// This key is used to encrypt peer storage backups.
395
398
///
396
399
/// **Important**: This key should not be set arbitrarily or changed after initialization. The same key
@@ -408,6 +411,7 @@ where C::Target: chain::Filter,
408
411
highest_chain_height : AtomicUsize :: new ( 0 ) ,
409
412
event_notifier : Notifier :: new ( ) ,
410
413
pending_send_only_events : Mutex :: new ( Vec :: new ( ) ) ,
414
+ our_peerstorage_encryption_key
411
415
}
412
416
}
413
417
@@ -690,7 +694,12 @@ where C::Target: chain::Filter,
690
694
}
691
695
692
696
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 encrypted_data= 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 : encrypted_data } } )
694
703
}
695
704
}
696
705
@@ -705,7 +714,8 @@ where C::Target: chain::Filter,
705
714
let mut pending_events = self . pending_send_only_events . lock ( ) . unwrap ( ) ;
706
715
let mut ret = Vec :: new ( ) ;
707
716
core:: mem:: swap ( & mut ret, & mut * pending_events) ;
708
- ret }
717
+ ret
718
+ }
709
719
710
720
fn peer_disconnected ( & self , _their_node_id : PublicKey ) { }
711
721
@@ -735,6 +745,12 @@ where
735
745
monitor. block_connected (
736
746
header, txdata, height, & * self . broadcaster , & * self . fee_estimator , & self . logger )
737
747
} ) ;
748
+
749
+ // Send peer storage everytime a new block arrives.
750
+ for node_id in self . get_peer_node_ids ( ) {
751
+ self . send_peer_storage ( node_id) ;
752
+ }
753
+
738
754
// Assume we may have some new events and wake the event processor
739
755
self . event_notifier . notify ( ) ;
740
756
}
@@ -786,6 +802,12 @@ where
786
802
header, height, & * self . broadcaster , & * self . fee_estimator , & self . logger
787
803
)
788
804
} ) ;
805
+
806
+ // Send peer storage everytime a new block arrives.
807
+ for node_id in self . get_peer_node_ids ( ) {
808
+ self . send_peer_storage ( node_id) ;
809
+ }
810
+
789
811
// Assume we may have some new events and wake the event processor
790
812
self . event_notifier . notify ( ) ;
791
813
}
0 commit comments