Skip to content

Commit c6cbf60

Browse files
Aditya Sharmaadi2011
Aditya 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 797d86a commit c6cbf60

File tree

7 files changed

+132
-24
lines changed

7 files changed

+132
-24
lines changed

lightning-background-processor/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,7 @@ mod tests {
12101210
Arc<test_utils::TestLogger>,
12111211
IgnoringMessageHandler,
12121212
Arc<KeysManager>,
1213+
IgnoringMessageHandler,
12131214
>,
12141215
>,
12151216
chain_monitor: Arc<ChainMonitor>,
@@ -1623,6 +1624,7 @@ mod tests {
16231624
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
16241625
onion_message_handler: messenger.clone(),
16251626
custom_message_handler: IgnoringMessageHandler {},
1627+
send_only_message_handler: IgnoringMessageHandler {},
16261628
};
16271629
let peer_manager = Arc::new(PeerManager::new(
16281630
msg_handler,

lightning-liquidity/tests/common/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ pub(crate) struct Node {
130130
>,
131131
>,
132132
Arc<KeysManager>,
133+
Arc<test_utils::TestSendingOnlyMessageHandler>,
133134
>,
134135
>,
135136
pub(crate) liquidity_manager:
@@ -465,6 +466,7 @@ pub(crate) fn create_liquidity_node(
465466
chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new(
466467
ChainHash::using_genesis_block(Network::Testnet),
467468
)),
469+
send_only_message_handler: Arc::new(test_utils::TestSendingOnlyMessageHandler::new()),
468470
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
469471
onion_message_handler: IgnoringMessageHandler {},
470472
custom_message_handler: Arc::clone(&liquidity_manager),

lightning-net-tokio/src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,7 @@ mod tests {
841841
route_handler: Arc::clone(&a_handler),
842842
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
843843
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
844+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
844845
};
845846
let a_manager = Arc::new(PeerManager::new(
846847
a_msg_handler,
@@ -864,6 +865,7 @@ mod tests {
864865
route_handler: Arc::clone(&b_handler),
865866
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
866867
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
868+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
867869
};
868870
let b_manager = Arc::new(PeerManager::new(
869871
b_msg_handler,
@@ -926,6 +928,7 @@ mod tests {
926928
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
927929
route_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler {}),
928930
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
931+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
929932
};
930933
let a_manager = Arc::new(PeerManager::new(
931934
a_msg_handler,

lightning/src/chain/chainmonitor.rs

+30-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ use crate::util::errors::APIError;
3939
use crate::util::persist::MonitorName;
4040
use crate::util::wakers::{Future, Notifier};
4141
use crate::ln::channel_state::ChannelDetails;
42-
42+
use crate::ln::msgs::SendingOnlyMessageHandler;
43+
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
4344
use crate::prelude::*;
4445
use crate::sync::{RwLock, RwLockReadGuard, Mutex, MutexGuard};
4546
use core::ops::Deref;
@@ -253,6 +254,7 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
253254
/// A [`Notifier`] used to wake up the background processor in case we have any [`Event`]s for
254255
/// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
255256
event_notifier: Notifier,
257+
pending_send_only_events: Mutex<Vec<MessageSendEvent>>,
256258
}
257259

258260
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> ChainMonitor<ChannelSigner, C, T, F, L, P>
@@ -397,6 +399,7 @@ where C::Target: chain::Filter,
397399
pending_monitor_events: Mutex::new(Vec::new()),
398400
highest_chain_height: AtomicUsize::new(0),
399401
event_notifier: Notifier::new(),
402+
pending_send_only_events: Mutex::new(Vec::new()),
400403
}
401404
}
402405

@@ -667,6 +670,32 @@ where C::Target: chain::Filter,
667670
}
668671
}
669672

673+
674+
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> MessageSendEventsProvider for ChainMonitor<ChannelSigner, C, T, F, L, P>
675+
where C::Target: chain::Filter,
676+
T::Target: BroadcasterInterface,
677+
F::Target: FeeEstimator,
678+
L::Target: Logger,
679+
P::Target: Persist<ChannelSigner>,
680+
{
681+
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {
682+
let mut pending_events = self.pending_send_only_events.lock().unwrap();
683+
let mut ret = Vec::new();
684+
core::mem::swap(&mut ret, &mut *pending_events);
685+
ret }
686+
}
687+
688+
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> SendingOnlyMessageHandler for ChainMonitor<ChannelSigner, C, T, F, L, P>
689+
where C::Target: chain::Filter,
690+
T::Target: BroadcasterInterface,
691+
F::Target: FeeEstimator,
692+
L::Target: Logger,
693+
P::Target: Persist<ChannelSigner>,
694+
{
695+
fn send_peer_storage(&self, _their_node_id: PublicKey) {
696+
}
697+
}
698+
670699
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref>
671700
chain::Listen for ChainMonitor<ChannelSigner, C, T, F, L, P>
672701
where

lightning/src/ln/msgs.rs

+13
Original file line numberDiff line numberDiff line change
@@ -1517,6 +1517,19 @@ pub struct CommitmentUpdate {
15171517
pub commitment_signed: CommitmentSigned,
15181518
}
15191519

1520+
/// A trait for sending messages to peers without handling any incoming messages.
1521+
///
1522+
/// This trait is designed to handle outbound-only communication, allowing implementations
1523+
/// to send specific types of messages to connected peers identified by their public keys.
1524+
///
1525+
/// This trait extends [`MessageSendEventsProvider`], meaning it is capable of generating
1526+
/// message send events, which can be processed using
1527+
/// [`MessageSendEventsProvider::get_and_clear_pending_msg_events`].
1528+
pub trait SendingOnlyMessageHandler: MessageSendEventsProvider {
1529+
/// Send `peer_storage` message to the given peer.
1530+
fn send_peer_storage(&self, their_node_id: PublicKey);
1531+
}
1532+
15201533
/// A trait to describe an object which can receive channel messages.
15211534
///
15221535
/// Messages MAY be called in parallel when they originate from different `their_node_ids`, however

0 commit comments

Comments
 (0)