Skip to content

Commit c34dbef

Browse files
Aditya SharmaAditya Sharma
authored andcommitted
Enable ChainMonitor to distribute PeerStorage
To enable ChainMonitor sending peer storage to channel partners whenever a new block is added, a new message handler, `SendingOnlyMessageHandler`, has been introduced. This allows the `ChainMonitor` to handle the peer storage distribution. Key changes: - Introduce the SendingOnlyMessageHandler trait to facilitate peer storage distribution. - Add SendingOnlyMessageHandler into the MessageHandler. - Implement SendingOnlyMessageHandler for ChainMonitor and IgnoringMessageHandler. - Process SendingOnlyMessageHandler events inside process_events().
1 parent f6f5585 commit c34dbef

File tree

6 files changed

+124
-23
lines changed

6 files changed

+124
-23
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,6 +1219,7 @@ mod tests {
12191219
Arc<test_utils::TestLogger>,
12201220
IgnoringMessageHandler,
12211221
Arc<KeysManager>,
1222+
IgnoringMessageHandler,
12221223
>,
12231224
>,
12241225
chain_monitor: Arc<ChainMonitor>,
@@ -1632,6 +1633,7 @@ mod tests {
16321633
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
16331634
onion_message_handler: messenger.clone(),
16341635
custom_message_handler: IgnoringMessageHandler {},
1636+
send_only_message_handler: IgnoringMessageHandler {},
16351637
};
16361638
let peer_manager = Arc::new(PeerManager::new(
16371639
msg_handler,

lightning-net-tokio/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,7 @@ mod tests {
837837
route_handler: Arc::clone(&a_handler),
838838
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
839839
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
840+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
840841
};
841842
let a_manager = Arc::new(PeerManager::new(
842843
a_msg_handler,
@@ -860,6 +861,7 @@ mod tests {
860861
route_handler: Arc::clone(&b_handler),
861862
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
862863
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
864+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
863865
};
864866
let b_manager = Arc::new(PeerManager::new(
865867
b_msg_handler,
@@ -922,6 +924,7 @@ mod tests {
922924
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
923925
route_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler {}),
924926
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
927+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
925928
};
926929
let a_manager = Arc::new(PeerManager::new(
927930
a_msg_handler,

lightning/src/chain/chainmonitor.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ use crate::util::logger::{Logger, WithContext};
3838
use crate::util::errors::APIError;
3939
use crate::util::wakers::{Future, Notifier};
4040
use crate::ln::channel_state::ChannelDetails;
41-
41+
use crate::ln::msgs::SendingOnlyMessageHandler;
42+
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
4243
use crate::prelude::*;
4344
use crate::sync::{RwLock, RwLockReadGuard, Mutex, MutexGuard};
4445
use core::ops::Deref;
@@ -244,6 +245,7 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
244245
/// A [`Notifier`] used to wake up the background processor in case we have any [`Event`]s for
245246
/// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
246247
event_notifier: Notifier,
248+
pending_send_only_events: Mutex<Vec<MessageSendEvent>>,
247249
}
248250

249251
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> ChainMonitor<ChannelSigner, C, T, F, L, P>
@@ -371,6 +373,32 @@ where C::Target: chain::Filter,
371373
Ok(())
372374
}
373375

376+
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> MessageSendEventsProvider for ChainMonitor<ChannelSigner, C, T, F, L, P>
377+
where C::Target: chain::Filter,
378+
T::Target: BroadcasterInterface,
379+
F::Target: FeeEstimator,
380+
L::Target: Logger,
381+
P::Target: Persist<ChannelSigner>,
382+
{
383+
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {
384+
let mut pending_events = self.pending_send_only_events.lock().unwrap();
385+
let mut ret = Vec::new();
386+
mem::swap(&mut ret, &mut *pending_events);
387+
ret }
388+
}
389+
390+
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> SendingOnlyMessageHandler for ChainMonitor<ChannelSigner, C, T, F, L, P>
391+
where C::Target: chain::Filter,
392+
T::Target: BroadcasterInterface,
393+
F::Target: FeeEstimator,
394+
L::Target: Logger,
395+
P::Target: Persist<ChannelSigner>,
396+
{
397+
fn send_peer_storage(&self, their_node_id: PublicKey) {
398+
}
399+
}
400+
401+
374402
/// Creates a new `ChainMonitor` used to watch on-chain activity pertaining to channels.
375403
///
376404
/// When an optional chain source implementing [`chain::Filter`] is provided, the chain monitor
@@ -389,6 +417,7 @@ where C::Target: chain::Filter,
389417
pending_monitor_events: Mutex::new(Vec::new()),
390418
highest_chain_height: AtomicUsize::new(0),
391419
event_notifier: Notifier::new(),
420+
pending_send_only_events: Mutex::new(Vec::new()),
392421
}
393422
}
394423

lightning/src/ln/msgs.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1502,6 +1502,19 @@ pub struct CommitmentUpdate {
15021502
pub commitment_signed: CommitmentSigned,
15031503
}
15041504

1505+
/// A trait for sending messages to peers without handling any incoming messages.
1506+
///
1507+
/// This trait is designed to handle outbound-only communication, allowing implementations
1508+
/// to send specific types of messages to connected peers identified by their public keys.
1509+
///
1510+
/// This trait extends [`MessageSendEventsProvider`], meaning it is capable of generating
1511+
/// message send events, which can be processed using
1512+
/// [`MessageSendEventsProvider::get_and_clear_pending_msg_events`].
1513+
pub trait SendingOnlyMessageHandler: MessageSendEventsProvider {
1514+
/// Send `peer_storage` message to the given peer.
1515+
fn send_peer_storage(&self, their_node_id: PublicKey);
1516+
}
1517+
15051518
/// A trait to describe an object which can receive channel messages.
15061519
///
15071520
/// Messages MAY be called in parallel when they originate from different `their_node_ids`, however

0 commit comments

Comments
 (0)