@@ -32,16 +32,17 @@ use crate::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
32
32
use crate :: chain:: channelmonitor:: { ChannelMonitor , ChannelMonitorUpdate , Balance , MonitorEvent , TransactionOutputs , WithChannelMonitor } ;
33
33
use crate :: chain:: transaction:: { OutPoint , TransactionData } ;
34
34
use crate :: ln:: types:: ChannelId ;
35
+ use crate :: ln:: msgs:: { self , BaseMessageHandler , Init , MessageSendEvent } ;
35
36
use crate :: sign:: ecdsa:: EcdsaChannelSigner ;
36
37
use crate :: events:: { self , Event , EventHandler , ReplayEvent } ;
37
38
use crate :: util:: logger:: { Logger , WithContext } ;
38
39
use crate :: util:: errors:: APIError ;
39
40
use crate :: util:: persist:: MonitorName ;
40
41
use crate :: util:: wakers:: { Future , Notifier } ;
41
42
use crate :: ln:: channel_state:: ChannelDetails ;
42
-
43
43
use crate :: prelude:: * ;
44
44
use crate :: sync:: { RwLock , RwLockReadGuard , Mutex , MutexGuard } ;
45
+ use crate :: types:: features:: { InitFeatures , NodeFeatures } ;
45
46
use core:: ops:: Deref ;
46
47
use core:: sync:: atomic:: { AtomicUsize , Ordering } ;
47
48
use bitcoin:: secp256k1:: PublicKey ;
@@ -253,6 +254,7 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
253
254
/// A [`Notifier`] used to wake up the background processor in case we have any [`Event`]s for
254
255
/// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
255
256
event_notifier : Notifier ,
257
+ pending_send_only_events : Mutex < Vec < MessageSendEvent > > ,
256
258
}
257
259
258
260
impl < ChannelSigner : EcdsaChannelSigner , C : Deref , T : Deref , F : Deref , L : Deref , P : Deref > ChainMonitor < ChannelSigner , C , T , F , L , P >
@@ -386,7 +388,15 @@ where C::Target: chain::Filter,
386
388
/// pre-filter blocks or only fetch blocks matching a compact filter. Otherwise, clients may
387
389
/// always need to fetch full blocks absent another means for determining which blocks contain
388
390
/// transactions relevant to the watched channels.
389
- pub fn new ( chain_source : Option < C > , broadcaster : T , logger : L , feeest : F , persister : P ) -> Self {
391
+ ///
392
+ /// # Note
393
+ /// `our_peerstorage_encryption_key` must be obtained from [`crate::sign::NodeSigner::get_peer_storage_key()`].
394
+ /// This key is used to encrypt peer storage backups.
395
+ ///
396
+ /// **Important**: This key should not be set arbitrarily or changed after initialization. The same key
397
+ /// is obtained by the `ChannelManager` through `KeyMananger` to decrypt peer backups.
398
+ /// Using an inconsistent or incorrect key will result in the inability to decrypt previously encrypted backups.
399
+ pub fn new ( chain_source : Option < C > , broadcaster : T , logger : L , feeest : F , persister : P , our_peerstorage_encryption_key : [ u8 ; 32 ] ) -> Self {
390
400
Self {
391
401
monitors : RwLock :: new ( new_hash_map ( ) ) ,
392
402
chain_source,
@@ -397,6 +407,7 @@ where C::Target: chain::Filter,
397
407
pending_monitor_events : Mutex :: new ( Vec :: new ( ) ) ,
398
408
highest_chain_height : AtomicUsize :: new ( 0 ) ,
399
409
event_notifier : Notifier :: new ( ) ,
410
+ pending_send_only_events : Mutex :: new ( Vec :: new ( ) ) ,
400
411
}
401
412
}
402
413
@@ -665,6 +676,48 @@ where C::Target: chain::Filter,
665
676
} ) ;
666
677
}
667
678
}
679
+
680
+ /// Retrieves all node IDs associated with the monitors.
681
+ ///
682
+ /// This function collects the counterparty node IDs from all monitors into a `HashSet`,
683
+ /// ensuring unique IDs are returned.
684
+ fn get_peer_node_ids ( & self ) -> HashSet < PublicKey > {
685
+ let mon = self . monitors . read ( ) . unwrap ( ) ;
686
+ mon
687
+ . values ( )
688
+ . map ( |monitor| monitor. monitor . get_counterparty_node_id ( ) . clone ( ) )
689
+ . collect ( )
690
+ }
691
+
692
+ fn send_peer_storage ( & self , their_node_id : PublicKey ) {
693
+ // TODO: Serialize `ChannelMonitor`s inside `our_peer_storage` and update [`OurPeerStorage::block_height`] accordingly.
694
+ }
695
+ }
696
+
697
+ impl < ChannelSigner : EcdsaChannelSigner , C : Deref , T : Deref , F : Deref , L : Deref , P : Deref > BaseMessageHandler for ChainMonitor < ChannelSigner , C , T , F , L , P >
698
+ where C :: Target : chain:: Filter ,
699
+ T :: Target : BroadcasterInterface ,
700
+ F :: Target : FeeEstimator ,
701
+ L :: Target : Logger ,
702
+ P :: Target : Persist < ChannelSigner > ,
703
+ {
704
+ fn get_and_clear_pending_msg_events ( & self ) -> Vec < MessageSendEvent > {
705
+ let mut pending_events = self . pending_send_only_events . lock ( ) . unwrap ( ) ;
706
+ let mut ret = Vec :: new ( ) ;
707
+ core:: mem:: swap ( & mut ret, & mut * pending_events) ;
708
+ ret }
709
+
710
+ fn peer_disconnected ( & self , _their_node_id : PublicKey ) { }
711
+
712
+ fn provided_node_features ( & self ) -> NodeFeatures {
713
+ NodeFeatures :: empty ( )
714
+ }
715
+
716
+ fn provided_init_features ( & self , _their_node_id : PublicKey ) -> InitFeatures {
717
+ InitFeatures :: empty ( )
718
+ }
719
+
720
+ fn peer_connected ( & self , _their_node_id : PublicKey , _msg : & Init , _inbound : bool ) -> Result < ( ) , ( ) > { Ok ( ( ) ) }
668
721
}
669
722
670
723
impl < ChannelSigner : EcdsaChannelSigner , C : Deref , T : Deref , F : Deref , L : Deref , P : Deref >
0 commit comments